Ed25519 簽名驗證是否應該檢查其輸入的順序和規範性?
研究 Ed25519 的不同實現,我發現其中一些檢查輸入公鑰和簽名的順序和規範性,而另一些則不檢查。為什麼會有這種差異?這些測試是否相關,因為點特別選擇的點是非規範的或具有小順序的點會降低算法對偽造或篡改的強度?
公鑰:一般不會。 如果一個合法的簽名者試圖對你進行快速簽名,他們已經有權簽署你將接受的消息。那麼,當他們可以為您提供虛假簽名消息時,他們為什麼還要費心為您提供標準基點未生成的點呢?
簽名:一般情況下,沒有。 簽名的驗證方程 $ (R, s) $ 在公鑰下 $ A $ 在一條消息上 $ m $ , 在哪裡 $ A $ 是一個曲線點, $ R $ 是一個曲線點, $ s $ 是一個標量,並且 $ m $ 是一個位串,是
$$ [8 s] B = [8] R + [8 H(R, A, m)] A. $$ 如果 $ A $ 是一個 8 扭力點,那麼合法的簽名者已經在你身上拉一個快速的—— $ (\mathcal O, \ell) $ 是任何消息上的有效簽名 $ m $ . 如果兩點 $ R $ 和 $ R’ $ 相差 8 個扭力點,即如果 $ [8](R - R’) = \mathcal O $ ,那麼他們都會做出有效的簽名——這意味著如果一個偽造者可以偽造一個,他們就可以偽造另一個。但是一個不知道一個簽名的偽造者仍然無法在第一時間找到一個。 我添加了“一般”限定符,因為您可能依賴於簽名方案通常不會提供的某些屬性,例如簽名的唯一性——如前所述,很容易給出簽名 $ (R, s) $ 在下面 $ A $ 在一條消息上 $ m $ 尋找另一個簽名 $ (R’, s’) \ne (R, s) $ 在下面 $ A $ 上 $ m $ : 挑選 $ s’ = s $ 和 $ R’ = R + Q $ , 在哪裡 $ Q $ 是除恆等式以外的任何 8 扭力點 $ \mathcal O $ . 簽名唯一性的假設去年給門羅幣帶來了一些麻煩,但大多數應用程序並不依賴於此。