MIFARE 클래식 실전 공격과 보안 교훈
본 논문은 MIFARE Classic 카드의 난수 생성기 취약성을 이용해 CRYPTO1 스트림 암호의 키스트림을 복구하고, 이를 통해 섹터 0 전체와 알려진 블록이 있는 경우任意 섹터의 데이터를 읽고 수정할 수 있는 저비용 실용 공격을 제시한다.
저자: Gerhard de Koning Gans, Jaap-Henk Hoepman, Flavio D. Garcia
본 논문은 전 세계적으로 2억 장 이상이 사용되는 MIFARE Classic 비접촉식 스마트 카드의 보안 취약점을 실증적으로 분석하고, 저비용 장비와 공개된 소프트웨어를 이용해 실용적인 공격을 구현한다. 먼저, MIFARE Classic은 ISO 14443‑A 물리 계층을 기반으로 하며, 48 비트 대칭키와 NXP가 비밀로 유지하는 CRYPTO1 스트림 암호를 사용해 데이터 전송을 암호화한다. 카드와 리더는 3‑패스 상호 인증 프로토콜을 수행하고, 카드가 32 비트 논스(NC)를 전송한 뒤 리더가 64 비트 암호화된 응답을 반환한다.
Nohl·Plötz가 이전에 발견한 바와 같이, 카드 내부의 난수 생성기는 실제 엔트로피가 16 비트에 불과하고 상태를 유지하지 않는다. 논문은 이 약점을 활용해 동일한 NC가 재현될 때 동일한 키스트림이 생성된다는 사실을 실험적으로 확인한다. 이를 위해 연구팀은 Proxmark III 장비에 ISO 14443‑A 스택을 직접 구현하고, 카드와 리더 간의 모든 교환을 캡처했다. 이후 동일한 NC를 여러 번 유도해 키스트림을 추출하고, 이를 XOR 연산으로 복호화에 사용하였다.
키스트림이 알려지면 CRYPTO1의 가변성(malleability)을 이용해 암호문을 자유롭게 변조할 수 있다. 논문은 섹터 0(UID, 제조사 데이터, 키 A·B, 접근 제어 비트 등)의 전체 16 바이트 블록을 읽고 쓰는 과정을 상세히 기술한다. 특히, 섹터 0의 트레일러 블록은 키 A가 절대 읽을 수 없고, 키 B는 설정에 따라 읽을 수 있지만, 키스트림이 있으면 두 키 모두 복호화가 가능함을 입증한다.
또한, 섹터 내부의 임의 블록 하나를 사전에 알고 있으면(예: 트랜잭션 로그에서 앞 6 바이트와 뒤 6 바이트를 확보) 해당 섹터 전체를 복호화할 수 있음을 보여준다. 이는 대부분의 실제 시스템이 섹터 0 외의 섹터에 저장하는 데이터(예: 교통 요금, 접근 권한, 전자 여권 정보 등)가 실제로는 키스트림만 알면 쉽게 탈취·변조될 수 있음을 의미한다.
공격 구현에 사용된 Proxmark III는 FPGA 기반 신호 처리와 마이크로컨트롤러를 결합해 저수준 파리티 비트까지 제어한다. 파리티 비트가 암호화된다는 점을 확인함으로써, 무결성 검증이 애플리케이션 레이어에서만 수행된다는 설계상의 결함을 지적한다.
실험 결과, 공격자는 몇 분 내에 섹터 0 전체와 선택된 섹터의 데이터를 완전 복구·변조할 수 있었으며, 키 자체를 알지 못해도 48 비트 비밀키를 추정하기 위한 오프라인 브루트포스 공격에 필요한 평문을 확보할 수 있었다. 이는 MIFARE Classic을 기반으로 하는 교통 결제, 출입 통제, 전자 여권, 차량 키 등 다양한 응용 분야에 직접적인 보안 위협을 제기한다. 논문은 NXP에 사전 통보했으며, 향후 펌웨어 업데이트와 난수 생성기 설계 개선, 키 길이 확대 등을 통한 대응 방안을 제시한다.
원본 논문
고화질 논문을 불러오는 중입니다...
댓글 및 학술 토론
Loading comments...
의견 남기기