【密碼學原理】流密碼和RC4演算法
流密碼
金鑰輸入到一個偽隨機數發生器,該偽隨機數發生器產生一串隨機的8位數,輸出的金鑰流和明文流的每個位元組進行對位異或運算,得到一個位元組,解密時使用相同的偽隨機序列。
設計流密碼需要注意:
- 加密序列的週期要長。偽隨機數發生器使用的函式產生確定性的位流,該位流最終會出現重複。重複的週期越長,密碼分析的難度越大。
- 金鑰流應該儘可能的接近於真隨機數流的特徵。金鑰流的隨機特性越好,密文越隨機,密碼分析難度越大。
- 上圖中偽隨機數發生器的輸出受到輸入金鑰K的調節。為了防止窮舉攻擊,金鑰應該足夠長,就目前最少應該128位。
分組密碼的優點是可以重複使用金鑰,但如果流密碼對兩個文明用相同金鑰加密,那麼密文分析就相當容易。
RC4演算法
RC4是Ron Rivest為RSA公司在1987年設計的一種流密碼,金鑰長度可變,面向位元組操作。分析顯示該密碼的週期很可能大於,每輸出一個位元組的結果僅需要8到16條機器操作指令,軟體實現也很快。應用於網路瀏覽器和伺服器同學制定了SSL/TLS標準。
下面為流密碼RC4的金鑰生成過程。
初始狀態的時候,S為0到255的填充,T為金鑰K(長度為keylen)的重複填充。
對已經初始填充的S進行初始化置換,置換過程為交換第i個位與第j個位,演算法為
j=0;
for i=0 to 255 do
j=(j+S[i]+T[i]) mod 256;
swap(S[i],T[i]);
完成S的初始化置換後,輸入的金鑰就不再使用,取代的是S。
金鑰流的生成過程如上圖所示,其演算法為
加密的時候,將k的值與明文的下一個位元組異或,解密時,將k的值與密文的下一個位元組異或。
相關文章
- RC4演算法:流密碼演算法的經典之作演算法密碼
- 《密碼學系列》|| 密碼學中的流密碼是怎麼回事?密碼學
- BTC-密碼學原理密碼學
- RSA加密原理&密碼學&HASH加密密碼學
- 應用密碼學——古典密碼密碼學
- 分組密碼(四)AES演算法① — 密碼學複習(七)演算法密碼學
- 密碼學系列之:NIST和SHA演算法密碼學演算法
- 密碼學密碼學
- 應用密碼學 - 公鑰密碼密碼學
- 應用密碼學——分組密碼密碼學
- 密碼加SALT原理密碼
- mysql學習之-密碼管理(預設密碼,修改密碼,解決忘記密碼)MySql密碼
- 比特幣中的密碼學原理比特幣密碼學
- 密碼學之DES/AES演算法密碼學演算法
- 密碼學基礎概念 — 密碼學複習(一)密碼學
- MYSQL修改密碼和忘記ROOT密碼MySql密碼
- 分組密碼(一) — 密碼學複習(四)密碼學
- 密碼學承諾原理與應用 - 概覽密碼學
- 《密碼學系列》|| 詳解密碼學的多重DES演算法...密碼學解密演算法
- 希爾密碼(hill密碼)密碼
- 密碼學承諾之原理和應用 - Kate多項式承諾密碼學
- 古典密碼的演化 (一)— 密碼學複習(二)密碼學
- 古典密碼的演化 (二)— 密碼學複習(三)密碼學
- 密碼危機:深度學習正在加速密碼破解!密碼深度學習
- 密碼學與密碼安全:理論與實踐密碼學
- DES演算法C++程式碼實現-密碼學演算法C++密碼學
- 密碼安全:密碼設定要求,密碼爆破辦法,密碼歸類使用,密碼處置方案密碼
- 密碼學入門密碼學
- killBase系列 -- 密碼學密碼學
- 密碼學筆記密碼學筆記
- 古典密碼學 (一)密碼學
- 密碼學簡述密碼學
- Rabbit流密碼的Java實現密碼Java
- 【密碼學系列】|| 分組密碼的工作模式詳解密碼學模式
- 密碼學課程設計 - 混合密碼的實現密碼學
- CTF---密碼學入門第六題 古典密碼密碼學
- 密碼安全和無密碼身份認證那些事兒密碼
- ubuntu系統下mysql重置密碼和修改密碼操作UbuntuMySql密碼