流密碼是一種常見的加密演算法,基於異或(xor)操作,每次只操作乙個位元組,常見的流密碼加密演算法有:rc4、oryx、seal。
因為異或加密的本質,最常見的錯誤就是多次使用同乙個金鑰進行加解密。攻擊者甚至不需要知道金鑰就能成功破解密文。原理如下:
缺陷
/* a、b為明文,c為金鑰 */
e(a) = a xor c ;
e(b) = b xor c ;
/* 相同的值想異或結果為0 */
e(a) xor e(b) = (a xor c) xor (b xor c) = a xor b xor (c xor c) = a xor b ;
e(a) xor e(b) xor b = a xor b xor b = a;
因此我們只要構建乙個明文b並獲得他的密文,通過其他途徑獲得a的密文(密文一般容易得到),通過這三個值就能獲取到a的明文!這裡的前提是兩次加密的金鑰是一致的!
因此對於流密碼方式的加密,金鑰的隨機性就至關重要了!!
在ucenter中,有乙個加密演算法,他是如何獲取金鑰的呢。
$ckey_length = 4; /* 金鑰的長度預設為4 !*/
$keyc = substr(md5(microtime()),-$ckey_length);
這裡金鑰是隨機生成的,具有一定隨機性,這樣導致相同的字串每次加密後的結果一般都不相同,那不同的密文演算法又是如何解密的呢,原因就是需要將每次使用的金鑰新增到加密後的密文中,形成最終的密文。
流加密返回的密文內容
$result = decrypt($keyc,$string);
return $keyc.$result;
這樣如果金鑰隨機性不高,就給了攻擊者暴力破解的機會,比如說上面的金鑰長度為4,完成可以通過暴力破解。
流密碼暴力破解
$a_crypt = $a xor $c;
/* 密文前4位就是金鑰 */
$c_private = substr($a_crypt,0,3);
for(;;)
}
經測算,4個字的金鑰大概幾十秒就給破解出來了!因此金鑰的隨機性對於流密碼至關重要!! 密碼常用加密演算法
對稱性加密演算法 aes,des,3des des是一種分組資料加密技術 先將資料分成固定長度的小資料塊,之後進行加密 速度較快,適用於大量資料加密,而3des是一種基於des的加密演算法,使用3個不同密匙對同乙個分組資料塊進行3次加密,如此以使得密 度更高。相較於des和3des演算法而言,aes...
對稱加密演算法 DES加密演算法
一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...
gentry同態加密演算法 同態加密演算法
本文對同態加密演算法進行學習。參考文章同態加密演算法。定義同態加密演算法保證對聯合密文的解密結果等價於聯合明文。若存在同態加密演算法f,針對明文a和b,加密後分別得到a f a b f b 將其和a b 解密後得到a b,則同態加密演算法f被成為加法同態加密演算法。加法同態演算法的加密和解密分別用e...