Encryption

RSA 和橢圓曲線密鑰是如何確定性地生成的?

  • November 18, 2022

通過 TPM 教程:https ://google.github.io/tpm-js/#pg_keys

使用確定性密鑰派生函式 (KDF) 從主種子派生主鍵。

KDF 的輸出將是一些偽隨機字節。對於 RSA,字節可能不是質數。對於橢圓曲線,字節可能不是曲線上的座標。即使忽略來自 KDF 的輸出,我也不清楚如何使用“種子”來確定性地生成 RSA 和 EC 密鑰。

主函式獲取熵並以不同方式將其轉換為密鑰對。對於 RSA-2048,它需要創建兩個 1024 位的隨機質數。它將大致按如下方式執行此操作。首先,從 KDF 輸出中(確定性地)導出一個 1204 位的字元串,其中包含兩個最高位和最低位集。該數字將接受(可能隨機化的)機率素性測試。隨機化防止病態輸入被傳遞到測試功能,但所有主要測試功能應該表現相同:永遠不會返回假陰性,並且在統計上極不可能返回假陽性。如果該數字未測試為質數,則將其遞增 2 並測試新數字,依此類推。一旦我們有了第一個素數,我們(確定性地)從 KDF 輸出生成一個新字元串並重複以獲得第二個素數。該過程肯定會在第一個大於初始字元串的素數處停止,並且在此之前因誤報而停止的可能性微乎其微。儘管這在中間步驟中可能是不確定的,但它極有可能總是產生相同的兩個素數。有些過程可能只尋找特定形式的素數,但原則仍然成立。它極有可能總是產生相同的兩個素數。有些過程可能只尋找特定形式的素數,但原則仍然成立。它極有可能總是產生相同的兩個素數。有些過程可能只尋找特定形式的素數,但原則仍然成立。

在橢圓曲線的情況下,甚至沒有誤報的機會。存在一個由特定曲線和點組成的通用參數集 $ G $ 在那條曲線上。主要功能將種子轉換為整數 $ s $ 取模 $ \ell $ (在哪裡 $ \ell $ 是順序 $ G $ 在橢圓曲線組中)以均勻的方式。然後主要計算 $ sG $ 是曲線上的一個點,作為私鑰對應的公鑰 $ s $ . 減少模數 $ \ell $ 和標量乘法 $ G $ 都是確定性的。

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