「興味深い時代を生きられますように」 ― ことわざ

Jadeのファームウェア バージョン1.0.41をリリースしました。新機能、修正、セキュリティアップデートが含まれています。このリリースは、最近悪用されたColdcardの乱数生成脆弱性を受け、ビットコインとハードウェアウォレットを取り巻く状況が揺れるなかで公開されました。Jadeファームウェアの開発者として、ユーザーの皆さまに安心していただけるよう、Coldcardの問題と、Jadeユーザーを守るための取り組みについて説明します。

乱数

最初にあらためて、JadeはColdcardの脆弱性の影響を受けないことをお伝えします。Coldcardの問題は、プログラムのロジックエラーによってデバイスの乱数生成能力が低下し、生成されたシードを攻撃者が列挙できる状態になったことでした。つまり、特定期間にウォレットが生成したシードは、十分な計算能力があれば推測できました。攻撃者は候補となるシードのリストを生成して残高を確認し、ビットコインを自分のアドレスへ移すトランザクションに署名して、正当な所有者から盗みました。

Jadeには、性能が低下した乱数生成経路へフォールバックする仕組みがないため、この問題は発生しません。Jadeは、内部ハードウェアチップのノイズから生成された乱数をデバイス自体から取得します。モデルに応じて、内部サイクルカウンター、タイミングジッター、内部センサーの測定値、カメラノイズなど、他のデバイス由来のエントロピーも加えます。ホストアプリから独自のエントロピーを渡すこともできます。これらすべてのソースは、BIP32がシードからウォレットを導出する際にも使用するハッシュ関数SHA512で混合されます。結果の一部を乱数データとして返し、残りを乱数生成器のシードとして使用します。

Jadeの乱数生成器に対する複数の分析で、その堅牢性と正確性が確認され、乱数生成のベストプラクティスに従っていることが示されています。

Coldcard問題の余波とAI時代のセキュリティ

攻撃の経緯が明らかになるなか、一部のAIモデルはColdcardファームウェアのソースコードを与えると、このバグを特定できることが分かりました。その結果、多くの個人やグループが、Jadeを含む公開されたハードウェアウォレットのソースコードをAIモデルでスキャンするようになりました。その後、ビットコインエコシステムの他の領域(ライブラリ、ウォレット、レイヤー2プロジェクトなど)もスキャンされています。

私たちは「Don’t trust, verify(信用せず、検証せよ)」を掲げ、クライアント側のコードをすべてオープンソースにしています。そのため、AIモデルがコードスキャンに役立つようになった当初から、AIによる報告を受け取り、対応してきました。それでも新たな報告の量は多く、セキュリティ報告のトリアージ方法を見直し、担当者を増やす必要がありました。セキュリティ研究者や関心を持つ第三者も、ソースコードのセキュリティ問題を調査しました。私たちは各報告の妥当性と重複を確認し、影響範囲と深刻度を判断したうえで、必要に応じて修正しました。時間のかかる作業であり、各チームは対応に追われました。

このスキャンはソフトウェアエコシステム全体で続いており、最終的には私たち全員にとって、より安全なソフトウェアにつながります。ユーザーがここ数週間から学ぶべき最も重要な点は、ソフトウェアを常に最新の状態に保つことです。アップデートを定期的に確認し、適用してください。ハードウェアウォレットのファームウェアだけでなく、アプリケーション、OS、デバイス、ルーター、家電にも当てはまります。セキュリティ維持は継続的なプロセスであり、ユーザー自身も参加する必要があります。

Coldcardのバグは、シード生成時に被害が生じるため、アップグレードだけではユーザーを保護できない不幸な事例です。適切な対応は問題を特定し、ウォレットのシードを移行するようユーザーへ通知することでした。この軽減策を間に合わせられるほど早くバグが特定されたのか、また攻撃前に特定されていたのかは明らかではありません。状況は今後明確になっていくでしょう。

Jadeの開発状況

1.0.41では報告された複数の問題を修正しました。安全に実施できるようになり次第、速やかにアップグレードすることを推奨します。深刻度の低い報告も複数あり、開発期間を短縮して1.0.42で対応する予定です。

バグ報告は、機能要望やUIの問題、意図どおりに動作しない機能、デバイスのセキュリティに影響し得る問題まで、種類も深刻度もさまざまです。重大なセキュリティ問題が発生した場合は、すべてのコミュニケーションチャネルで直ちにアップグレードを呼びかけます。今回のリリースでそこまでの対応は必要ないと判断していますが、最高水準のセキュリティを維持するため、常に速やかな更新を推奨します。

1.0.41で講じた対策には、ランタイム環境の最新安定版への更新、スタック保護の強化、依存関係の更新、機密性の高いメモリ領域を確実に消去するための監査などがあります。自動テストも改善し、問題をより迅速に発見・修正できるようになりました。これらはColdcardのインシデント以前から、デバイスのセキュリティを可能な限り高める継続的な取り組みの一環として実施していました。

現在までに、Jadeコードに対するAIの自動スキャンを数十件受け取り、乱数生成器や署名コードなどの機密性の高い機能を対象とした人間による追加レビューも複数受けました。提案された変更の多くは、多層防御を改善するものでした。これは、システムの一部が想定どおりに動作しなくても安全性を維持する考え方です。複数のエントロピー源を利用し、単一障害によって出力全体が損なわれないようにするJadeの乱数生成コードが、その例です。

レビューや報告を提供してくださった皆さまに感謝します。セキュリティ問題を発見したと思われる場合は、Jadeのソースコードと照合し、SECURITY.mdの手順に従ってご報告ください。

開発プロセス

開発プロセスでは、すべてのコード変更について、上流へコミットする前に必ず別の担当者によるレビュー(four-eyes review)を行います。機密性の高い領域は、チーム全員に加えて外部開発者へレビューを依頼する場合もあります。新機能は実装前にセキュリティ上の懸念を監査します。新しいプロトコルや暗号プリミティブに関係する場合は、実装前に社内研究チームへプロトコルレビューを依頼します。

公開リポジトリへコミットする前に、候補コードを社内ブランチで開発・テストします。テストには、言語とメモリの安全性、不正入力、機能、すべてのデバイス種別と両ファームウェアビルドでの手動テストが含まれます。開発中の潜在的なセキュリティ問題を特定する社内AIスキャンツールも使用します。開発者によるテストに加え、QA、プロダクト、アプリ開発の各チームも機能をテストします。

バグを発見した場合は、同じ種類のバグが存在し得る他の箇所をスキャンします。可能であれば、その種類のバグ自体を発生させない、または自動テストで検出できるようコードを変更します。

ソフトウェア品質を高める新しい考え方やツールを見つけるたび、プロセスを改善しています。GitHubリポジトリで公開しているテストを改善する提案やプルリクエストを歓迎します。

Jadeの改善を続けるにあたり、ユーザー、開発者コミュニティ、セキュリティ研究者の皆さまの支援に感謝します。特に次の皆さまへ感謝を申し上げます。

  • 非常に慌ただしかったここ数週間、協力してくれた社内チーム。
  • Loupeを開発し、今回および過去のリリースで問題を報告してくださったSpiralのJordan Mecom氏。Loupeプロジェクトについてはこちらをご覧ください。
  • エージェント型セキュリティハーネスKvazar(@kvazar_ai)を開発し、今回のリリースで問題を報告してくださった0xaudron(@0xaudron)氏。
  • 今回のリリースにおける複数の重要な問題の調査と修正に協力してくださったDamir、odudex、ZatoshiX、@erickcestari、@popodai、Bitcoin Red Teamの皆さま。

ありがとうございます。
Jadeファームウェア開発者 Jon、Dan、Mike

原文:Reflections on the Coldcard Fallout from the Jade Team