分析比较分组密码AESCFB或OFB与流密码RC4的特点Word文件下载.docx
- 文档编号:19992155
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:8
- 大小:22.53KB
分析比较分组密码AESCFB或OFB与流密码RC4的特点Word文件下载.docx
《分析比较分组密码AESCFB或OFB与流密码RC4的特点Word文件下载.docx》由会员分享,可在线阅读,更多相关《分析比较分组密码AESCFB或OFB与流密码RC4的特点Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
S[i]=i;
T[i]=K[imodkeylen];
然后用T产生S的初始置换,从S[0]到S[255],对每个S[i],根据由T[i]确定的方案,将S[i]置换为S中的另一字节:
/*S的初始序列*/
j=0
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;
t=(S[i]+s[j])mod256;
k=S[t]
伪随机序列一旦生成,就得到子密码sub_k,把子密钥和明文进行异或运算,得到密文。
解密过程也完全相同。
加密中,只需将k的值与下一明文字节异或;
相反解密中,将k的值与下一密文字节异或就可以还原出明文信息。
算法描述为:
for(i=0;
i<
textlength;
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<
RC4_KEY>
B<
key>
usingtheB<
len>
byteslongkeyatB<
data>
.
2.RC4:
encryptsordecryptstheB<
bytesofdataatB<
indata>
usingB<
andplacestheresultatB<
outdata>
.
RepeatedRC4()callswiththesameB<
yieldacontinuouskeystream.SinceRC4isastreamcipher(theinputisXORedwithapseudo-randomkeystreamtoproducetheoutput),decryptionusesthesamefunctioncallsasencryption.
以下是测试代码:
cryptotest.h:
[cpp]
viewplaincopy
1.#ifndef
_CRYPTOTEST_H_
2.#define
3.
4.#include
<
string>
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
key,
CRYPTO_MODE
mode);
19.string
DES_Decrypt(const
ciphertext,
20.
21.string
RC4_Encrypt(const
key);
22.string
RC4_Decrypt(const
23.
24.#endif
//_CRYPTOTEST_H_
rc4test.cpp:
1.#include
"
stdafx.h"
2.#include
iostream>
3.#include
vector>
5.#include
openssl/rc4.h>
6.#include
cryptotest.h"
8.using
10.string
key)
11.{
RC4_KEY
rc4key;
unsigned
char*
tmp
new
char[cleartext.length()
+
1];
memset(tmp,
cleartext.length()
1);
16.
RC4_set_key(&
rc4key,
key.length(),
(const
char*)key.c_str());
RC4(&
cleartext.length(),
char*)cleartext.c_str(),
tmp);
18.
19.
str
(char*)tmp;
21.
delete
[]
tmp;
22.
return
str;
24.}
25.
26.string
27.{
28.
29.
char[ciphertext.length()
30.
ciphertext.length()
31.
32.
33.
ciphertext.length(),
char*)ciphertext.c_str(),
34.
35.
36.
37.
38.
39.
40.}
main.cpp:
TestMemory.h"
6.
7.using
8.
9.void
test_RC4()
10.{
cleartext
中国北京12345$abcde%ABCDE@!
!
;
ciphertext
key
beijingchina1234567890ABCDEFGH!
!
RC4_Encrypt(cleartext,
decrypt
RC4_Decrypt(ciphertext,
cout<
src
cleartext:
cleartext<
endl;
genarate
ciphertext:
ciphertext<
decrypt<
if
(strcmp(cleartext.c_str(),
decrypt.c_str())
==
0)
24.
RC4
crypto
ok!
else
26.
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 特点