iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0

本日重點:RBG、PRF

先前提到 SLH-DSA key pair 是 slh_keygen_internal 所產生,它的 input 是 SK.seed、SK.prf、PK.seed,這三個都是亂數,FIPS 205 第 37 頁 [1] 要求這三個亂數必須由 approved random bit generator (RBG) 所產生,也就是說我用軟體隨便產生的亂數是不合格的,必須使用 approved RBG 產生,這個亂數產生器的規格可以參考 800-90A/90B/90C [7, 8, 9]。

PRF 的定義在 FIPS 205 第 46 頁 [1],其中的 PK.seed、SK.seed 就是透過 approved RBG 所產生的亂數。

PRF(PK.seed, SK.seed, ADRS) =
Trunc𝑛(SHA-256(PK.seed ∥ toByte(0, 64 − 𝑛) ∥ ADRS𝑐 ∥ SK.seed))

簡單來說,800-90A/90B/90C 各自規範的是亂數產生的演算法(800-90A)、熵的來源(800-90B)、演算法和熵怎麼組成一個RBG(800-90C)。

800-90A 是對 Deterministic Random Bit Generators 的完整演算法規範,800-90c 是 RBG 的construction 建議,這兩者透過軟體是能實現的,不過速度當然比硬體慢。但是 800-90B 就只能透過硬體來實現。

本系列不會實作 800-90A 的演算法,因為已經有現成的硬體能實現,例如 CryptoCell-310、CryptoCell-312,所以我們會使用 CC310、CC312。800-90C 是在 FIPS 140-3 才被納入,而 CC310、CC312 雖然只符合 FIPS 140-2,但本系列的實作會用 cc3xx 的 nrf_cc3xx_platform_ctr_drbg_get [6] 來取得 DRBG。

至此,我們知道了 SK.seed、SK.prf、PK.seed 是亂數,我們知道了亂數產生器要符合 800-90A/90B/90C,我們也知道 90A/90B 能透過 CC310、CC312 實現,我們也知道了 cc3xx 能取得 DRBG。本系列會使用 cc3xx 來取得亂數產生器,並用來產生亂數,做為 key pair 的種子。

References

  1. FIPS 205 Stateless Hash-Based Digital Signature Standard
  2. SPHINCS+ – Submission to the 3rd round of the NIST post-quantum project. v3.1
  3. The SPHINCS+ reference code, accompanying the submission to NIST's Post-Quantum Cryptography project
  4. CRYPTOCELL — Arm TrustZone CryptoCell 310
  5. CRYPTOCELL — Arm TrustZone CryptoCell 312
  6. nrfxlib API: nrf_cc3xx_platform_ctr_drbg_get
  7. NIST SP 800-90A Rev. 1
    Recommendation for Random Number Generation Using Deterministic Random Bit Generators
  8. NIST SP 800-90B Recommendation for the Entropy Sources Used for Random Bit Generation
  9. NIST SP 800-90C (4th Public Draft) Recommendation for Random Bit Generator (RBG) Constructions

上一篇
Day 3 跨平台產生 SLH-DSA 金鑰 (二)
下一篇
SLH-DSA 簽章演算法 (一)
系列文
裸機實作 SLH-DSA 簽章:FIPS 205 之演算法實作、測試、防禦與跨平台5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言