RSA 時序攻擊

2022-09-15 21:45:17 字數 1603 閱讀 8129

rsa的破解從理論上來講是大數質數分解,可是就是有一些人另闢蹊徑,根據你解密的時間長短就能破解你的rsa私鑰。

舉乙個不恰當但是比較容易理解的例子:

密文

0101

私鑰0110

明文0100

問題的關鍵來了,進行&運算時如果有乙個0,那麼運算的時間為1ms,如果兩個都是1,運算的時間是10ms(只是個假設)。

基於以上假設,就可以破解私鑰了。先構造乙個0001的密文,獲取解密的時間,如果是1ms左右,那麼對應的位就是0,

如果是10ms左右,對應的1,依次類推,就把整個私鑰推斷出來了。

如何防範這種攻擊呢?

一種最簡單有效的方法,每次過來乙個密文,先用乙個隨機數與它&一下,然後再與私鑰&,只要隨機數是真正的隨機數,那麼

是無法破解的。注意,是真正的隨機數而不是偽隨機數。

rsa解密的本質就是冪模運算,也就是x = a ^ b  mod  n ,其中a是明文,b是私鑰,n是兩個大質數(p-1)(q-1)的積。由於這些

數都特別大,比如b可能有2048位,直接計算是不可行的。計算x的最經典的演算法是蒙哥馬利演算法,用**表示如下:

int mod(int a,int b,int

n)

base = (base*base) %n;

b>>=1;

} return

result;

}

這個演算法從b的最低位迴圈到最高位,如果是1,需要進行兩次模乘運算,如果是0的話則只需要一次。由於這個操作是比較耗時的,所以

0和1對應的時間差別較大。攻擊者可以通過觀察不同輸入對應的解密時間,通過分析統計推斷出私鑰。而防範rsa時序攻擊的方法也是在

解密時加入隨機因素,讓攻擊者無法獲取準確的解密時間。

真正意義上的隨機數,是很難產生的,因為即使小到原子,它的規律也是有跡可循的。所以我們產生的隨機數都是偽隨機數,但是偽隨機數的

隨機性也是不一樣的,如果產生的隨機數規律性很強,那就很容易被**到,而如果產生的隨機數被**的難度特別大,那麼我們就可以認為

它是真隨機數了,只有強度高的隨機數用來加解密等操作上才是安全的。

目前大部分作業系統都會提供兩種隨機數的產生方式,以linux為例,它提供了/dev/urandom和/dev/random兩個特殊裝置,可以從裡面讀

取一定長度的隨機數。

(1)/dev/random是blocking pseudo randomnumber generator (阻塞式偽隨機數產生器),它是通過網路事件,鍵盤敲

擊事件等物理上隨機的事件,收集一些隨機bit到熵池來產生隨機數。這個隨機生成函式可能因為熵池為空而等待,所以需要大量隨機數的情

況下它會顯得很慢,但諸如產生證書之類的操作需要這種強度的隨機數。

(2)/dev/urandom就是unblocking,它不會阻塞,但是產生的隨機

數不夠高,是以時間戳之類的種子來產生隨機數。

j**a可以用securerandom產生隨機數,而且可以在jvm引數裡配置是使用/dev/random還是/dev/urandom,如果安全性要求改,就用

/dev/random,但是效能是就會有折扣。

出處:rsa的那些坑

RSA攻擊總結

相關概念 什麼是dp dp d mod p 1 推導過程 dp equiv d mod p 1 dp times e equiv d times e mod p 1 d times e k times p 1 dp times e d times e equiv 1 mod p 1 times q ...

RSA攻擊之wiener攻擊

詳細資訊請參閱維基百科 連分數 在數學中,連分數或繁分數即如下表示式 這裡的a0是某個整數,而所有其他的數an都是正整數,可依樣定義出更長的表示式。下面通過實際的例子來學習如何將乙個實數轉換為連分數 eg 找出3.245的連分數 結合rsa演算法,我們理解上面的定理 根據上面的定理,我們根據給定的實...

靜態時序和時序約束

靜態時序中,組成設計的元件分類成組合邏輯和時序邏輯兩大類。在vivado中,設計是否滿足效能要求是由靜態時序分析 static timing analysis,sta 來校驗和驗證的,在靜態時序分析sta中元件的功能並不重要,重要的是元件的效能。在vivado中,靜態時序引擎是基於基本元件,這意味著...