Phantomdrive USB – オープンソースの隠された暗号化ヴォルト
Phantomdrive USB – オープンソースの隠された暗号化ヴォルト
TL;DR
Phantomdriveは、一見すると小さな8 GBのドライブとして見える完全オープンソースの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: 2つの降圧コンバータ(buck converters)がMCUとSDインターフェースに電力を供給します。
- Update Mechanism: 専用のボタンにより、ISPライブラリを介してファームウェアの書き換えが可能です。
- Debug: UARTテストポイントが開発を支援します。
回路図とPCB画像(表面と裏面)は、最小限のレイアウトを示しています:CH569、USBコネクタ、SDスロット、降圧レギュレータ、ボタン、および受動部品。
暗号学的選択肢
Key Derivation Function (KDF)
- Salt: デバイスのUSBシリアル(
ID_SERIAL_SHORT)が、デバイスごとの一意的なソルトとして使用され、デバイス間での事前計算済みテーブルの利用を防ぎます。 - Iterations: 100,000回のSHA-256ラウンドが適用されます。CH569でのアンロックには約3秒かかります。これは、限られたCPUリソースとセキュリティのバランスをとった結果です。Argon2のようなメモリ集約型(memory-hard)な関数は、このハードウェアには不向きです。
- Adjustability: ユーザーは、より高いセキュリティを求める場合、アンロック時間を長くすることを代償に、イテレーション回数を増やすことができます。
"もし、より高いセキュリティが必要なら、KDF SHA256のラウンド数を増やしたり、別のデバイスを探すか、あるいはこのデバイスをソフトウェア・ソリューションを使って二重に暗号化すればいい。" – 著者
AES Modes
- AES-CTR: CH569上で約9 MiB/sの書き込み速度と20 MiB/sの読み込み速度を実現します。書き込み時に同じノンス(nonce)を再利用すると、カウンター・リユース攻撃に対して脆弱になります。
- AES-XTS: ディスク暗号化の標準ですが、カウンター・リユースの問題を排除しつつ、、書き込み速度が約6 MiB/s、読み込み速度が10 MiB/sに低下します。著者は速度のためにCTRを選びました。このトレードオフについて言及しています。
- AES-ECB: 安全ではないベースラインとしてのみ議論されています。
"このデバイスでは、AES-CTRを使用した場合に約9 MB/sの書き込みと20 MB/20 MB/sの読み込みが可能です。AES-XTSを使用した場合、書き込み6 MB/s、読み込み10 MB/sとなります。" – 著者
ファームウェアの仕組み
ファームウェアは、2つのオープンソース・ライブラリの上に構築されています:
- WCH-CH56x BSP – CH569のハードウェア抽象化レイヤー。
- WCH-CH56x ISP – インシステム・プログラミング(in-system programming)のサポート。
Password Snooping Logic
ドライブがロックされているとき、すべてのUSB WRITE10/READ10 コマンドがインターセプトされます。ファームウェアは、入力バッファをスキャンして、接頭辞 `