KDAA

타건음만 듣고
한글을 읽을 수 있을까.

키보드 소리만으로 입력을 알아내는 음향 사이드채널 공격(ASCA)을 한글 두벌식 자판에 적용하는 팀 연구입니다. 영문과 달리 한글은 자모가 음절로 조합되는 규칙이 있어서, 분류기가 틀린 자모도 두벌식 오토마타가 걸러 낼 수 있습니다. 저는 타건음 하나를 38개 기호로 분류하는 음향 프런트엔드(CNN)를 맡았습니다.

Korean Dubeolsik Acoustic Attack / 팀 연구, 진행 중 · 담당: 음향 프런트엔드

요약

38개
분류하는 기호. 자모 33개와 스페이스, 백스페이스, Shift, CapsLock, 기타
3종
공격 시나리오. 근접, 원거리, 배경소음
18세션
최소 녹음 설계. 참가자 3명 × 시나리오 3종 × 2세션
30 ms
ESP32-S3에서 타건 하나를 분류하는 목표 시간

연구 배경

키마다 눌리는 소리가 조금씩 달라서, 녹음된 타건음만으로 무엇을 입력했는지 추정하는 공격을 음향 사이드채널 공격(ASCA)이라고 합니다. 조사해 보니 기존 연구는 대부분 영문 QWERTY를 대상으로 했고, 한글 두벌식 자모 입력을 다룬 공개 연구는 찾지 못했습니다. 그래서 두벌식 자판을 대상으로 삼았습니다.

공개 데이터셋과 코드부터 조사했습니다. Harrison 등의 데이터셋, KEYAC 데이터셋(2026), acoustic-keylogger 같은 오픈소스 파이프라인, 그리고 2026년 신규 논문까지 확인했습니다.

두벌식이 다른 점

물리 키는 QWERTY와 같아서 소리를 분류하는 단계 자체는 언어와 상관없습니다. 차이는 그 앞뒤에 있습니다. 영문은 키 하나가 글자 하나지만, 두벌식은 Shift에 따라 한 키가 두 자모(ㄱ/ㄲ 등)를 내고, 초성·중성·종성이 모여 음절 하나가 됩니다.

영문 공격은 맞춤법 교정으로 분류 오류를 확률적으로 고치지만, 한글의 자모 조합 규칙은 거의 결정적인 필터로 작동합니다. 음절이 될 수 없는 자모 배열은 통째로 버려지므로, 분류기가 1순위를 틀려도 하위 후보에서 올바른 음절을 되살릴 수 있습니다. 이 오토마타가 얼마나 복원을 돕는지 재는 것이 이 연구의 핵심입니다.

시스템 구조

녹음48 kHz · mono키로거 라벨 Mel 컴포넌트onset 검출100 ms → log-mel AFE (CNN)38개 기호top-N 확률 LM 서버두벌식 오토마타빔 탐색 · 재순위 한글 문장복원 결과 내가 맡은 부분 kdaa.afe.v1 JSON 배포 목표: ESP32-S3 · int8 독립변인 · 공격 시나리오 3종 근접마이크 20–30 cm, 조용한 방 원거리마이크 1.5–2 m 배경소음근접 + 실제 소음 재생
녹음부터 한글 복원까지의 흐름

파이프라인을 네 부분으로 나눠 팀이 나눠 맡았습니다. 부분 사이의 약속은 문서로 고정해 두었습니다. 예를 들어 음향 프런트엔드와 LM 서버 사이는 kdaa.afe.v1이라는 JSON 형식으로만 주고받습니다.

구성 요소와 역할
구성 요소하는 일
녹음48 kHz mono로 녹음하면서 키로거가 물리 키 입력 시각과 자모를 함께 기록. 한글 입력기를 해석하지 않아 라벨이 정확함
Mel 컴포넌트onset 검출, 타건마다 100 ms 창(누름과 뗌 포함)으로 자르기, log-mel 변환
음향 프런트엔드 (담당)log-mel 하나를 CNN으로 38개 기호 중 하나로 분류하고, 상위 N개 후보와 확률을 출력
LM 서버두벌식 오토마타로 음절 조합, 빔 탐색, 언어 모델 재순위로 문장 복원

음향 프런트엔드

입력

타건 하나를 1 × 64 × 48 크기의 log-mel 스펙트로그램으로 받습니다. 64개 mel 대역(200 Hz~20 kHz), 48개 시간 프레임이고, 클립마다 z-score로 정규화합니다. 추출 조건은 학습 때와 배포 때가 완전히 같아야 해서 값을 고정하고, 조건을 해시로 만들어 다른 조건으로 만든 입력은 거부합니다.

출력

분류 대상은 자모 33개에 스페이스, 백스페이스, Shift, CapsLock, 기타를 더한 38개 기호입니다. 특수키도 따로 처리하지 않고 똑같은 클래스로 둡니다. Shift를 된소리로 해석하는 일은 LM 서버가 맡습니다. 음향 프런트엔드는 음절을 조합하지 않고 기호와 확률만 넘깁니다.

모델과 배포

배포용은 작은 CNN(SmallCNN)이고, 비교용으로 CoAtNet을 줄인 모델도 둡니다. 확률이 실제 정답률과 맞도록 온도 보정을 하고 ECE로 확인합니다. 학습한 모델은 ONNX를 거쳐 int8 TFLite로 바꿔 ESP32-S3에 올리는 것이 목표입니다.

평가

같은 녹음 세션을 무작위로 나누면 정확도가 부풀려지므로 세션 단위로 학습과 평가를 나눕니다. 참가자 단위로 나눠 처음 보는 사람에게도 통하는지도 봅니다. top-1과 top-N 정확도, 시나리오별 정확도, 혼동 행렬, 키 종류별 정확도, 보정 오차(ECE)를 냅니다.

실험 설계

변인
구분내용
독립변인공격 시나리오 3수준. 근접(마이크 20~30 cm, 조용한 방), 원거리(1.5~2 m), 배경소음(근접 거리에서 카페 소음·에어컨·대화를 실제로 틀어 놓고 녹음)
종속변인자모 분류 정확도(top-1, top-N), 시나리오별 정확도, 오토마타 적용 전후의 음절 복원율
통제변인처음부터 끝까지 같은 키보드 한 대, 세션 안에서 고정한 마이크 입력 음량, 같은 입력 문장
참가자본인 포함 3명, 시나리오마다 2세션 이상

입력 문장은 자모마다 25번 이상 나오도록 자동으로 만들었습니다. 한 번 다 치면 참가자당 약 1,840타입니다. 실제 공격 재현을 막기 위해 미리 정한 문장만 치고, 실제 비밀번호나 개인정보는 모으지 않습니다.

이름

프로젝트명 KDAA는 Korean Dubeolsik Acoustic Attack의 약자입니다. 대상이 두벌식이라는 점을 이름에서 바로 보여 주고, 약어 형태가 학술 논문 관례에도 맞습니다.

상태

음향 프런트엔드의 라벨 체계, 입력 검증, 모델, 학습, 평가, 보정, 내보내기 코드를 명세대로 작성했고, 프레임워크 없이 돌아가는 후처리 테스트는 통과했습니다. 실제 녹음 데이터로 학습하는 것과 ESP32-S3에서 속도를 재는 것은 아직입니다. 저장소에 있는 합성 데이터는 코드가 도는지 확인하는 용도라서, 그 정확도는 결과로 싣지 않습니다. 연구비로 500,000원을 지원받았습니다.

이 페이지는 연구의 목적과 설계를 소개하기 위한 것으로, 공격을 재현하는 데 필요한 세부 사항은 싣지 않았습니다.