Tangemの秘密鍵エントロピー生成方法
シードレスモードの場合、Tangem Walletはセキュアエレメント内蔵のハードウェアTrue Random Number Generator(物理乱数発生器)からエントロピー(乱数)を取得します。このチップはドイツのBSI PTG.2(AIS 31)規格に準拠しています。
シードフレーズを利用する場合は、監査済みの乱数生成方式を採用しています:
- Androidの場合、暗号学的に安全な擬似乱数生成器(CSPRNG)であるSecureRandomを使用します。この出力はBoringSSL/Conscryptを経由してカーネルのエントロピープールに送られます。このプールは割り込みタイミングやセンサー、SoCのハードウェアTRNGからシードを取得します。攻撃者が鍵情報を予測・再現することはできません。
- iOSの場合、システム標準のSecRandomCopyBytes APIを利用し、暗号鍵生成に適した安全な乱数バイトを生成します。エントロピーはSecure EnclaveのハードウェアTRNGから供給されます。
仮想通貨ウォレットにおけるエントロピーとは?
エントロピーとは、ウォレットが秘密鍵を生成する際に使う「純粋な乱数」です。ビット数で表され、ビット数が多いほど、生成される鍵の組み合わせは膨大になります。
ウォレットはセットアップ時に一度だけエントロピーを生成します。その後の鍵・アドレス・署名はすべて固定された数学的ルールに従って導出されるため、新たな乱数は加わりません。
このため、セットアップ時のエントロピー生成が一度きりの重要な工程となります。エントロピーが不足している場合、後から導出されるニーモニックの強度を高めることはできません。
秘密鍵にはどれだけのエントロピーが必要?
十分なエントロピーがないと、攻撃者は鍵生成過程に潜むパターンや偏りを突いて、全探索よりもはるかに効率的に秘密鍵を推測できてしまいます。
秘密鍵は、どんな攻撃者から見ても完全にランダムである必要があります。エントロピーが低いと、実質的な探索範囲が大幅に狭まり、天文学的に困難な問題が、現実的な計算力や分析で解けるリスクが生じます。
実際には、この乱数は高品質なエントロピーソースから暗号学的に安全な乱数生成器(CSPRNG)へ供給されます。もしソースが弱い(例えばタイムスタンプやプロセスID、十分でないシステムノイズに依存している)場合、生成された秘密鍵に隠れた構造が生じます。
実際の事件でも、デバイスの乱数生成器(RNG)が不十分にシードされたことで、Bitcoinの秘密鍵が復元され、大規模な鍵盗難が発生しました。効果的なエントロピーが32ビットまで低下した例も報告されています。
十分なエントロピーがあれば、秘密鍵の安全性は暗号アルゴリズム本来の強度に見合ったものとなります。たとえばBitcoinなどで使われるsecp256k1楕円曲線の場合、数学的攻撃に対して約128ビットの安全性があり、秘密鍵には最低でもそれに見合うエントロピーが必要です。
Tangemはシードレスモードでどのようにエントロピーを生成する?
シードレスモードでは、Tangem Cardがセキュアエレメントチップ内で秘密鍵を生成します。このチップにはハードウェアTrue Random Number Generatorが搭載されており、熱雑音や発振器ジッタなどの物理現象から乱数を生成します。具体的な手順は以下の通りです。
ステップ1:TRNGが物理ノイズをサンプリング
ハードウェアTrue Random Number Generatorは、シリコン内部の予測不能な変動(トランジスタレベルの熱雑音、量子効果による電子ノイズ、高周波発振器のジッタなど)からエントロピーを取得します。この段階の出力は、バイアスや相関を含む生のビット列です。
ステップ2:コンディショニングでバイアス除去 TRNGは、暗号ハッシュやホワイトニング処理などのコンディショニングアルゴリズムを適用し、パターンを除去して出力を均一に分布させます。また、生データのヘルステストも継続的に実施し、ノイズソースに異常があれば動作を停止します。この工程は、CC EAL認証済みライブラリを用いて、チップ出荷時から変更されずに実行されます。
ステップ3:チップが256ビットを抽出 コンディショニング後の出力から256ビットのシーケンスを抽出します。この値が秘密鍵候補となります。
ステップ4:曲線オーダーに対して候補を検証 楕円曲線の秘密鍵は、特定範囲内のスカラー値である必要があります。secp256k1の場合、鍵は1以上n-1以下の整数でなければなりません(nは基点のオーダーで、2^256未満)。
ゼロやn以上の候補は無効となり、チップは再度抽出を行います(この確率は2^-128程度と極めて低いです)。
ステップ5:値がマスターキーとなる この工程でシードレス方式が実現します。256ビットがそのままマスター秘密鍵となり、ニーモニックは生成されません。
ステップ6:チップが公開鍵を計算 公開鍵は、秘密鍵にsecp256k1の生成点Gを掛けて算出します(この演算は一方向で不可逆です)。
ステップ7:公開鍵からアドレスを導出 Bitcoinの場合、指定パスの圧縮公開鍵をSHA-256、続いてRIPEMD-160でハッシュし、20バイトの値を得ます。このエンコード方式によってアドレスタイプが決まります。
BIP-84パスの鍵はbech32形式のP2WPKHアドレス、BIP-44パスの鍵はBase58Check形式のP2PKHアドレスになります。パスごとに異なる鍵・アドレスが生成されます。
ステップ9:秘密鍵は保護メモリ内に保持 秘密鍵はセキュアエレメントチップ内に生涯保存され、トランザクション署名もチップ内部で完結します。鍵がスマートフォンやアプリ、インターネットに出ることはありません。
Tangemはシードフレーズ方式でどのようにエントロピーを生成する?
シードフレーズ方式では、Tangemアプリが端末上でニーモニックを生成します。アプリはプラットフォームの暗号乱数生成器(iOSはSecRandomCopyBytes、AndroidはSecureRandom)から乱数バイトを取得します。
どちらも暗号学的に安全な擬似乱数生成器で、シードはOSのエントロピープールから供給されます。このプールは端末起動時や使用中にハードウェア乱数ソースから充填されます。
アプリはこれらのバイト列をBIP-39規格に従って単語に変換します。チェックサムを付加し、11ビットごとに区切って2048単語リストから対応する単語を割り当てます。12単語で128ビット、24単語で256ビットのエントロピーを表現します。
シードレスモードは、「書き留めたフレーズを誰かに見つけられる・写真を撮られる・紛失する」といった最大のリスク要因を排除します。一方、シードフレーズ方式は他のウォレットへの移行が可能ですが、チップ外に鍵のコピーが生じる点がリスクです。
ユーザーが自分でエントロピーを検証できない理由
40ビットのエントロピーで作られた鍵も、256ビットのエントロピーで作られた鍵も、見た目やアドレス・単語数は全く同じです。
家庭で実行できる検査方法は存在しません。そのため、エントロピーの欠陥が製品出荷後も長年見過ごされることがあります。したがって、検証は購入前に、公開された監査結果やメーカーからの技術情報で行う必要があります。
エントロピー攻撃はどのように行われる?
攻撃者が公開アドレスから秘密鍵を計算することはできません。これは離散対数問題の解決が必要で、現実的な計算力では不可能です。
しかし、エントロピーが弱い場合、その計算自体が不要になります。攻撃者は壊れた乱数生成器が生み出しうる鍵の範囲を総当たりし、各候補からアドレスを導出し、ブロックチェーン上で残高を照合します。
アドレスが検索対象となります。これがエントロピー攻撃で資金入りウォレットだけが狙われる理由です。
ウォレット選びで注意すべきポイント
ハードウェアウォレットを選ぶ際は、強力かつ検証可能なエントロピー生成機能を持つデバイスを最優先してください。これが秘密鍵の予測不可能性を左右する最重要ポイントです。
最近のエントロピー攻撃事例は、「オープンソースファームウェア=安全」とは限らない理由を示しています。多くのユーザーはソースコードを自力で監査できませんが、高度な攻撃者は脆弱性を見抜き悪用することが可能です。
最善策は、重要なファームウェアの無用な公開を避けつつ、著名なセキュリティ専門家による独立監査を徹底することです。最終的な安全性は、強固な設計・十分なテスト・第三者による検証で担保されます。- Andrey Lazutkin, CTO
認証済みセキュアエレメントと、独立監査されたファームウェアを組み合わせたハードウェアウォレットの利用を推奨します。ファームウェアはセキュアエレメントの利用を制御するため、その実装に不備があればどんなにハードウェアが安全でもリスクとなります。したがって、すべてのファームウェアアップデートは信頼できる専門家によるレビューが必要です。
Tangemのセキュリティ設計は、Kudelski Security、Riscure、Cure53などの第三者ラボによる独立評価を受けており、ウォレット全体の安全性が確認されています。