AMI LTE 모뎀 검수 서버
한전 저압 AMI LTE 통신설비 검수 절차를, 구매규격서 기준으로 프로토콜부터 재구현한 서버로 자동화했습니다.
개요
한전 저압 AMI LTE 통신설비 5-2차 검수를 위한 서버를 구매규격서(제3~4장·15·16절) 기준으로 새로 구현했습니다. 인수받은 레거시는 이름만으로 현행본을 구분할 수 없는 스크립트 무더기(set.py, _set.py, __set.py, 0521_set.py 등)와 소스 없는 암호화 바이너리(encdec.so)로 구성돼 있었고, MySQL 13테이블·MQTT 브로커·pysnmp 등 외부망이 없는 검수서버에 설치하기 어려운 의존성을 요구했습니다. 검수 판정도 389줄짜리 절차서를 따라 사람이 명령을 치고 출력을 눈으로 읽어 매기는 구조라 같은 작업을 반복해도 결과가 달라질 수 있었습니다.
한 번에 갈아엎으면 검수 일정이 걸리므로, 먼저 레거시 바이너리를 건드리지 않고 감싸 절차를 자동화하는 오케스트레이터(ami_inspect)로 실측 정답 데이터를 확보한 뒤, 그 값을 회귀 기준 삼아 프레임·CRC16·ARIA-128·SNMP(BER 인코더 포함)를 표준 라이브러리만으로 직접 재구현(ami_server)했습니다. 디렉토리 구조를 규격서 목차에 맞춰 검수 중 근거를 바로 찾을 수 있게 했고, Trap·Push 수신과 대시보드를 한 프로세스로 묶어 포트가 막히면 시작 시점에 원인을 표시하고 함께 종료하도록 했습니다.
ARIA-GCM은 키가 틀려도 복호에 실패하지 않고 그럴듯한 평문을 내놓는다는 점을 실측으로 발견해, 인증태그 검증을 통과한 평문만 해석·저장하도록 바꿨습니다. 등록 과정에서 모뎀의 복호 키가 고정키에서 장비별 키로 바뀌는 시점이 규격서에 명시돼 있지 않아 실장비로 확인해 반영했습니다. 레이어마다 코드 바깥의 기준(RFC 5794 시험벡터, 레거시 실측 프레임, 표준 CRC 검사값)에 맞춰 검증했고, 대시보드는 판정 근거가 DB에 없으면 항목을 '미실시'로 남겨 추측 판정을 막았습니다. 리셋·펌웨어·TOU처럼 되돌릴 수 없는 동작은 일괄 실행을 열지 않고 confirm 없이는 실행되지 않도록 안전장치를 뒀습니다.
원인 — 복호 성공이 곧 정답은 아니다
ARIA-GCM은 스트림 암호라 키가 틀려도 복호에 실패하지 않고 그럴듯한 평문을 내놓습니다. 그 평문을 그대로 파서에 넣으면 형식이 맞는 것처럼 보이는 레코드가 만들어져, 엉뚱한 계기의 값이 화면에 올라오고도 로그에는 '복호 성공'이 찍혀 있었습니다. 인증태그 검증을 통과한 평문만 해석하도록 바꿔 해결했습니다.
핵심
- 구매규격서 제3~4장·15·16절 근거로 프레임/CRC16/ARIA-128/SNMP(BER)를 표준 라이브러리만으로 재구현
- ARIA-GCM 인증태그 미검증 시 발생하는 오탐(가짜 정상 복호)을 실측으로 찾아내 인증 기반 검증으로 수정
- 레거시 tou.c의 480바이트 상수 배열에서 TOU 페이로드 구조를 역산해 재컴파일 없는 명령 인자로 전환
- raw hex·DB 근거 기반 자동 검수 항목 14종 + 테스트 922개(60초)로 판정 재현성·회귀 확보
- 일괄 실행 범위 제한, 파괴적 동작 confirm 필수 등 현장 모뎀 20~30대 대상 안전장치 설계
직접 해보기
페이로드의 CRC16 체크섬을 계산하고, 바이트 손상을 시뮬레이션해 무결성 검증을 체험합니다.
CRC16 Playground →LEN=9 · CRC=0xAE9B