OneKeyウォレットはリカバリーフレーズをどう生成するのか — その乱数はどこから来るのか

キーストーン
- ウォレットの安全性は、作成時に得られる予測不能なエントロピーそのもので決まります。ここが弱ければ、PINやバックアップ方法など後から加える対策では取り返しがつきません。
- リカバリーフレーズは、そのエントロピーを人間が読める形にエンコードしたものにすぎません。128 / 192 / 256ビットのエントロピーがそれぞれ12 / 18 / 24語のBIP39単語に対応します。
- 話題となっている問題は、
libngu内のYasmarang PRNGの誤設定によってチップのTRNGが迂回されるというものですが、OneKeyの該当ファームウェア経路はlibnguやColdcard関連の依存を一切使用していません。 - Pro / Classic 1S / Classic 1S PureはTHD89 SEのTRNG、ClassicはATECC608A SEのTRNG、MiniはSTM32 MCUのTRNGから乱数を取得し、いずれもハードウェアの真性乱数を確実に利用しています。
- リカバリーフレーズは一度漏洩すれば誰でもウォレットを復元でき、紛失すればどのデバイス・アプリ・メーカーも復元できません。オフラインで正確にバックアップする責任は常にユーザー自身にあります。
本記事では、OneKeyの各モデルが新しいウォレットを作成するときにエントロピーとリカバリーフレーズをどのように生成しているのか、そしてなぜ一部のソフトウェア乱数実装をめぐる最近の懸念がOneKeyのウォレット作成経路には当てはまらないのかを、順を追って解説します。
ウォレットの安全性は、誰にも予測できない乱数から始まる
ウォレットの安全性は、たった一つのものから始まります。エントロピー、つまりウォレット作成に使われる予測不能な乱数ビットです。リカバリーフレーズは、このエントロピーを人間が読める形にエンコードしたものにすぎません。作成時点のエントロピーが予測可能であれば、その後にどれだけ対策を重ねても — PINを設定しても、フレーズの保管場所を工夫しても、アドレスの導出方法を変えても — 失われた安全性は取り戻せません。
OneKeyのモデルは、すべてが同じ場所から乱数を取得しているわけではありません。ここでは、各デバイスのリカバリーフレーズの背後にあるエントロピーが、正確にどこから来ているのかを見ていきます。
報道で取り上げられている問題の発端は、libnguにおけるYasmarang PRNGの設定ミスで、特定のビルドがチップのTRNGを迂回してしまう、というものです。OneKeyの該当するファームウェア経路はlibngu、Coinkite、Coldcard、あるいはCKCC依存を一切使用しておらず、複数回にわたる監査によって、ハードウェアまたはセキュアエレメントのTRNGを確かに呼び出していることが確認されています。以下では、各デバイスが実際に利用しているハードウェア乱数インターフェースを、機種ごとに見ていきます。
エントロピーとは何か。なぜウォレットはそれなしでは成立しないのか
エントロピーは、「予測不能さの量」を測定可能な形で表したもので、通常はビット単位で数えます。128ビットのエントロピーとは、初期値の候補が2^128通りあるということです。ほかに欠陥がなければ、攻撃者に残された手立ては総当たりで推測することだけです。あなたの秘密鍵も、アドレスも、署名する能力も、すべてこの一つの初期シークレットから決定論的に導出されます。
ですから、リカバリーフレーズの安全性は、英単語が「たくさん並んでいて複雑に見える」ことから来るのではありません。その背後にある生のエントロピーが、どれだけ予測不能であるかによって決まります。
- 128ビットのエントロピー → 12個のBIP39単語
- 192ビットのエントロピー → 18個のBIP39単語
- 256ビットのエントロピー → 24個のBIP39単語
乱数が弱ければ、攻撃者はウォレット作成時の入力を再現し、まったく同じフレーズと秘密鍵にたどり着けてしまいます。SHA-256をいくら重ねても、PIN保護を施しても、セキュアエレメントに保管しても、予測可能な入力を本当に予測不能なエントロピーに変えることはできません。
乱数からリカバリーフレーズへ — 実際の計算はどう行われるのか
細かな点はモデルごとに異なりますが、すべてのBIP39ウォレットは同じ計算モデルを共有しています。
ハードウェア真性乱数生成器(TRNG)
↓
128 / 192 / 256 bit のエントロピー(ENT)を取得
↓
SHA-256(ENT) の先頭 ENT / 32 bit をチェックサム(CS)として採用
↓
ENT || CS を 11 bit ごとに分割し、それぞれを 2048 語の BIP39 単語に対応付け
↓
12 / 18 / 24 単語 → seed → 秘密鍵、アドレス、署名鍵
たとえば12語のフレーズは、128ビットのエントロピーに4ビットのチェックサムを加えた合計132ビットを使います。これはちょうど11ビットずつ12グループに分割でき、各グループがBIP39の単語リストへのインデックスになります。
ここでのSHA-256はBIP39のチェックサムを計算しているだけで、乱数生成器ではありません。フレーズの乱数性は、あくまで作成時に取得された生のエントロピーに委ねられています。
では、なぜOneKeyの実装は今回のColdCardの問題の影響を受けないのでしょうか。以下では、各モデルの最初の乱数がどのように生成され、それが影響を受けるコード経路に入り込むことがあるのかを、デバイスごとに詳しく見ていきます。
OneKey Pro
OneKey Pro
影響を受けるか?
いいえ、今回のColdCard libngu / Yasmarang問題の影響は受けません。Proの現在のビルドはデフォルトでTHD89を有効にしています。デバイス上でウォレットを作成すると、THD89のTRNGが乱数入力を供給し、その後のBIP39またはSLIP39のエンコードをファームウェアが担います。
生成の流れ
THD89 TRNG → ウォレット初期化用のエントロピー → ファームウェアがBIP39またはSLIP39にエンコード。
Proのrandom.bytes()はデフォルトでsource=1となっており、デフォルトのUSE_THD89=1ビルドのもとでse_random_encrypted()を呼び出します。
乱数についての補足
- ProのデフォルトビルドではTHD89が有効になっており、乱数バイトは
se_random_encrypted()から得られます。これはYasmarangやlibnguのソフトウェアPRNG経路ではありません。 - OneKeyヘルプセンターによれば、現行のEAL6+セキュアエレメントに搭載されたTRNGは、電子ノイズなどの物理現象に乱数の根拠を置いています。
OneKey Classic 1S
OneKey Classic 1S
影響を受けるか?
いいえ、今回のColdCard libngu / Yasmarang問題の影響は受けません。Classic 1Sの現在公開されているデバイス内作成フローは、THD89セキュアエレメントのTRNGからエントロピーを取得し、BIP39フレーズの文字列はMCUファームウェアがエンコードします。
生成の流れ
THD89 TRNG → 128 / 192 / 256ビットのエントロピー → MCUがBIP39フレーズをエンコード。
乱数についての補足
- 「フレーズはTHD89が生成している」という言い方は正確ではありません。THD89が供給するのは乱数入力であり、BIP39の単語エンコードはMCUファームウェアの中で行われます。
- ファームウェアはTHD89の
se_random_encrypted()インターフェースを呼び出しており、Yasmarangやlibnguは使用していません。OneKeyヘルプセンターによれば、現行のEAL6+セキュアエレメントに搭載されたTRNGは、電子ノイズなどの物理現象から乱数を生成しています。
OneKey Classic 1S Pure
OneKey Classic 1S Pure
影響を受けるか?
いいえ、今回のColdCard libngu / Yasmarang問題の影響は受けません。公開コードには、Classic 1S Pure専用のエントロピー生成分岐は存在せず、Classic 1Sと同じfirmware-classic1sのコードベースを共有しています。したがって、Pureでウォレットを作成する際のエントロピーも同じくTHD89 TRNGから得られ、MCUによってBIP39フレーズにエンコードされます。
検証済みの流れ
THD89 TRNG → 128 / 192 / 256ビットのエントロピー → MCUがBIP39フレーズをエンコード。
Pureがバッテリーレス製品であることは、この公開された作成経路を変えるものではありません。
乱数についての補足
- Pureが独立したモデルとして販売されているからといって、異なるエントロピー生成の仕組みを持っていると思い込まないでください。
- Classic 1Sと同様に、公開されている作成コードはTHD89の乱数インターフェースを呼び出しており、Yasmarangや
libnguは使用していません。
OneKey Classic
OneKey Classic
影響を受けるか?
いいえ、今回のColdCard libngu / Yasmarang問題の影響は受けません。セキュアエレメントを有効にしたClassicのファームウェア経路では、SEがウォレット作成に使う乱数素材を供給し、MCUがそれをBIP39フレーズに変換します。
生成の流れ
SEが乱数素材を供給 → 先頭32バイトをエントロピーとして採用 → MCUがBIP39フレーズをエンコード。
乱数についての補足
- この経路は、SEの初期化インターフェースとエクスポートインターフェースを通じて乱数素材を取得しており、Yasmarangや
libnguの乱数実装を呼び出しません。したがって、今回議論されている影響を受けるコード経路に入り込むことはありません。 - 公開コードだけでは、Classicの各ロットが使用しているSEの型番と認証を個別に特定することはできません。対外的に説明する際は、他モデルの認証情報をClassicに当てはめるのではなく、該当ロットのチップ資料に基づいてください。
OneKey Mini
OneKey Mini
影響を受けるか?
いいえ、今回のColdCard libngu / Yasmarang問題の影響は受けません。Miniのデバイス内作成フローは、STM32 MCUのハードウェア乱数生成器からエントロピーを取得し、そのMCUがそれをBIP39フレーズにエンコードします。
生成の流れ
STM32 MCU TRNG → 128 / 192 / 256ビットのエントロピー → MCUがBIP39フレーズをエンコード。
Miniの旧ファームウェアでは、random32()がSTM32のRNGペリフェラルを直接読み取り、連続して同じ値が出力された場合はそれを拒否します。デバイス内での作成フローは、まさにこの乱数を使ってフレーズを生成します。
乱数についての補足
- MCUはSTM32のハードウェアRNGペリフェラルを直接読み取り、さらにファームウェアは連続する重複出力を拒否します。この経路はYasmarangや
libnguを使用していません。
ユーザー向けの安全アドバイス
- エントロピーがどこから来るものであっても、リカバリーフレーズが一度漏洩すれば、誰でもウォレットを復元できてしまいます。オフラインで正確にバックアップすることは、常にユーザー自身の責任です。
- リカバリーフレーズを紛失した場合、どのデバイスも、アプリも、メーカーも、あなたの代わりに復元することはできません。






