Montgomery Powering Ladder 和 Side Channel Attacks:實際上(不可能)分析中間值的儲存位置嗎?
Montgomery Powering Ladder 使用平方和乘法運算(在橢圓曲線的情況下稱為加倍和加法)執行冪運算。據我所知,所涉及的操作的順序和類型與指數無關,如果指數是密鑰,則可以防止側通道攻擊。
但當然,計算確實取決於指數:指數的每一位決定中間結果的儲存位置。更具體地說,指數被逐位處理,並且在每一步中,兩個中間值,比如 R 和 S,被更新。如果指數位為零,則其中一個值(例如 R)被 R 和 S 的乘積覆蓋,並且 S 被平方。如果 * 表示底層的組操作,那麼這可以寫成
R <- R*S S <- S*S
如果指數位為 1,則相反:
S <- R*S R <- R*R
因此,如果可以確定哪個值是平方的,那麼這將揭示相應的指數位。我想這在實踐中是不可能的,否則會有漏洞利用。
有人可以向我解釋為什麼這在實踐中很困難嗎?我是嵌入式設備、微控制器等方面的絕對初學者。我對在嵌入式設備(不是特定設備)上完成蒙哥馬利供電的情況特別感興趣。
指數的每一位決定中間結果的儲存位置。
不必要。
一種方法是使用稱為(常量訪問)條件交換的原語。該原語採用值 R 和 S,如果指數中的位為 1,則交換它們,如果它們為 0,則不理會它們。自然,這是通過常量訪問完成的(即使該位為 0,您仍然可以讀取和寫出 R 和 S) 和常數時間;它的實現非常簡單(並且比算法其餘部分使用的 Bignum 操作快得多)
使用此原語,虛擬碼如下所示:
CSWAP R, S R <- R*S S <- S*S CSWAP R, S
如果指數位為 0,我們可以忽略 CSWAP,這正是蒙哥馬利梯的“位 0”邏輯。
如果指數位為 1,那麼我們有效地執行以下邏輯:
R' = S, S' = R /* First CSWAP */ R' <- R'*S' S' <- S'*S' R = S', S = R' /* Second CSWAP */
重命名變數,這簡化為:
S <- S*R R <- R*R
這是“位 1”蒙哥馬利邏輯(因為 * 是可交換的)。
因此,我們已經實現了梯形圖的兩側,具有持續的記憶體訪問。
如果我們寫出完整的梯形圖,我們會看到基於指數的不同位存在相鄰的 CSWAP;很明顯,如何將這些結合起來以進一步簡化事情。