2014-01-13 57 views
4

我的任務是爲嵌入式系統製作隨機數生成器。截至目前,熵源使用的是鍵盤輸入,以及其他變量,如信號強度和電池強度。以正確的方式向隨機數生成器添加熵源

我一直在使用PolarSSL,它有一個驚人的嵌入式系統的便攜式SSL庫。但是,除了文檔,互聯網上關於它的信息很少!

我想我不是以正確的方式將熵源添加到我的熵累加器中。這對CTR-DRBG module造成了問題,它在Init上返回一個錯誤。 (Source Error -52) 由於RNG適用於嵌入式系統,因此係統中沒有初始熵,因此出現了錯誤。(LINK)當我在其他標準操作系統(如Windows)上嘗試使用相同的RNG時,不會出現任何錯誤。代碼有關它

// Global Variables. 
ctr_drbg_context ctx; 
entropy_context etx; 

// Inside Main 
entropy_init(&etx); 
// Add entropy sources 

// Initializing CTR_DRBG 
printf("Before ctrdrbg: %d", err); 
err = ctr_drbg_init(&ctx, entropy_func, &etx, (const unsigned char *) "RANDOM_GEN", 10); 
if(err != 0) 
{ 
    printf("Failed in ctr_drbg init!: %d", err); 
} 

輸出:? Error on Ctr_drbg init: -52

我也凝視着這一個星期左右,現在沒有進展幾乎放棄!沒有人在那裏願意幫助

+1

我敢肯定這是一個愚蠢的問題,但你有沒有檢查過CPU沒有硬件RNG內置它?許多ARM9都可以,有些可能不會。你能告訴我們關於處理器的更多信息嗎?我看不到一個明顯的數據表。 – Tom

+0

@Tom不,它根本不傻!我希望它內置了一個硬件RNG。但是,我從供應商處獲得的所有文檔都與Randomness無關。我可以直接與他們聯繫,但這不太可能! – Timmay

回答

3

首先fa實際答案:

它在Windows上工作的主要原因是它可以使用多個操作系統特定的熵源來生成'足夠'的隨機數。

CTR-DRBG要求的熵值爲48字節(基於默認配置)。

爲了使熵池能夠提供這些48字節,它將對每個熵源執行最多256輪詢(ENTROPY_MAX_LOOP)並將其全部放入累加器中。它預計所有來源至少交付其閾值!如果沒有,因爲它不會在連續調用中返回更多數據,它將以現在的方式失敗(POLARSSL_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED)。

所以,你需要提供「更好」熵源或定義的閾值的具體來源(一些消息來源這可能是如果源不能期望總是傳遞熵數據)更適當的值。

然後安全答案:

你需要真實熵熵池是有用的。電池測量儀並不是一個真正安全的測量儀器(因爲它是相當可預測的(如果通電時總是100)並且經常處於可預測的範圍內。如果操作正確,使用鍵盤輸入可能是有價值的,但是您需要更多..最好的方法'kickstart'系統在其芯片組中不提供硬件RNG的系統是使用在更安全的系統上生成的種子文件,並在啓動和關閉時讀取並更新它,您可以將此種子文件用作熵源IR直接在ctr_drbg給它在你的情況我希望你只有非常低的門檻源(有時),從種子文件讓主熵

編輯:。我會加強我們的Knowledge Base article on adding entropy sources能夠更好地覆蓋這種情況!

+0

非常感謝您深思熟慮的答案。看來我必須將閾值設置爲零來添加其他熵源。 確實,電池強度並不是熵的好來源,但這是一個POS終端,並沒有那麼多的來源。我迄今爲止唯一接近良好熵的是鍵盤輸入。 我想我將不得不使用種子文件。非常感謝您的建議! – Timmay

+2

你會認爲一個POS終端,基本上用於做安全交易,將配備密碼強的隨機性...... – Tom

+0

@Tom我希望如此,但我的經驗是,情況往往不是這樣: ( – Paul