OneKey 各型號錢包點樣生成助記詞,隨機性又係邊度嚟

重點總結
- 錢包安全嘅起點係熵(entropy):一份不可預測嘅隨機比特;助記詞只不過係呢份熵嘅可讀編碼。
- OneKey 各型號用嘅硬件隨機數來源唔盡相同,但相關韌體路徑全部都會實際調用硬件或安全芯片嘅 TRNG。
- 近期被討論嘅問題,源自
libngu入面一處錯誤嘅 Yasmarang PRNG 配置;OneKey 唔用libngu、Coinkite、Coldcard 或 CKCC 依賴,所以唔受影響。 - OneKey Pro、Classic 1S、Classic 1S Pure 由 THD89 SE TRNG 供隨機數,Classic 由 SE 供,Mini 則由 STM32 MCU TRNG 供,BIP39/SLIP39 編碼一律喺 MCU 韌體完成。
- 無論熵來自邊度,助記詞一旦洩漏或遺失都無法補救;離線、準確咁備份助記詞,始終係用戶自己嘅責任。
本文講解 OneKey 各型號喺建立新錢包時,點樣生成熵同助記詞,以及點解近期關於某啲軟件隨機數實作嘅疑慮,並唔適用於 OneKey 嘅相關建立路徑。
錢包安全,由一份不可預測嘅隨機性開始
錢包嘅安全起點係熵(entropy):用嚟建立錢包、不可預測嘅隨機比特。助記詞只不過係呢份熵嘅一種可讀編碼。如果建立時嘅熵本身可預測,咁之後為佢設計嘅安全機制——PIN、助記詞嘅保管方式、地址派生——都無法補救。
OneKey 唔同型號用嘅硬件隨機數來源並唔相同。以下按產品逐一講解建立新錢包時,助記詞所用嘅熵係嚟自邊度。
近期被討論嘅問題,指向嘅係 libngu 入面一處錯誤嘅 Yasmarang PRNG 配置,令某啲組合實作繞過咗芯片嘅 TRNG。OneKey 嘅相關韌體路徑唔用 libngu、Coinkite、Coldcard 或 CKCC 依賴,而且經過多輪審計確認佢的確有調用硬件或安全芯片嘅 TRNG。下文按裝置講解實際調用嘅硬件隨機數介面。
咩係熵,點解錢包離唔開佢?
熵可以理解為「不可預測性嘅數量」,通常以 bit 計量。128 bit 熵即係有 2^128 種可能嘅初始值;如果冇其他漏洞,攻擊者就只能夠靠估。錢包嘅私鑰、地址同簽署能力,全部都會由呢一個初始秘密確定性咁派生出嚟。
因此,助記詞嘅安全並唔係嚟自「啲英文單字睇落好多」,而係嚟自佢背後原始熵嘅不可預測性:
- 128 bit 熵對應 12 個 BIP39 單字;
- 192 bit 熵對應 18 個 BIP39 單字;
- 256 bit 熵對應 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 bit 熵同 4 bit 校驗位,合共 132 bit,啱啱好分成 12 組、每組 11 bit。每一組就係 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 bit 熵 → 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 bit 熵 → MCU 按 BIP39 編碼助記詞。
Pure 屬無電池嘅產品差異,並唔會改變呢條公開嘅建立路徑。
隨機性說明
- 唔應該因為 Pure 係獨立發售嘅型號,就假設佢有唔同嘅熵生成機制。
- 同 Classic 1S 一樣,公開嘅建立程式碼調用 THD89 隨機數介面,唔用 Yasmarang 或
libngu。
OneKey Classic
OneKey Classic
會唔會受影響?
唔受今次 ColdCard libngu / Yasmarang 問題影響。喺啟用安全芯片嘅 Classic 韌體路徑中,由 SE 提供用嚟建立錢包嘅隨機材料,MCU 再將佢轉換成 BIP39 助記詞。
生成流程
SE 提供隨機材料 → 取前 32 byte 作為熵 → 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 bit 熵 → MCU 按 BIP39 編碼助記詞。
喺 Mini 嘅舊韌體中,random32() 直接讀取 STM32 RNG 外設,並拒絕連續重複嘅輸出。裝置內直接建立流程正正就係用呢份隨機數嚟生成助記詞。
隨機性說明
- MCU 直接讀取 STM32 硬件 RNG 外設,韌體仲會拒絕連續重複嘅輸出。呢條路徑唔用 Yasmarang 或
libngu。
畀用戶嘅安全建議
- 無論熵嚟自邊度,助記詞一旦洩漏,任何人都可以恢復錢包;離線、準確咁備份助記詞,始終係用戶自己嘅責任。
- 助記詞一旦遺失,亦無法由裝置、App 或廠商恢復。






