Ed25519
為什麼 ed25519 似乎接受並使用 96 字節/384 位簽名?
為什麼 ed25519 簽名驗證函式接受 96 字節的簽名?以這段程式碼為例:
crypto_sign_ed25519_open()
要求籤名至少為64 字節(512 位),但將接受更長的,get_hram()
如果存在,則在其散列步驟中的簽名末尾包含額外字節。然而會crypto_sign_ed25519()
生成一個 64 字節的簽名。這是某種遺產嗎?它有任何加密含義嗎?
這可能是您正在使用的特定程式碼段中使用的 API 的產物。這段程式碼遵循NaCl API,它將輸入驗證為簽名和消息 (
sm
) 的連接,並將消息複製sm
到消息緩衝區m
中。NaCl 論文在p 上明確指出。5 及以下 這是一個有意的設計選擇。之所以“在簽名的末尾包含額外的字節”是因為這些看似額外的字節實際上是已簽名的消息。因此它們實際上不是 96 字節的簽名,而是 64+ $ L $ -字節簽名,其中 $ L $ 是簽名消息的長度(以字節為單位),64 是實際簽名的長度。
請注意,理論上可以通過跳過點壓縮來獲得 96 字節的簽名,如原始Ed25519 論文中所述,p。15,但在您作為範例連結的程式碼中並非如此。