Elliptic-Curves
我需要實現多精度算術運算嗎?
我想為特殊的 NIST 素數實現橢圓曲線算術(用於教育目的和更好地理解):點加法、求冪等。EC 加密/解密、數字簽名和密鑰交換所需的所有操作。我只對特殊的 NIST 素數感興趣,而不對一般曲線的實現感興趣。我是否需要為某些固定字長(32、64)實現多精度算術,例如加/減、歸約、反轉、蒙哥馬利歸約等?據我了解,選擇這些素數是為了與一般實現相比,實現速度更快。
無論曲線如何,都需要在 ECC 密碼學中使用多精度整數算術,至少對於一些模運算以橢圓曲線組階為模的模運算,因為它很大(192 位是現代最低限度)。對於計算最密集的操作所在的欄位,除了素數順序組之外,還有其他欄位的替代方案。例如,參見 Thomas Pornin 的Efficient Elliptic Curve Operations On Microcontrollers With Finite Field Extensions(注意:在這項工作中,擴展適用於場,而不是微控制器)。
對於素數域的曲線(如問題),域運算的多精度整數運算是必不可少的,模運算的性能是整體性能的核心。在處理機密資訊時(簽名和解密時,以及在某種程度上加密時;這通常不是簽名驗證的問題),必須特別注意旁道,包括時間。
對於使用特殊 NIST 素數的素數欄位(如問題所示),可以進行速度優化。這就是使用這種素數的原因。所有正確的通用多精度整數算術技術和庫(包括GMP)都可以使用這些素數,但通常不利用特殊形式來加速。因此,此類技術和庫足以獲得正確的結果,但不能獲得最佳性能。更常見的是,它們也沒有提供足夠的保護以防止側通道洩漏。只寫了GMP的一些函式就考慮到了這一點。