【導讀】質量不良的隨機隨機數(shù)不會成為加密系統(tǒng)的弱點,只要采用標準化的解決方案,將可幫助設計工程師們一夜好眠。那么如何為安全設計選擇可靠的隨機數(shù)加密方案?
隨機數(shù)(random number)是密碼學的鑰匙(也是關鍵),它們會是加密系統(tǒng)的弱點,因此也常變成受攻擊的目標;因此我總是嘗試讓我的腦袋繞著有關隨機性的主題轉。
我一直認為二極管接面(diode junction)的熱噪聲(thermal noise)是隨機性的,但是現(xiàn)在,它似乎并不是那么隨機。密碼學家們總是在思考壞人可能會發(fā)動的攻擊手法,然后要想出對抗的招數(shù);他們做的是好事,因為大多數(shù)人(包括我自己)在進行在線金融活動或購物時,都得仰賴安全性通訊。
有許多密碼學菁英任職于美國國家標準技術研究所 (National Institute of Standards and Technology,NIST);該組織公布了一套規(guī)格,有關于如何建立隨機比特流,以應用于加密──其SP800-90A規(guī)格所提供的解決方案,是以一種決定性隨機位產(chǎn)生器(Deterministic Random Bit Generator ,DRBG)將比特流加密。
這種隨機數(shù)生成器(Random Number Generator,RNG)對我來說是有意義的,接下來我將先簡短介紹DRBG的原理,然后談談如何將這種RNG嵌入FPGA中;現(xiàn)在我需要先厘清一些會用到的專門術語,然后解釋其運作過程。
任何一套加密系統(tǒng)會需要一組密鑰以及一組輸入的數(shù)據(jù)流,從這里事情開始變得比較復雜。用以編排密碼的、“或多或少隨機”的比特流,被稱做是Entropy (熵)輸入;為了確保每次RNG的產(chǎn)出是不同的,Entropy要結合叫做Nonce (隨機數(shù))的輸入;Nonce在通過DRBG的每一個周期,必須要改變或是增加。這是有道理的,因為你需要防堵一個可能會多次收集數(shù)據(jù)、嘗試預測下一個輸出比特流內(nèi)容的攻擊者。
但是為了防止Entropy本身被泄漏,還有一個選項是采用第三個變量──個人化字符串 (Personalization String);這里的巧妙之處在于,如果這個輸入是源自于一組編號,就可以確保顯然正在監(jiān)視相同機器的攻擊者難以有進展。SP800-90A規(guī)格還包含 另一個選擇性的額外輸入(Additional Input),其概念是它可以源自于第二個(獨立的) Entropy來源、也就是“腰帶又加上吊帶”的雙重保障。
到這里我的頭開始痛了…然后我讀到有關于Health Check的部分;Health Check一開始是做為例行檢查、確認一切安好,或者是在使用者懷疑攻擊者可能竄改RNG時進行。這個區(qū)塊惠隔離所有DRBG的外部輸入,然后饋入一組預設的刺激;輸出的結果是針對一組已知答案的驗證,如果因為任何原因失敗,Health Check就會釋出錯誤消息、鎖住RNG ,避免輸出任何被破 解的比特流。
要將RNG嵌入幾乎任何一種FPGA都很容易,設計工程師只需要采用RNG IP核心以及簡單的環(huán)形振蕩器與計數(shù)器做為Entropy的來源;這種常見規(guī)則適用于打造加密系統(tǒng),因為設計工程師必須確保FPGA內(nèi)部的敏感數(shù)據(jù),不能從組件的任何一個接腳被存取。
模擬、驗證被隨機設計的電路可能聽起來很難,但因為是完全確定性的,RNG核心有一套完整的驗證測試基準;如果最后的加密系統(tǒng)需要聽過外部測試機構的批準, 該測試基準也同樣重要。我只能想象要測試比特流隨機特性會遇到的問題。FPGA的實作過程應該是全數(shù)字化的,所以應該很強韌、不會受到嘗試以改變電壓或溫度的攻擊者之竄改;自振蕩頻率有可能會變化,但那不應該影響輸出比特流的隨機性質量。
采用IP核心做為嵌入式AES加密引擎的一個好處是,該種電路區(qū)塊能在許多應用中同時支持其他工作,為數(shù)據(jù)流提供多重加密解密,節(jié)省FPGA內(nèi)部空間。當它需要透過不安全的連結傳送加密密鑰,另一個選項是在密鑰包裝中采用AES加密引擎。
質量不良的隨機隨機數(shù)不會成為加密系統(tǒng)的弱點,只要采用標準化的解決方案,將可幫助設計工程師們一夜好眠。