分析比较分组密码AESCFB或OFB与流密码RC4的特点.docx
- 文档编号:6970669
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:8
- 大小:22.53KB
分析比较分组密码AESCFB或OFB与流密码RC4的特点.docx
《分析比较分组密码AESCFB或OFB与流密码RC4的特点.docx》由会员分享,可在线阅读,更多相关《分析比较分组密码AESCFB或OFB与流密码RC4的特点.docx(8页珍藏版)》请在冰豆网上搜索。
分析比较分组密码AESCFB或OFB与流密码RC4的特点
作业二、分析比较分组密码AES-CFB或OFB与流密码RC4的特点
一、RC4算法介绍
RC4是一种对称密码算法,它属于对称密码算法中的序列密码(streamcipher,也称为流密码),它是可变密钥长度,面向字节操作的流密码。
RC4是流密码streamcipher中的一种,为序列密码。
RC4加密算法是RonRivest在1987年设计出的密钥长度可变的加密算法簇。
起初该算法是商业机密,直到1994年,它才公诸于众。
由于RC4具有算法简单,运算速度快,软硬件实现都十分容易等优点,使其在一些协议和标准里得到了广泛应用。
流密码也属于对称密码,但与分组加密算法不同的是,流密码不对明文数据进行分组,而是用密钥生成与明文一样长短的密码流对明文进行加密,加解密使用相同的密钥。
RC4算法特点:
(1)、算法简洁易于软件实现,加密速度快,安全性比较高;
(2)、密钥长度可变,一般用256个字节。
对称密码的工作方式有四种:
电子密码本(ECB,electroniccodebook)方式、密码分组链接(CBC,cipherblockchaining)方式、密文反馈(CFB,cipher-feedback)方式、输出反馈(OFB,output-feedback)方式。
RC4算法采用的是输出反馈工作方式,所以可以用一个短的密钥产生一个相对较长的密钥序列。
OFB方式的最大的优点是消息如果发生错误(这里指的是消息的某一位发生了改变,而不是消息的某一位丢失),错误不会传递到产生的密钥序列上;缺点是对插入攻击很敏感,并且对同步的要求比较高。
RC4的执行速度相当快,它大约是分块密码算法DES的5倍,是3DES的15倍,且比高级加密算法AES也快很多。
RC4算法简单,实现容易。
RC4的安全保证主要在于输入密钥的产生途径,只要在这方面不出现漏洞,采用128bit的密钥是非常安全的。
RC4算法加密流程:
包括密钥调度算法KSA和伪随机子密码生成算法PRGA两大部分(以密钥长度为256个字节为例)。
密钥调度算法:
首先初始化状态矢量S,矢量S中元素的值被按升序从0到255排列,即S[0]=00,S[1]=1,…,S[255]=255.同时建立一个临时矢量T,如果密钥K的长度为256字节,则将K赋给T。
否则,若密钥长度为keylen字节,则将K的值赋给T的前keylen个元素,并循环重复用K的值赋给T剩下的元素,直到T的所有元素都被赋值。
这些预操作可概括如下:
/*初始化*/
fori=0to255do
S[i]=i;
T[i]=K[imodkeylen];
然后用T产生S的初始置换,从S[0]到S[255],对每个S[i],根据由T[i]确定的方案,将S[i]置换为S中的另一字节:
/*S的初始序列*/
j=0
fori=0to255do
j=(j+S[i]+T[i])mod256
swap(S[i],S[j]);
因为对S的操作仅是交换,所以惟一的改变就是顺序的改变。
S仍然包含从0到255的所有元素,在初始化的过程中,密钥的主要功能是将S-box搅乱,代码中的变量i确保S-box的每个元素都得到处理,变量j保证S-box的搅乱是随机的。
因此不同的S-box在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,并且该序列是随机的。
伪随机序列生成算法:
矢量S一旦完成初始化,输入密钥就不再被使用。
密钥流的生成是从S[0]到S[255],对每个S[i],根据当前S的值,将S[i]与S中的另一字节置换。
当S[255]完成置换后,操作继续重复,从S[0]开始:
/*密钥流的产生*/
i,j=0;
while(true)
i=(i+1)mod256;
j=(j+S[i])mod256;
swap(S[i],S[j]);
t=(S[i]+s[j])mod256;
k=S[t]
伪随机序列一旦生成,就得到子密码sub_k,把子密钥和明文进行异或运算,得到密文。
解密过程也完全相同。
加密中,只需将k的值与下一明文字节异或;相反解密中,将k的值与下一密文字节异或就可以还原出明文信息。
算法描述为:
for(i=0;i ciphertext[i]=keystream[i]^plaintext[i] RC4算法存在的问题: 因为RC4算法具有实现简单,加密速度快,对硬件资源耗费低等优点,使其跻身于轻量级加密算法的行列。 但是其简单的算法结构也容易遭到破解攻击,RC4算法的加密强度完全取决于密钥,即伪随机序列生成,而真正的随机序列是不可能实现,只能实现伪随机。 这就不可避免出现密钥的重复。 RC4算法不管是加密还是解密,都只进行了异或运算,这就意味着,一旦子密钥序列出现了重复,密文就极有可能被破解。 具体破解过程如下: 若明文、密钥是任意长的字节,可以用重合码计数法(countingcoincidence)找出密钥长度。 把密文进行各种字节的位移,并与原密文进行异或运算,统计那些相同的字节。 如果位移是密钥长度的倍数,那么超过60%的字节将是相同的;如果不是,则至多只有0.4%的字节是相同的,这叫做重合指数(indexofcoincidence)。 找出密钥长度倍数的最小位移,按此长度移到密文,并且和自身异或。 由于明文每字节有1.3位的实际信息,因此有足够的冗余度去确定位移的解密。 对所有的密钥,输出密钥流的前几个字节不是随机的,因此极有可能会泄露密钥的信息。 如果一个长期使用的密钥与一个随机数串联产生RC4算法密钥,那么可以通过分析大量由该密钥加密的密文得到这个长期使用的密钥。 解决该问题的办法是: 抛弃密钥流最初的那部分数据。 RC4isastreamcipherwithvariablekeylength. Typically,128bit(16byte)keysareusedforstrongencryption,butshorterinsecurekeysizeshavebeenwidelyusedduetoexportrestrictions. 1.RC4_set_key: setsuptheB 2.RC4: encryptsordecryptstheB 以下是测试代码: cryptotest.h: [cpp] viewplaincopy 1.#ifndef _CRYPTOTEST_H_ 2.#define _CRYPTOTEST_H_ 3. 4.#include 5. 6.using namespace std; 7. 8.typedef enum { 9. GENERAL = 0, 10. ECB, 11. CBC, 12. CFB, 13. OFB, 14. TRIPLE_ECB, 15. TRIPLE_CBC 16.}CRYPTO_MODE; 17. 18.string DES_Encrypt(const string cleartext, const string key, CRYPTO_MODE mode); 19.string DES_Decrypt(const string ciphertext, const string key, CRYPTO_MODE mode); 20. 21.string RC4_Encrypt(const string cleartext, const string key); 22.string RC4_Decrypt(const string ciphertext, const string key); 23. 24.#endif //_CRYPTOTEST_H_ rc4test.cpp: [cpp] viewplaincopy 1.#include "stdafx.h" 2.#include 3.#include 4.#include 5.#include 6.#include "cryptotest.h" 7. 8.using namespace std; 9. 10.string RC4_Encrypt(const string cleartext, const string key) 11.{ 12. RC4_KEY rc4key; 13. unsigned char* tmp = new unsigned char[cleartext.length() + 1]; 14. memset(tmp, 0, cleartext.length() + 1); 15. 16. RC4_set_key(&rc4key, key.length(), (const unsigned char*)key.c_str()); 17. RC4(&rc4key, cleartext.length(), (const unsigned char*)cleartext.c_str(), tmp); 18. 19. string str = (char*)tmp; 20. 21. delete [] tmp; 22. 23. return str; 24.} 25. 26.string RC4_Decrypt(const string ciphertext, const string key) 27.{ 28. RC4_KEY rc4key; 29. unsigned char* tmp = new unsigned char[ciphertext.length() + 1]; 30. memset(tmp, 0, ciphertext.length() + 1); 31. 32. RC4_set_key(&rc4key, key.length(), (const unsigned char*)key.c_str()); 33. RC4(&rc4key, ciphertext.length(), (const unsigned char*)ciphertext.c_str(), tmp); 34. 35. string str = (char*)tmp; 36. 37. delete [] tmp; 38. 39. return str; 40.} main.cpp: [cpp] viewplaincopy 1.#include "stdafx.h" 2.#include "cryptotest.h" 3.#include "TestMemory.h" 4.#include 5.#include 6. 7.using namespace std; 8. 9.void test_RC4() 10.{ 11. string cleartext = "中国北京12345$abcde%ABCDE@! ! ! "; 12. string ciphertext = ""; 13. string key = "beijingchina1234567890ABCDEFGH! ! ! "; 14. 15. ciphertext = RC4_Encrypt(cleartext, key); 16. string decrypt = RC4_Decrypt(ciphertext, key); 17. 18. cout<<"src cleartext: "< 19. cout<<"genarate ciphertext: "< 20. cout<<"src ciphertext: "< 21. cout<<"genarate cleartext: "< 22. 23. if (strcmp(cleartext.c_str(), decrypt.c_str()) == 0) 24. cout<<"RC4 crypto ok! ! ! "< 25. else 26. cout<<"RC4 crypto error! ! ! "< 27.} 二、分组密码AES的模式 分组密码是最基本的密码技术之一,其处理消息的长度是固定的,如DES为64比特、AES为128比特,但是在实际中需要处理的消息通常是任意长的,且要求密文尽量不确定,而分组密码自身不能做到,因此,引出了如何利用分组密码处理任意长度消息的问题.解决这个问题的技术就是分组密码工作模式. 分组密码工作模式的设计理念 为了阐述分组密码工作模式的设计理念,我们首先介绍如何评价一个分组密码工作模式.工作模式的评价指标有三个方面: 安全性、性能、模式/执行特点. 安全性评价指标包括: 抵抗现有攻击的能力;可证明安全性,在合理的假设下,是否有安全性的证明结果;和类似模式安全性的比较,和现在用的模式(如CBC)的比较;随机性,输出的统计特性;是否拥有合理的数学背景等.性能评价指标包括计算的有效性、空间需求、可并行性和预处理能力等.模式/执行特点评价指标包括可提供的密码服务、灵活性、错误特性、模式本身抗错性和简单性等. 安全性是所有评价指标中最重要的,因为其它性能的评估相对容易、相对直观.安全性评价中的第一条类似于分组密码中目前流行的做法,评价的是工作模式的应用安全性,有时和具体分组密码有关,分析模式在实际应用中对强力攻击、中间相遇攻击、潜信道攻击等的抵抗力.安全性中的第二条评价的是模式的理论安全性,与具体分组密码无关;通常假定分组密码是“理想”的,研究工作模式自身的安全性.模式的理论安全性是设计者应当考虑的首要问题,也就是在假定好的基本模块存在的条件下,如何设计各种性能的工作模式,比如用于保密的工作模式、用于认证的MAC、Hash等.理论安全性是目前对设计工作模式最基本的要求,它保证在工作模式这一层没有安全隐患,没有降低分组密码的安全性. 典型分组密码工作模式 (1)ECB模式 加密变换为Ci=EK(Pi), 解密变换为Pi=EK-1(Ci). ECB模式的优点是可并行运算,速度快,易于标准化.缺点是分组加密不能隐蔽数据模式,即相同的明文组蕴含着相同的密文组;不能抵抗组的重放、嵌入、删除等攻击;加密长度只能是分组的倍数.许多人建议ECB模式不应该包含在AES的标准中,因为此模式对长度多于一块的消息不可用. (2)OFB模式 加密变换为Zi=EK(Zi-1),Ci=PiZi,Z0为 初始向量. 解密变换为Zi=EK(Zi-1),Pi=CiZi,Z0为 初始向量. OFB模式的主要优点是错误传播小,密文中的1比特错误只导致明文中的1比特错误;可以预处理;消息长度是任意的;可在线处理(随时处理明文)等.缺点是系统要求通信双方必须同步,否则难于解密. (3)CFB模式 加密变换为Ci=EK(Ci-1)Pi,C0为初始向量. 解密变换为Pi=EK(Ci-1)Ci,C0为初始向量. CFB模式的主要优点是具有自同步能力;可以处理任意长度的消息,同时具有CBC的优点.基于CFB的相关工作有OCFB模式、openPGPCF模式等.OCFB模式是由AmmarAlkassar针对CFB的效率问题提出的改进版,在保证自同步能力的前提下提高效率,并且是可证明安全的.openPGPCFB是在RFC2004描述的模式。 它主要用在签名和加密邮件,在商业加密产品中得到广泛应用.scFB模式是cFB模式和oFB模式的混合体,作为密钥流生成器,具有自同步能力并且效率比cFB高,吸取了cFB和OFB的优点,充分利用了OFB的速度和cFB保持同步的能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 分析 比较 分组 密码 AESCFB OFB RC4 特点
![提示](https://static.bdocx.com/images/bang_tan.gif)