
2026/07/20 15:09
USB ドライブの隠された暗号化セーフ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Phantomdrive は、標準的な 8 GB ドライブを模倣しつつ暗号化データを隠すオープンソースの USB デバイスです。AES-256 暗号化を使用し、「password:」という特定のトリガーの書き込みを検出する監視によりファイルを保護します。トリガーが検出された場合、デバイスはアンマウントされ再マウントされてデータの暗号化・復号化が行われますが、この機構は無関係なデータにトリガー文字列が含まれていた場合に意図せず起動する可能性があります。ハードウェアには、Arduino の CH340 と同じメーカー製の CH569 チップ、USB3 対応、AES ブロックが含まれており、ケースは破損を招かずに改ざんを防止するためにエポキシでシールされています。AI 需要の高騰による eMMC コスト上昇のため、現在のバージョンでは SD カードを使用していますが、価格が低下した段階で eMMC に切り替える予定です。セキュリティは強化されており、USB シリアル番号から一意のソルトを導出することで事前計算されたキーテーブル攻撃を防ぎ、鍵導出機能(KDF)では SHA-256 を 100,000 回適用して、解読速度(約 3 秒)と堅牢性のバランスをとっています。ディスク暗号化の標準である AES-XTS の代わりに、より高速なパフォーマンスを実現するため AES-CTR を使用しており、AES-CTR では書き込みが約 9 MB/s、読み取りが約 20 MB/s、AES-XTS では書き込みが約 6 MB/s、読み取りが約 10 MB/s という測定結果が出ています。ファームウェアは従来のファイルシステムドライバーをバイパスし、USB WRITE10/READ10 コマンドを直接 SD カードの CMDx 指示に翻訳します。github.com/hydrausb3 のオープンソースライブラリ(CH56x BSP と ISP プログラミングツールを含む)を用いて構築されており、Phantomdrive は独自ベンダーへの依存なしで自己暗号化ストレージを求めている開発者や研究者向けに、安価かつ高速な代替手段を提供しています。
本文
Phantomdrive: プライバシー保護のためのオープンソース暗号化 USB ドライブ
プロジェクト背景と概要
多くの地域でプライバシー法が十分に尊重されない状況下にあり、メディアの鍵解読を強要されたり、最悪の場合無実でも被疑者とみなされたりするリスクが存在します。
Phantomdrive は、これらの課題に対処するために開発された完全にオープンソースのデバイスです。
主な特徴
- 隠しボリューム技術: Veracrypt のように「メディアの鍵解読」攻撃からデータを保護します。
- OS 検出回避: オペレーティングシステムがディスクの残存領域を検知しないよう設計されています。
- トリガー動作: ユーザーが
と書くと、デバイス自体がアンマウントされ、隠し領域(セクション 2)が再マウントされます。password:PUTYOURPASSWORDHERE - AES-256 暗号化: データはインプレースで暗号化/復号化されます。
- ステルス性: 政府関係者や人権を軽視する当局からすり抜けられる可能性があります。
デザインコンセプト
プロジェクト全体(ファームウェア、ハードウェア、機械工学、開発ツール)が完全にオープンソースです。
ハードウェア構成
- マイコン: CH569 チップを使用。偽造 Arduino で使われる CH340 と同社の製品です。
- ストレージ: 高価格だった eMMC の代わりにSD カードを採用(コスト削減)。
- インターフェース: USB3、USB シリアル変換、AES ブロック制御をサポート。
- 物理保護: ケースは接着剤で固定されており、内部への侵入にはデバイスの破壊が必要とされます。
- 拡張性: eMMC 価格下落時に採用を検討する予定です。
シンプルな構成要素
CH569、USB ポート、2 つの降圧回路(Buck)、ファームウェア更新ボタン、SD カード、サポート部品、UART テストポイントから構成されています。
注意: デバイス内部の SD カードはすべて暗号化されており、バラして探すことは不可能です。
暗号学について
開発者の GitHub リポジトリへのアクセスには、AI 生成された Issue(ハルシネーションや些細な問題など)が投稿されていました。コミュニティはこれを擁護攻撃しましたが、本質的なセキュリティテストとして AES-256/OpenSSL による検証は完了しています。
キー導出関数 (KDF)
パスワードから暗号鍵を安全に導出するための仕組みです。
1. 塩(Salt)の導入
単純なパスワード接続($Pw || 0x000$)はブルートフォース攻撃や事前計算された鍵テーブルによる攻撃に弱いです。これを防ぎます。
- 独自性: 各デバイスに一意の塩が割り当てられます。
- 取得方法: USB シリアル番号から確認可能。
udevadm info --query=property --name=/dev/sdc | grep ID_SERIAL_SHORT # 例: ID_SERIAL_SHORT=Phantomdrive:34FC1FA7145467F7
- 塩の例:
(デバイス故障時や復旧に必要)。34FC1FA7145467F7 - ステルス性向上: ファームウェア変更で USB PID/VID を任意値に変更可能。
2. 反復計算 (Iterations)
SHA-256 を10 万回適用します。
- 目的: 攻撃者の計算コストを大幅に増加させる。
- 時間制約: 解錠にかかる時間を約 3 秒に抑えるため(これ以上は利用しにくい)。
- アルゴリズム選択: メモリ強度が高いため Argon2 は採用せず、SHA-256 を使用。
$$ K = sha256(sha256(\dots sha256(Pw || salt || 0x000))) \quad (100k 回) $$
セキュリティ向上策
さらに高いセキュリティが必要な場合は:
- KDF の反復数を増加させる。
- 他のデバイスを探す。
- ソフトウェアによる二重暗号化を採用する。
- デバイスの暗号化機能のみをオフにして、外部ソフトウェアで管理する。
AES モードについて
ブロック暗号 AES をストリーム暗号として動作させるためのモードを選択します。
❌ AES-ECB(推奨しない)
直感的だが安全ではない。
- 同じ平文ブロックが同じ暗号文を生成するため、拡散性が不足する。
- データ削除攻撃に対して脆弱。
⚡ AES-CTR(推奨:速度優先の場合)
カウンター方式を採用。高速ですが「カウンターの再利用」リスクがあります。
- 性能: 書き込み約 9MB/s、読み取り約 20MB/s。
- リスクシナリオ:
- 攻撃者が暗号文を回収し復元。
- ユーザーがデータを上書き書き込み。
- 攻撃者が再び暗号文を回収して復旧。
- 結論: セキュリティ向上よりもスピードメリットの方が大きい場合の選択肢です(現状では AES-XTS が標準推奨)。
🔒 AES-XTS(推奨:セキュリティ優先の場合)
ディスク暗号化の標準規格。2 つの鍵(データ鍵 $K_1$、ツイーク鍵 $K_2$)を使用。
- 仕組み: セクター番号を基にツイークを生成し、各ブロックに独自の調整を加えます。
- 利点: カウンター再利用問題を解決し、高いセキュリティを提供。
- 性能: 書き込み約 6MB/s、読み取り約 10MB/s。
判断:スピードへの代償としてセキュリティが向上するため、標準では AES-XTS が推奨されます(※状況により AES-CTR の使用も検討可)。
ファームウェアについて
2 つのオープンソースプロジェクト(BSP ライブラリと ISP プログラミングライブラリ)を利用しています。
パスワード盗聴機能 (Snooping)
デバイスはファイルシステムを意識せず、USB コマンド(WRITE10/READ10)を受け取り SD カードへ転送します。生データを監視することで「password:」というトリガーを検出・処理します。
動作原理
ロック状態にある間、すべての書き込みデータを監視し、
password: の文字列を探します。
void phantomdrive_snoop_write(uint8_t *buf, uint32_t len) { const char *prefix = "password:"; // ... (検出ロジック省略) ... if (memcmp(buf + i, prefix, prefix_len) == 0) { // パスワード部分を検出 // RAM にコピー memcpy(pending_pw, buf + pw_start, pw_len); // ディスクへの書き込み前にバッファをゼロ化(暗号鍵として処理) memset(buf + i, 0, pw_end - i); return; } }
- 動作: 「password:」を含むデータがディスクに保存されず、代わりに RAM 上で暗号鍵として扱われます。
- 注意点: ディスク上に偶然「password:」という文字列が含まれると誤作動する可能性があります。要件を満たさない場合はファームウェアの変更を検討してください。
おわりに
このプロジェクトを支援してくれた皆様に感謝します。開発は楽しく、コミュニティとの交流が今後の研究開発の原動力です。
支援方法: 現在、事前注文ページを用意しています!
ライアン・ウォーカー (Ryan Walker)
オープンソースでものづくりを行い、オープンソースの仕組みを活用する開発者。