Tls

如何在嵌入式系統上處理 TLS 的熵和 CTR DRBG?

  • September 13, 2016

我正在嘗試在 STM32-Nucleo 微控制器(STM32F746)上使用 mbedTLS。

TLS 庫需要一個 RNG 函式(自然),STM32 有一個根據 NIST SP 800-22 驗證的硬體 RNG。

硬體 RNG 每次呼叫僅輸出無符號 32 位整數,但多次呼叫可以提供 TLS 所需的 28、32 和 255 字節隨機數組。

現在,我可以/應該使用這個 RNG 函式直接為 TLS 生成隨機數,還是應該使用這個 Hardware-RNG 作為 mbedTLS CTR-DRBG 函式的熵?

除非您有關於 RNG 介面的文件說明它正在使用由熵源播種的加密 PRNG,否則請僅將其用作 PRNG 的種子。(最初播種,並根據 PRNG 算法和可能的認證要求不時重新播種。由於您使用的是現有的 PRNG 庫,只需將種子函式傳遞給它,讓它在播種時進行管理。)

硬體 RNG 總是有偏差。這些偏差可能可以忽略不計,具體取決於條件,例如它可能在某些溫度下表現不佳或電源不是最佳的。加密 PRNG 從 RNG 中移除可觀察到的相關性。即使種子不是完全一致的,PRNG 也會隱藏偏差:要麼攻擊者設法猜測整個種子(即整個 HRNG 輸出),在這種情況下無論如何都會失去,要麼攻擊者只管理部分觀察(例如在 1 位之後,下一位也是 1 的可能性為 50.1%),並且 PRNG 使該觀察本身無用。

理想的系統使用無條件的 HRNG,即沒有消除偏差的機制,並根據已知的故障模式對其輸出執行一些基本測試(例如,如果未正確初始化,特定感測器可能會返回全位 0)。然後將輸出用於播種 PRNG。當該過程隱藏在標有“RNG”的黑匣子中時,很難驗證熵源是否正確執行。

引用自:https://crypto.stackexchange.com/questions/39948