Elliptic-Curves
純 EdDSA (ed25519) 和 HashEdDSA (ed25519ph) 之間的區別
我的問題是指RFC 8032中指定的 EdDSA 。
我從 RFC 中得知ed25519和ed25519ph是 EdDSA 的兩個不同實例,主要區別在於,在ed25519ph的情況下,消息的雜湊是經過簽名的。
簽名過程的第 2 步是:
$ SHA-512(dom2(F, C) || prefix || PH(M)) $
在ed25519的情況下 $ PH $ function 是標識函式,在ed25519ph的情況下,它是例如SHA512的實現。但是,我對此感到好奇的是,這並不是兩者之間的唯一區別。
根據 RFC $ dom2(F,C) $ 其實也不同:
dom2(x, y):簽名或驗證 Ed25519 時的空白八位字節字元串。否則,八位組字元串:“SigEd25519 no Ed25519 衝突”|| 八位字節(x) || 八位字節(OLEN(y)) || y,其中 x 在 0-255 範圍內,y 是最多 255 個八位字節的八位字節串。“SigEd25519 沒有 Ed25519 衝突”是 ASCII(32 個八位字節)。
這是什麼原因?如果不是這種情況,可以通過簡單地對消息進行散列並將其作為輸入傳遞給 ed25519 的實現來構造****ed25519ph。它指定此構造的方式與ed25519ph的實現不兼容(因為dom2前綴)。
這只是一種預防措施。如果沒有這種分離,知道的攻擊者
ed25519ph(m)
也會學習ed25519(h(m))
.我不知道有任何現實世界的協議同時使用兩者以及這會成為問題的地方,但認為可能是這種情況並不牽強。
域分離是一種良好的衛生習慣,並且在新設計中變得非常普遍。
使用時選擇
dom2()
空白字元串ed25519
只是為了與現有實現保持兼容。