Really "core", really random

小课堂 | 真「芯」,真隨機

淺談真隨機數及在imKey Pro的應用。

淺談真隨機數及在imKey Pro的應用

導語

對區塊鏈稍有接觸的人,大多聽說過「非對稱加密」、「雜湊算法」之類的加密學名詞,但並不是所有人都知道,這些加密算法背後的基石——「隨機數」。用戶在創建錢包的過程中,可「隨機」獲得一把私鑰,通過私鑰用密碼學計算出地址,有了地址就能收取數字貨幣,私鑰能且唯一支配這個地址上的數字資產。所以,誰擁有私鑰,誰就擁有對應地址在鏈上的資產。那麼,私鑰會不會有一天耗盡?是否可以通過撞庫的方式暴力破解?要消除這些困擾,你需要先對隨機數有所了解。

一、隨機數的重要性

在計算機科學中,隨機序列在很多領域中都有重要作用,譬如計算機仿真、統計抽樣、密碼學、網絡遊戲等,不同領域對於隨機序列質量的要求也不一樣。如在網絡遊戲中會存在大量隨機事件——暴擊率計算和抽獎等,這些場景一般都使用特定的偽隨機機制,降低連續暴擊或不暴擊的概率,或十連抽必中的策略,都是為了讓玩家有更好的遊戲體驗。但在本質是攻防對抗的信息安全領域,不滿足「隨機性」和「不可預測性」的隨機數顯然是不能使用的,這可能會導致安全體系產生不可彌補的漏洞。

不管是密碼協議設計還是更基礎的密碼算法,隨機數都是對抗攻擊的核心依賴。根據柯克霍夫原則,密碼系統的安全性應該完全依賴於密鑰而不是保密的系統設計,密鑰通常都源於隨機序列產生,因此隨機數的質量在密碼系統非常重要,在理想情況下,完全隨機的密鑰應該只能通過暴力攻擊來破解。

隨機數在密鑰生成、數字簽名、認證與鑑別等應用中以及各種與安全通訊有關的協議中都有大量應用,如:

  • 密鑰分發方案中,通常會使用隨機序列作為握手信息來防止重放攻擊。
  • 在SSL/TLS協議過程中,隨機序列不但用來防重放攻擊,也是生成會話密鑰的基本元素。
  • 非對稱密鑰算法的密鑰產生和簽名過程,公開的數學算法 + 隨機序列提供了工程實現安全。

二、隨機數生成器

通常來說,隨機數有以下 3 個檢驗標準:

1.隨機性

隨機序列應該有良好的統計特性,不存在統計學偏差,是完全雜亂的數列。序列中的隨機數分佈應該是一致的,出現頻率大約相等。滿足這類要求的數字在人類「一眼看上去」是隨機的。

2.不可預測性

給定隨機序列的一部分和隨機算法,不能有效的演算出隨機樣本的其他部分。

3.不可重複性

除非將隨機序列本身保存下來,否則不可能出現相同的序列。

一般我們說滿足 1 和 2 的隨機數生成器是偽隨機數生成器,3 個條件全部滿足的隨機數生成器是真隨機數生成器。

偽隨機數生成器(PRNG)

在計算機中如果給定確定的初始條件,使用確定的算法去產生隨機數,那麼產生的隨機數總會在周期內遵循某種規律,這意味著到達周期之後總會重複,即使其滿足隨機性統計所定義的特定分佈要求,因為其結果在特定周期是可見可預測的,那麼這種方法產生的隨機數並不「隨機」,我們把它稱為偽隨機數,對應的方法為偽隨機數生成器。在工程實現中通常需要將周期設置的足夠長(要遠遠大於可能採集的隨機數的長度),但其在理論上確實是有規律且可預測的。

真隨機數生成器(TRNG)

真隨機性的條件是苛刻的,在給定邊界條件下,可以認為在經典力學下產生的隨機數都是偽隨機數,因為物理噪音、溫度變化等都是可觀測的,但出於現實應用需要,如果邊界條件複雜且難以捕捉,可以認為是真隨機數。

那麼計算機如何生成真隨機數呢?

通常需要引入外部熵源使產生的隨機序列周期性大大減弱,UNIX 內核的隨機數發生器(/Dev/Random)和Windows內核的RtlGenRandom都是這樣的實現。UNIX維護了一個熵池,不斷收集非確定性的設備事件作為種子來生成隨機數;Windows則會收集進程、線程、時間、CPU內部高精度計數器等信息作為內部熵源。

可以這樣來描述真隨機數:TRNG 是基於一種不可預測的物理現象(稱為熵源)的功能或設備,用於生成非確定性數據(例如,一串連續的數字),目標為密碼算法提供種子(Seed)。

生成大量的真隨機數和偽隨機數並將其可視化後,如下圖,可以直觀的看到真隨機數沒有任何規律,而偽隨機數是按照一定規律排列。

三、安全芯片的真隨機數發生器

通常安全芯片的真隨機數生成器是由熵源和熵提取或採樣單元組成,採樣後的數據還需經過後處理單元或密碼調節單元進行質量控制。產生的隨機數質量高度依賴於熵源輸出的原始熵,一般會內置基於物理噪聲的單路或者多路隨機源電路,每路隨機源電路獨立採樣,將模擬信號提取為可用的數字形式後,交由後處理單元對其進行處理,譬如消除原始輸出的偏差或者對信號進行增強處理等,通過這種方式獲取的隨機數主要應用於密碼技術,具備高質量的TRNG也是安全芯片一個必不可少的功能點。

為了確保隨機數生成器的可靠性,安全芯片每次上電後會對隨機數生成器進行自檢,通常也支持隨時發起檢測。

(注:基於噪聲的TRNG典型架構)

四、TRNG檢測

國內外都有一些認證方和認證規範來驗證TRNG的產生是否符合真隨機數的3個標準:隨機性、不可預測性和不可重現性。

如 NIST 的 SP 800-90 A/B/C 標準,它提供了對應的檢測套件,(FIPS) 140-2 的 4.9.2 章節規定了「連續隨機數生成器測試」等內容,測試標準即 SP 800-90B 標準,如下圖所示。

五、imKeyPro 如何使用真隨機數功能

imKey Pro 產品核心是Infineon的 SLE78CLUFX5000PH,該芯片為數字安全方案「完整性保護」提供全面錯誤檢測、自檢雙 CPU 和全加密數據,包括 CPU 內加密計算。

(注:RZH1532 代表 SLE78CLUFX5000PH 芯片的生產批次號)

該晶片符合通用標準 EAL6+(高級)和 EMVCo 認證。

對應證書可在 CC 官網查閱

https://www.commoncriteriaportal.org/files/epfiles/0879V4c_pdf.pdf

Public Security Target 文檔中指明了該晶片的隨機數模組通過了 SP 800-90B 標準,具體可詳見

https://www.commoncriteriaportal.org/files/epfiles/0879V4b_pdf.pdf

擁有高質量的真隨機數發生器,還需要在工程實踐中正確使用它,imKey Pro 在整個產品的生命週期中都使用了 TRNG,包括但不限於以下方面:

  • 設備唯一證書密鑰對的產生
  • 連接授權碼的產生
  • 創建錢包時產生的熵
  • 密文存儲密鑰的產生
  • 簽名過程中使用到的隨機數,如 256K1 簽名時的 K 值(也可選用 RFC 6979)
  • 設備管理的 SCP11C 安全通道的建立

文章來源:飛天誠信產品研發部