第四十五個知識點:描述一些對抗RSA側信道攻擊的基礎防御方法


第四十五個知識點:描述一些對抗RSA側信道攻擊的基礎防御方法

原文地址:http://bristolcrypto.blogspot.com/2015/08/52-things-number-45-describe-some-basic.html

為了讓這篇文章保持簡單,我們將會我們將討論所謂的“香草”RSA(在加密中不使用隨機性),並強調少量潛在的側通道攻擊和對策。

讓我們回顧一下簡單的RSA加密方案。
密鑰生成:選擇一對秘密的素整數\(p\)\(q\),然后計算模\(N = pq\)。一個整數\(3 \le e \le \phi(N)\),和\(\phi(N)\)互質。然后公鑰對就是\((N,e)\)。私鑰式獨一無二的整數\(3 \le d \le \phi(N)\),使得\(ed=1 \mod \phi(N)\)

加密一個消息\(m \in Z_N\),我們能計算\(m^e \mod N\)

解密一個私鑰\(c \in Z_N\),我們能計算\(c^d \mod N\)

一個確定密鑰的SPA類型的攻擊

我們首先給出一個示例,說明如何在解密操作期間泄漏關於密鑰d的信息。一個典型的實現指數冪乘法的方式就是分支程序。例如,乘加算法能有效的計算一個被二進制表達的冪乘操作。

假如說\(d = \Sigma_{0 \le i \le n}b_i2^i\),其中\(b_i \in \{0,1\}\)。那么,

\[c^d = \Phi_{0 \le i \le n}c^{b_i2^i} \]

那么我們就可以通過下面的算法來計算\(c^d的值了\)

  • \(ANS \leftarrow 1\)
  • \(fac \leftarrow c\)
  • \(For 0 \le i \le n\),do
    • \(if \space b_i = 1\)
      • \(ANS \leftarrow ANS \times fac\)
      • \(fac \leftarrow fac^2\)
    • \(Else,\)
      • \(fac \leftarrow fac^2\)
  • \(return ANS\)

算法的行為取決於每個\(b_i\)是0還是1。因此,如果使用這種算法解密RSA密文,它所花費的時間或它的功耗可以顯示每一位\(b_i\)的值,從而顯示密鑰d。這將是一種spa式的攻擊,因為只需要一個跟蹤。

為了防止這種攻擊,必須使算法的兩個分支在攻擊者看來是相同的,即使平方和乘法算法的兩個分支花費相同的時間運行或消耗相同的能量。

一個SPA類型對明文的攻擊

上面展示了解密過程中如何危害密鑰。但是攻擊者可能對特定的明文感興趣,\(m\)(畢竟,加密被用於設計保持消息機密)。同樣,如果加密操作是一個依賴於m值的分支程序,那么單個加密的運行時或功耗可能會在SPA類型攻擊中泄漏關於m的信息。特別要注意的是,必須在加密中執行模操作。在大多數實現中,不是在取冪結束時對一個非常大的整數進行單個約簡,而是在取冪算法中進行許多次模操作,以保持所涉及的數字(相對)較小。

作為一個例子,我們假設在循環中執行下面的操作:

  • while \(ANS > N\)
    • \(ANS \leftarrow ANS-N\)

在這里,因為機密的時刻,指數是已知的,根據運行所需的時間和消耗的電量泄露關於m的基本信息(參見David關於蒙哥馬利算法攻擊的文章)。

再一次,以防止這種攻擊,我們必須確保我們的使用相同的時間和消耗相同的功率來減少中間值模N,不管他們是什么大小。(由於我們知道底的精確指數和取值范圍,所以可以很容易地找到上限)。

防止對密鑰進行DPA類型的攻擊

即使我們模糊了依賴於d的解密中的任何分支,在執行解密的冪運算時執行的操作的精確細節仍然依賴於該指數(以一種不太明顯的方式)。:因此,在多次解密之后,可能會出現解密密鑰與操作持續時間或功耗之間的統計關系。因此,我們還需要防止更微妙的dpa風格的攻擊,即攻擊者對大量跟蹤使用統計技術來測試關於秘密密鑰的假設。

要做到這一點,我們必須消除密鑰和每次執行的計算之間的直接依賴關系。這涉及到盲處理,即在不影響結果的情況下將一些隨機噪聲注入到求冪運算中。在解密中,我們引入隨機性,當\(d\)的在\(Z_{\phi(N)}\)\(e\)的逆,我們能夠加或者減\(\phi(N)\),這樣結果也不會改變。因此解密\(c \in Z_N\),選擇一個隨機的\(r \in Z\)然后計算\(d^{'} = d + r\phi(N)\)。然后計算消息\(c^{d^{'}}\)也和\(c^d \mod N\)相同。關鍵是加法通常不是一個分支操作,所以增加\(r\phi(N)\)\(d\)不會泄漏在一個跟蹤信息,並使用一個新的隨機r為每個解密防止DPA-style攻擊。

Coppersmith's的SPA類型攻擊來確定明文

我們使用一個特殊但是有趣的攻擊來結束這篇文章,這個攻擊只會發生在e很小的時候,例如\(e=3\)是在加密時刻為了效率的一個選擇。這有一個定理叫史密斯定理,這里會有介紹,一個攻擊者能有效率的找到所有的小整數的解:\(f(x)=0 \mod N\),其中\(x < N^{1/e}\)。如果\(m<N^{1/e}\),那么直接就通過開方計算出來。但是如果\(m\)的某些位泄露,那么我們就可以寫成\(m = m_k+m_u\)。這樣我們就有多項式\(f(X) = (m_k+X)^e\)。因此我們需要確保\(m\)的位數在加密過程中不被泄露。

為了對抗這種攻擊,我們再次使用了盲方法:我們在取冪之前給m引入一些隨機性,然后再將其移除。簡單來說,我們取一個隨機數\(r\),然后計算\(rm \mod N\),然后是\((rm)^e \mod N\),最后計算\(r^{\phi(N)-e}\)。顯然,密文是一樣的,如果沒有盲方法,但泄漏的指數運算現在是獨立於m的。

這篇文章應該讓您了解可以安裝在加密方案上的那種側通道攻擊,以及實現可以避免它們的方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM