1.1 对称算法
加密:明文+密钥->密文
解密:密文+密钥->明文
对称算法主要四种加密模式
a.电子密码本模式 Electronic Code Book(ECB)
将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密
b.加密块链模式 Cipher Block Chaining(CBC)
b1.将明文分成固定长度的块,
b2.将前面一个加密块输出的密文与下一个要加密的明文块进行异或操作
b3将计算结果在用密钥进行加密得到明文。
备注:第一块明文块加密的时候,需要一个初始化向量。
c.加密反馈模式 Cipher Feedback Mode(CFB)
面向字符的应用程序的加密要使用流加密。
c1.使用64位的初始化向量。初始化向量放在移位寄存器中,在第一步加密,产生相应的64位初始化密文。
c2.初始化向量最左边的8位于明文前8位进行异或运算,产生密文第一部分(假设c),然后将c传输到接收方
c3.向量的位(即初始化向量所在移位寄存器内容)左移8位,使移位寄存器最右边的8位为不可预测的数据,在其中填入c的内容
c4.第1-3步,知道加密所有的明文单元
d.输出反馈模式 Output Feedback Mode(OFB)
输出反馈模式与CFB相似,惟一差别是,CFB中密文填入加密过程下一阶段,而在OFB中,初始化向量加密过程的输入填入加密过程下一阶段。
1.2 摘要算法
摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度,这种算法原理是根据一定运算规则对员数据进行某种形式的提取,这种提取就是摘要,被摘要的数据内容与原数据有密切联系,只要原数据改变,输出的摘要便完全不同。消息摘要算法是不可逆的(经加密后的数据,数据不可还原为原数据)
常用算法:MD2、MD4、MD5、SHA、SHA-1/256/383/512等。
1.3 公钥算法
公钥:加密密钥和算法是对外公开,人人都可以加密文件然后发给收信者
私钥:收信者收到加密文件后,他可以使用他的解密密钥解密,并不需要分发。
主要算法:RSA | DSA | DH | ECC
a. RSA
其算法如下:
A. 选择两质数p、q
B. 计算n = p * q
C. 计算n的欧拉函数Φ(n) = (p - 1)(q - 1)
D. 选择整数e,使e与Φ(n)互质,且1 < e < Φ(n)
E. 计算d,使d * e = 1 mod Φ(n)
其中,公钥KU={ e, n},私钥KR={ d, n}。
加密/解密过程:
利用RSA加密,首先将明文数字化,去长度小于log2n位的数字作为明文块。
对明文块M和密文块C,加解密的形式如下
加密: C = Me mod n
解密:M = Cd mod n = (Me)d mod n = Med mod n.
备注:一般使用1024位的密钥
b.DSA
DSA (Digital Signature Algorithm, 数字签名算法,用作数字签名标准的一部分), 它是另一种公开密钥算法,他不能用作加密,只用做数字签名。DSA使用公开密钥,为接受者验证数据的完整性和数据发送者的身份。它也可用于由第三方去确定签名和所签数据的真实性。DSA算法的安全性基于离散对数的困难性,这类签字便准具有较大的兼容性和使用性,成为网络安全体系的基本构件之一。
DSA签名算法中用到了以下参数:
p是L位长的素数,其中L从512到1024且是64的倍数。
q是16位长且与p-q互质的因子,其中h是小于p-1并且满足大于1的任意数。
x是小于q的数。
另外,算法使用一个单向散列函数H(m).标准制定了安全散列算法(SHA)。三个参数p,q和g是公开的,且可以被网络中所有的用户公有。私人密钥是x,公开密钥是y.
对消息m签名时:
发送者产生一个小于q的随机数k.
发送者产生:r和s就是发送者的签名,发送者将他们发送给接受着。
接受者通过计算来验证签名:如果v=r,则签名有效。
c.Diffie-Hellman密钥交换
DH实质是一个通信双方进行密钥协定的协议:两个实体中的任何一个使用自己的私钥和另一实体的公钥,得到一个对称密钥,这一对称密钥其他实体都计算不出来。DH算法的安全性基于有限域上计算离散对数的困难性。离散对数的研究现状表明:所使用的DH密钥至少需要1024位,才能保证有足够的中、长期安全。
d.ECC(椭圆曲线密码体制)
ECC依据就是定义在椭圆曲线点群上的离散对数问题的难解性。
为了用椭圆曲线构造密码系统,首先需要找到一个单向陷门函数,椭圆曲线的数量乘就是这样的单向陷门函数。
椭圆曲线的数量乘是这样定义的:设E为域K上的椭圆曲线,G为E上的一点,这个点被一个正整数k相乘的乘法定义为k个G相加,因而有
kG = G + G + … + G (共有k个G)
若存在椭圆曲线上的另一点N ≠ G,满足方程kG = N.容易看出,给定k和G,计算N相对容易。而给定N和G,计算k = logG N相对困难.这就是椭圆曲线离散对数问题。
离散对数求解是非常困难的。椭圆曲线离散对数问题比有限域上的离散对数问题更难求解。对于有理点数有大素数因子的椭圆离散对数问题,目前还没有有效的攻击方法。