역할

smc-enc는 운영자·개발자가 커맨드라인에서 직접 실행하는 암호화 도구임. 관리자 비밀번호를 SHA-512로 해시하거나, 전화번호를 LH 스마트홈 방식(ARIA)으로 암·복호화함. 서버가 아니라 java -jar로 1회 실행하고 결과를 표준출력에 찍고 끝남.

SMC/LMC 백엔드가 DB에 넣는 값과 완전히 동일한 알고리즘임. DB에 값을 직접 넣거나, DB에 저장된 암호문을 사람이 읽어야 할 때 씀. 네트워크·DB 접근 없음.

실행

java -jar smc-enc-1.0.jar [명령] [인자]

명령인자출력용도
-SHAID(salt), 비밀번호128자리 16진수관리자 비밀번호 수동 초기화
-ARIA평문대문자 HEX전화번호 등을 DB 저장 형태로 변환
-ARIADECHEX 암호문평문DB 암호문을 사람이 읽을 값으로 복원

인자 부족·형식 오류 시 도움말(*** SmartHome Encrypt Util v1.1 ***)을 출력함.

SHA-512 비밀번호 해시

  • salt가 사용자 ID임. 같은 비밀번호라도 ID가 다르면 결과가 다름
  • 결과를 cmn.tb_mngr_m.mngr_pwd(관리자) 또는 cmn.tb_usr_m(앱 사용자)에 사람이 직접 넣음
  • SMC 백엔드도 동일 로직(HashUtil.java, CertService.processResetPassword)을 씀. 비밀번호를 수동으로 바꿨으면 mngr_pwd_fail_cnt(실패횟수)와 mngr_ss_cd(잠김이면 LCK)도 같이 되돌려야 로그인이 됨

ARIA 암호화·복호화

  • ECB 모드(IV 없음) — 같은 평문은 항상 같은 암호문. 백엔드가 “암호화된 전화번호로 검색”하는 이유가 이것임
  • 패딩은 PKCS가 아니라 0x00 채움. 평문 끝 널바이트는 복호화 시 사라짐
  • 입력 256바이트 초과 시 예외
  • 전화번호 저장 전 항상 하이픈(-) 제거 후 암호화함(ManagerService.java, CertService.java). 이 도구로 값을 만들 때도 [전화번호]처럼 하이픈 없이 숫자만 넣어야 DB 값과 일치함. 하이픈을 넣으면 SMS 인증 시 “사용자 전화번호가 일치하지 않습니다(SQI1014)“가 남

저장 위치

용도테이블컬럼
관리자 비밀번호(SHA)cmn.tb_mngr_mmngr_pwd
관리자 휴대폰/전화(ARIA)cmn.tb_mngr_mmngr_mbl_tlno, mngr_tlno
앱 사용자 휴대폰/전화(ARIA)cmn.tb_usr_musr_mbl_tlno, usr_tlno

앱 사용자 휴대폰 번호는 공개노트/개발/모듈/APW 연계 서버에서도 ARIA 128bit로 암호화 저장한다고 되어 있음 — 같은 키·같은 알고리즘임.

알려진 이슈

  • 암호화 키가 소스에 하드코딩되어 있고, 설정 파일(application.properties)에도 평문으로 중복 존재함. 실행 시에는 설정 파일이 아니라 소스의 하드코딩 값이 우선 적용됨 — 키를 바꾸려면 소스를 고쳐 다시 빌드해야 함
  • 같은 키가 smc-enc·SMC·LMC 백엔드 설정 파일 세 곳에 중복됨. 키를 바꾸면 세 곳을 모두 바꾸고 기존 DB 암호문을 전부 재암호화해야 함. 안 그러면 기존 전화번호가 깨져 보임
  • ECB 모드는 암호학적으로 권장되지 않으나 “암호화된 전화번호로 검색” 기능이 이에 의존해 임의로 바꿀 수 없음

확인 필요

확인 필요

  • 배포된 JAR이 어느 서버·경로에 있는지(운영 서버 상주인지 개발 PC 전용인지) 코드만으로는 알 수 없음.
  • dev/prod 프로필로 빌드한 이력이 있는지(현재 저장소에는 local 리소스만 있음).

관련

공개노트/개발/모듈/APW 연계 서버 공개노트/개발/시스템 구성