Side-Channel-Attack

Montgomery Powering Ladder 和 Side Channel Attacks:實際上(不可能)分析中間值的儲存位置嗎?

  • June 26, 2018

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;很明顯,如何將這些結合起來以進一步簡化事情。

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