X25519
x25519 的關鍵規格 - 請需要兩個澄清
我正在按照 RFC 7748(及其勘誤表!)中的規範實施 x25519(64 位和 512 位程序集)。
請需要兩個澄清。
- 私鑰是隨機生成的 32 字節字元串,其中 MSB 設置為 0,MSB-1 設置為 1,最後 3 位設置為零。現在,一旦生成了隨機 256 密鑰,它就符合這些指定的要求,並且已經計算了相應的公鑰。正在尋求的澄清是:在設置 MSB/MSB-1 後,私鑰是否仍保留此 32 字節字元串?這是否意味著隨機私鑰的實際數量限制為 2^251 (256 - MSB -
$$ MSB-1 $$- 3 LSB - 所有這些位都是固定的)?如果外部使用者要指定不符合此要求的密鑰,並且軟體將其修改為投訴,則外部使用者指定的私鑰是否需要使用此文章兼容字元串進行更新? 2. 大多數實現者(例如 Michael Dull(對於無法在姓氏中輸入變音符號表示歉意)等人在論文“高速曲線 25519…”中)都提到了最後一個反轉步驟(Z^(p-2) ) 需要 254 個平方步驟和 11 個乘法。我了解 254 平方步驟,但不確定使用什麼算法將乘法計數限制在這麼小的數字。如果這不是國家機密,我可以直接使用(僅)11 次乘法生成求逆 mod p-2 的實際算法嗎?
感謝您的關注和時間。
關於您的第一個問題,是的,私鑰集僅限於那些 $ 2^{251} $ 值總是的倍數 $ 8 $ 這就是設計的安全性:
- 通過確保標量乘法算法的輸入標量是 $ 255 $ -bit 值將 RFC 中指定的算法將始終執行 254 個循環,並且每個循環都將執行完全相同的操作(一個加法,一個加倍):這是對簡單邊通道分析的簡單保護
- 為了防止無效點攻擊(Bob 在另一條曲線上給 Alice 一個低階點),只有 $ x $ 使用-座標,因此該點屬於曲線或其二次扭曲。這些曲線上唯一的低階點是有序的 $ 2 $ , $ 4 $ 或者 $ 8 $ ,所以如果 Bob 送出其中一個,Alice 總是會得到 $ 0 $ (表示 X25519 函式中的無窮大點)作為密鑰交換的輸出並檢測它是否無效。防止無效點攻擊和小子群攻擊。
您可能想閱讀有關它的原始論文:Curve25519:new Diffie-Hellman speed records和Can we Avoid testing for zero in fast elliptic-curve algorithm?
關於你的第二個問題,這只是快速取冪。看二進制分解 $ p-2 = 2^{255} - 19 - 2 $ . 或者查看一些已經編寫好的程式碼(Curve25519 的大部分實現都來自同一個參考)。