Elliptic-Curves

NIST prime P256 的模組化簡化——理解數據

  • August 23, 2015

我正在做一個需要實施橢圓曲線密碼學的項目,為了理解工作和過程,我一直在努力。

模有限域算術,我理解了最初的概念,現在我在看這個來自 NIST 的文件

https://www.nsa.gov/ia/_files/nist-routines.pdf

但是,我無法理解,如果我需要檢查我的模組化加法器或乘法器,我應該使用什麼數據。

  1. 本文件中 P-256 的 A、B 和 mod(P) 是什麼。
  2. 我想實施蒙哥馬利減少但我不明白。我有一個 512 位的值,即 A*B。我應該如何從這裡走得更遠。

IMP–使用 NIST 給出的快速縮減……我們怎麼做……只需添加和減去它們,然後在每次添加或減去之後找到 mod 或找到 mod?

減少—在減少的同時……假設我做了所有那些 256 位加法和減法,我應該使用 512 位加法器嗎?因為進位可能遠不止 1 位。

我剩下的時間來設計整個系統的時間非常少。請幫助我理解這是我可以盡快實施的。

我正在使用 VHDL 在 FPGA 上實現設計。

在文件中,P-256參數描述了您要在其上執行操作的曲線P-256。傳統上,曲線以Weierstrass 形式表示為一組點

$$ y^2\equiv x^3 + ax+b \pmod p $$ 持有。在哪裡 $ p $ 是定義操作領域的素數,並且 $ a $ 和 $ b $ 定義曲線的形狀。曲線上的一個點是一對 $ (x,y) $ 上面的等式成立。

現在為了讓橢圓曲線真正有用,我們要對它們執行操作。通常這兩個點的加法,如 $ R=S+T $ 和 $ R,S,T $ 作為曲線點,我們希望將點加倍,從而允許使用重複平方和乘法算法進行快速求冪(儘管在實踐中你會更聰明地避免定時攻擊)。倍增通常表示為 $ R=2S $ 和 $ R,S $ 是曲線上的點。

現在了解如何實際加倍並添加兩點的基礎知識。這確實在連結的文件中有所描述。出於效率的原因,通常定義點的第三個組件 $ z $ . 如果您的觀點僅作為 $ (x,y) $ , 定義 $ z=1 $ . 對於實際應用,我強烈建議簡單地遵循文件中給出的算法。

為了驗證,您可以使用以下方程式和文件中的測試向量。請注意,對於樣本的每個部分,都需要使用該部分的參數。

添加兩個點 $ R=(x_R,y_R,z_R) $ 和 $ S=(x_S,y_S,z_S) $ 您可以使用以下等式得到 $ T=(x_T,y_T,z_T) $ :

$$ u=y_R\cdot z_S - y_S\cdot z_R\bmod p $$ $$ v=x_R\cdot z_S - x_S\cdot z_R\bmod p $$ $$ w=u^2\cdot z_R \cdot z_S - v^3 - 2v^2 x_S\cdot z_R\bmod p $$ $$ x_T=vc \bmod p $$ $$ y_T=u(v^2x_S\cdot z_R-w)-v^3y_S\cdot z_R \bmod p $$ $$ z_T=z_S\cdot z_R v^3 \bmod p $$ 最後你計算模逆 $ z_T $ 併計算結果點的仿射座標為 $ x_T=x_T\cdot z_T^{-1} \bmod p $ 和 $ y_T=y_T\cdot z_T^{-1} \bmod p $ 再次給你“經典表示”。

這是兩個不同點的“唯一”加法定律。加倍同樣複雜,應嚴格遵循指定的算法來實現。

如果您真的想了解更多關於 EC 加密的資訊,您可以在橢圓和超橢圓克魯夫密碼學手冊中找到更多答案。上述算法取自現代密碼學導論(第二版)

引用自:https://crypto.stackexchange.com/questions/27659