Phantomdrive USB – 오픈 소스 숨겨진 암호화 금고
Phantomdrive USB – 오픈 소스 숨겨진 암호화 금고
TL;DR
Phantomdrive는 8GB의 작은 드라이브로 보이는 완전한 오픈 소스 USB 스틱입니다. password:YOUR_PASSWORD라는 줄이 포함된 파일을 작성하면 장치가 가시적인 파티션을 언마운트하고 숨겨진 AES-256 암호화 볼륨을 다시 마운트하여, 강압적인 당국에 대해 그럴듯한 부인(plausible deniability)을 제공합니다.
Phantomdrive의 기능 및 중요성
Phantomdrive는 특정 비밀번호 트리거가 가시적인 파일 시스템에 작성될 때까지 운영 체제로부터 암호화된 저장 공간을 숨깁니다. 이 설계의 목적은 사용자에게 무해한 데이터만을 보여줌으로써 강제 복호화나 법적 압박을 피할 수 있게 하여, 비밀 볼륨에 은밀하게 접근할 수 있도록 하는 것입니다.
하드웨어 설계 개요
- Core MCU: CH569, 널리 사용되는 CH340 USB-to-Serial 컨버터와 동일한 제품군에 속하는 저가형 칩입니다.
- Memory: SD 카드를 사용합니다 (eMMC 가격이 일시적으로 높기 때문에 선택됨). SD 카드는 에폭시로 캡슐화되어 있어 물리적 조작이 어렵습니다.
- Interfaces: USB 3.0, SD/eMMC 컨트롤러, 내장 AES 블록, 그리고 SM4 블록(중국 상용 암호)이 있습니다.
- Power: 두 개의 buck converter가 MCU와 SD 인터페이스에 전력을 공급합니다.
- Update Mechanism: 전용 버튼을 통해 ISP 라이브러리를 사용하여 펌웨어 플래싱이 가능합니다.
- Debug: UART 테스트 포인트가 개발을 돕습니다.
회로도와 PCB 이미지(전면 및 후면)는 CH569, USB 커넥터, SD 슬롯, buck regulator, 버튼, 그리고 수동 소자들로 구성된 최소한의 레이아웃을 보여줍니다.
암호학적 선택
Key Derivation Function (KDF)
- Salt: 장치의 USB 시리얼(
ID_SERIAL_SHORT)이 각 장치마다 고유한 솔트(salt)로 사용되어, 장치 간의 사전 계산된 테이블을 방지합니다. - Iterations: 100,000회의 SHA-256 라운드를 적용하며, CH569에서 잠금을 해제하는 데 약 3초가 소요됩니다. 이는 보안성과 제한된 CPU 자원을 균형 있게 맞춘 결과입니다. Argon2와 같은 메모리 하드 함수는 이 하드웨어에 적합하지 않습니다.
- Adjustability: 사용자는 더 높은 보안을 위해 반복 횟수를 늘릴 수 있지만, 이 경우 잠금 해제 시간이 길어집니다.
"보안이 더 필요하다면 KDF SHA256 라운드 수를 늘리거나, 다른 장치를 찾거나, 이 장치를 소프트웨어 솔루션을 사용하여 이중 암호화하십시오." – 저자
AES Modes
- AES-CTR: CH569에서 약 9 MiB/s의 쓰기 및 20 MiB/s의 읽기 속도를 제공합니다. 동일한 nonce를 여러 쓰기에 사용하면 counter-reuse 공격에에 취약할 수 있습니다.
- AES-XTS: 디스크 암호화의 표준이며, counter-reuse 문제를 해결하지만 쓰기 약 6 MiB/s, 읽기 약 10 MiB/s로 처리량을 감소시킵니다. 저자는 속도를 위해 CTR 모드를 선택했습니다.
- AES-ECB: 보안이 취약한 베이스라인으로만 논의되었습니다.
"이 장치로 AES-CTR 모드에서는 약 9 MB/s 쓰기 및 20 MB/s 읽기 속도를 얻을 수 있고, AES-XTS 모드에서는 6 MB/s 쓰기 및 10 MB/s 읽기 속도를 얻을 수 있습니다." – 저자
펌웨어 메커니즘
펌웨어는 두 개의 오픈 소스 라이브러리를 기반으로 합니다:
- WCH-CH56x BSP – CH569를 위한 하드웨어 추상화 계층입니다.
- WCH-CH56x ISP – 인-시스템 프로그래밍 지원 기능입니다.
Password Snooping Logic
드라이브가 잠겨 있을 때, 모든 USB WRITE10/READ10 명령은 가로채집니다. 펌웨어는 들어오는 버퍼에서 `