在子組中工作時,如何使用與主組不同的操作?顯然,Ed25519 是這樣做的
Ed25519 使用複合階橢圓曲線,但在主組的素階子組中工作。根據群論,子群使用群操作。
但是,根據this,Ed25519 實現不這樣做。
但是每個現有的實現都實現了標量算術 $ \bmod q $ ,素數階群的階,不 $ \bmod 8q $ ,全組的順序。
這裡,主組的順序是 $ 8q $ 和 $ q $ 作為素數。
這有點令人困惑。
- 為什麼 Ed25519 實現會這樣做?
- 如果這些操作是在不同的子組操作下完成的,那麼我們不僅僅是在一個完全不同的橢圓曲線中工作 - 即在素數域上定義的橢圓曲線 ( $ \bmod q $ ) - 擁有父組有什麼意義?
- 這樣做的優點和缺點是什麼?
該聲明
每個現有的實現都實現了標量算術 $ \bmod q $ ,素數階群的階,不 $ \bmod 8q $ ,全組的順序。
並不意味著在子組中工作,而是使用與主組不同的操作。群運算是兩個橢圓曲線點之間的點相加,在子群和群中是一樣的。標量乘法涉及整數 $ k $ 和一點 $ P $ , 並產生一個點 $ [k]P $ 定義為 $ \underbrace{P+P+\ldots+P+P}_{k\text{ times}} $ .
我的理解是引用聲明實現使用它 $ [k]P=[k\bmod q]P $ , 當 $ P $ 屬於順序的一個子組 $ q $ .
每個現有的實現都實現了標量算術 $ \operatorname{mod} q $
只要所有標量和所有 EC 點都是可信或經過驗證的,這在所有場景中都能完美執行。
以防萬一不是很清楚(我自己第一次讀錯了):
他們只是說,當有另一個標量的標量運算(例如加法、減法、乘法)時,結果會減少 $ \operatorname{mod}q $ .
標量通過檢查它們是否小於來驗證 $ q $ , 並且 EC 點通過將它們乘以被驗證為在素子組中 $ q $ 檢查結果是無窮遠點。
當您使用受信任或經過驗證的標量/點時,您不必擔心連結到的文章中討論的任何問題。
庫不驗證的原因是,根據場景,執行驗證沒有任何優勢,並且由於驗證 EC 點涉及額外的標量乘法,因此驗證具有計算成本。