역할
smc-enc는 운영자·개발자가 커맨드라인에서 직접 실행하는 암호화 도구임. 관리자 비밀번호를 SHA-512로 해시하거나, 전화번호를 LH 스마트홈 방식(ARIA)으로 암·복호화함. 서버가 아니라 java -jar로 1회 실행하고 결과를 표준출력에 찍고 끝남.
SMC/LMC 백엔드가 DB에 넣는 값과 완전히 동일한 알고리즘임. DB에 값을 직접 넣거나, DB에 저장된 암호문을 사람이 읽어야 할 때 씀. 네트워크·DB 접근 없음.
실행
java -jar smc-enc-1.0.jar [명령] [인자]
| 명령 | 인자 | 출력 | 용도 |
|---|---|---|---|
-SHA | ID(salt), 비밀번호 | 128자리 16진수 | 관리자 비밀번호 수동 초기화 |
-ARIA | 평문 | 대문자 HEX | 전화번호 등을 DB 저장 형태로 변환 |
-ARIADEC | HEX 암호문 | 평문 | 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_m | mngr_pwd |
| 관리자 휴대폰/전화(ARIA) | cmn.tb_mngr_m | mngr_mbl_tlno, mngr_tlno |
| 앱 사용자 휴대폰/전화(ARIA) | cmn.tb_usr_m | usr_mbl_tlno, usr_tlno |
앱 사용자 휴대폰 번호는 공개노트/개발/모듈/APW 연계 서버에서도 ARIA 128bit로 암호화 저장한다고 되어 있음 — 같은 키·같은 알고리즘임.
알려진 이슈
- 암호화 키가 소스에 하드코딩되어 있고, 설정 파일(
application.properties)에도 평문으로 중복 존재함. 실행 시에는 설정 파일이 아니라 소스의 하드코딩 값이 우선 적용됨 — 키를 바꾸려면 소스를 고쳐 다시 빌드해야 함 - 같은 키가 smc-enc·SMC·LMC 백엔드 설정 파일 세 곳에 중복됨. 키를 바꾸면 세 곳을 모두 바꾸고 기존 DB 암호문을 전부 재암호화해야 함. 안 그러면 기존 전화번호가 깨져 보임
- ECB 모드는 암호학적으로 권장되지 않으나 “암호화된 전화번호로 검색” 기능이 이에 의존해 임의로 바꿀 수 없음
확인 필요
확인 필요
- 배포된 JAR이 어느 서버·경로에 있는지(운영 서버 상주인지 개발 PC 전용인지) 코드만으로는 알 수 없음.
- dev/prod 프로필로 빌드한 이력이 있는지(현재 저장소에는 local 리소스만 있음).