Elliptic-Curves
對 X25519 和 ECDSA 使用相同的私鑰(使用 curve25519)
我正在編寫一個需要加密/解密和簽名/驗證的應用程序,我選擇 X25519 作為密鑰協商算法,它將生成用於加密的密鑰,並選擇 ECDSA 來簽署消息。
密鑰生成:我從助記符生成一個 curve25519 私鑰(所以我有一種隨機的 32 字節私鑰)。
現在我有 32 字節數組,我想使用這個數組字節數組進行加密和簽名,我遇到的問題是,對於 X25519,我需要應用密鑰箝制以使這個私鑰有效,如下所示:
privateKey[0] &= 248; // unset the 3 least significant bits privateKey[31] &= 127 // unset the most significant bit privateKey[31] |= 64 // set the second most significant bit
但是對於 ECDSA,密鑰需要在範圍內 $ [1, N] $ ,其中 N(對於曲線 25519)等於 $ 2^{252} $ + 一個小因素,所以我需要將我的 32 字節數組轉換為適合此範圍的數字。
我有幾個問題:
- 為什麼 X25519 私鑰不需要適合範圍 $ [1, N] $ ?
- 另外,為什麼將 X25519 中使用的鍵箝位功能應用於 ECDSA 使用的鍵並不重要?
為什麼 X25519 私鑰不需要適合範圍 $ [1,N] $ ?
通過取消設置最高有效位和三個最低有效位,您可以將密鑰有效地限制為 252 位。當你說 $ N $ 是 $ 2^{252} $ + 一個小因素,您說的是 x25519 使用的子組的順序*,*而不是曲線組的完整順序。該子組的索引(或輔因子)為 8。取消設置低三個位會強制密鑰為 8 的倍數,這意味著它將位於這個大的素數子組中。
另外,為什麼將 X25519 中使用的鍵箝位功能應用於 ECDSA 使用的鍵並不重要?
據我所知,Curve25519 不用於 ECDSA。您是說 EdDSA(特別是 ed25519)嗎?