SSL算法库的理解与测试

SSL算法库包含3类算法,这里分别说明SSH所用到和我们可能用到的算法:
对称加密算法——DES、AES、RC4;
非对称加密算法——RSA、DH;
信息摘要算法(单向哈希算法)——MD5、SHA;
在SSH中,使用RSA算法加密SSH v1的密钥交换过程;使用DH算法加密SSH v2的密钥交换过程,通过DH算法获得会话密钥;使用DES算法加密SSH的会话过程。
 
DES算法
DES算法属于对称加密算法,使用块加密方式,每次加密64bit(8字节)的数据块。
对称加密算法使用同一密钥进行加/解密,可分为块加密和流加密2种方式。其中,块加密可分为4种模式:
1、ECB(Electronic Code Book,电子密码本):在ECB模式中,每块明文都是独立于其他块加密的。虽然这样做比较高效(可以并行执行多个数据块的加密),但是易受攻击,因为对相同明文块的加密总是产生相同的密文块。在SSL算法库中这是DES基本的加密方式。
2、CBC(Cipher Block Chaining,密码块链接):在CBC模式中,块是连续加密的,在加密当前明文块之前,用前一次块加密的结果修改当前明文块。这个过程改进了加密的一些特征(例如,相同的明文块不会产生相同的密文块),但是由于其加密过程是连续的,CBC方式不支持加密的并行化。CBC方式使用初始向量(Initialization Vector,IV)来开始链接过程。IV 用于修改被加密的第一个明文块。在SSL算法库中这是DES为SSL提供的加密方式。
3、CFB(Cipher Feedback,密码反馈)
4、OFB(Output Feedback,输出反馈)
对于DES算法的扩展,有3DES和DESX两种算法。
3DES简单的说是使用DES算法进行3重加密,其做法有4种:
1、DES-EEE3:使用3把不同的密钥,依次进行加密-加密-加密。
2、DES-EDE3:使用3把不同的密钥,依次进行加密-解密-加密。
3、DES-EEE3:使用2把不同的密钥,依次进行加密-加密-加密,第3次和第1次使用的密钥相同。
4、DES-EDE3:使用2把不同的密钥,依次进行加密-解密-加密,第3次和第1次使用的密钥相同。
但是3DES做了3次DES加密,所以其效率只有DES的1/3,DESX算法可以不损失效率,同时提高密钥长度。
DESX使用3把不同的密钥,第1把密钥用来对准备加密的块做XOR运算,第2把密钥再对已经作过XOR运算的块再做一次XOR运算,第3把密钥用来进行DES加密。这样,只做了1次DES加密,但是密钥长度是3把密钥的总长度。
 
AES算法
AES算法是美国新的对称数据加密算法,它是作为DES的替代者推出的。相对于DES而言,其特点主要是速度快、保密性高。
AES也采用块加密方式,AES处理的基本块是128bits,即16字节;DES处理的基本块是64bits,即8字节。
AES的密钥长度有3种,128bits、192bits、256bits;DES的密钥长度为56bits,加上8bits的校验位,通常看上去是64bits。
但是AES出来的时间不长,把AES当作注册算法还没有得到大量普及,其实际效果还需要时间的检验
 
RC4算法
RC4算法通常用于密钥长度可变的流加密,其特点是算法简捷、速度快。不过目前已经发现了RC4比较大的安全漏洞,正在逐步被RC5取代。
 
RSA算法
RSA算法大家应该比较熟悉,这里提下PKCS和OAEP,PKCS padding和OAEP padding是RSA的两种比较安全的padding方法。
在RSA加密时,是对每个加密块进行加密,加密块在格式化时有一个padding的概念。我们简称:填充字符串为PS,加密块为EB,加密块类型为BT,明文数据为D,则EB格式化表示为:EB = 00||BT||PS||00||D。PS必须由k-3-||D||个字节组成,其中k为模数的长度。
 
DH算法
DH算法通常用于双方协商加密密钥,同时需要DH协商流程的配合。在SSH中用于密钥交换的过程。
 
MD5算法
MD5算法是常用的信息摘要算法(或者说哈希算法)之一,其典型应用是对一段信息产生信息摘要,防止信息被篡改。MD5可以把一个任意长度的字节串变换成一定长的大整数,从而压缩成一种保密的格式。
MD5的哈希值长度是128bits。
目前MD5算法已经被实际破解了——呵呵,那是中国山东的王小云牛人。
 
SHA算法
SSL算法库中的SHA算法包含了SHA和SHA1,以及SHA256、SHA384、SHA512。
SHA是SHA算法的早期版本,存在安全问题。
广泛应用的是SHA1,它也是常用的信息摘要算法之一。SHA1的哈希值长度是160bits,比128bits哈希值算法(如MD5)更安全,但是速度也更慢。
目前SHA1也被理论破解了(破解需要的时间长了点,6000年)——呵呵,还是中国山东的王小云牛人。
SHA256、SHA384、SHA512对应的哈希值长度,顾名思义则是256bits、384bits、512bits。
算法库的测试主要就是针对这7种算法的测试,测试环境是CPU=PPC440,OS=vxworks,Platform=6503
DES测试
测试程序给出16组弱密钥(目前已知64组),当然不是用来测试,而是排除,以及相应的测试数据。
1、cbcm方式
测试数据:1组,初始向量cbc_iv,三把密钥cbc_key,cbc2_key,cbc3_key,明文cbc_data
测试过程:把明文和初始向量进行异或,再进行3des加密,再进行3des解密,再和初始向量进行异或,比较输出和明文。全部一致就成功。
2、ecb方式
测试数据:34组,密钥数据key_data,明文plain_data,密文cipher_data,一组密钥数据产生一把密钥。
测试过程:使用密钥对明文进行des加密,比较输出和密文;再把使用同一密钥进行des解密,比较输出和明文。全部一致就成功。
3、ede ecb方式
测试数据:34组,密钥数据key_data,明文plain_data,密文cipher_ecb2,一组密钥数据产生一把密钥。
测试过程:使用2把密钥,对明文进行3des-ede加密,比较输出和密文;再进行3des-ede解密,比较输出和明文。全部一致就成功。
4、cbc方式
测试数据:1组,初始向量cbc_iv,一把密钥cbc_key,明文cbc_data,密文cbc_ok
测试过程:把明文和初始向量进行异或,再进行des加密,比较输出和密文;再使用同一密钥进行des解密,再和初始向量进行异或,比较输出和明文。全部一致就成功。
5、desx cbc方式
测试数据:1组,初始向量cbc_iv,三把密钥cbc_key,明文cbc_data,密文xcbc_ok
测试过程:把明文和初始向量进行异或,再进行desx加密,比较输出和密文;再进行desx解密,再和初始向量进行异或,比较输出和明文。全部一致就成功。
6、ede cbc方式
测试数据:1组,初始向量cbc_iv,三把密钥cbc_key,明文cbc_data,密文cbc3_ok
测试过程:把明文和初始向量进行异或,再进行3des-ede加密,比较输出和密文;再进行3des-ede解密,再和初始向量进行异或,比较输出和明文。全部一致就成功。
7、pcbc方式
基本同cbc方式,只是进行des加密前的运算方式不同。
8、cfb方式
进行了cfb8、cfb16、cfb32、cfb48、cfb64、ede_cfb64的测试。
9、ofb方式
进行了ofb、ofb64、ede_ofb64的测试。
测试结果:
1、正确性测试:全部通过。
2、速度测试:结果比较稳定,数据如下
2.1、密钥安装:每秒进行298千次,每次耗时3.35us。
2.2、DES-ECB流加密,针对DES基本块:每秒进行353千次,每次耗时2.83us,加密速度2.83M字节/秒。
2.3、DES-CBC块加密,针对1024字节块:每秒进行2.5千次,每次耗时400us,加密速度2.56M字节/秒。
2.4、DES-ED
E-CBC块加密,针对1024字节块:每秒进行0.89千次,每次耗时1120us,加密速度0.91M字节/秒。
 
AES测试
测试数据
来自
http://csrc.nist.gov/ ,一个庞大的测试向量包,其中包含了4种通用块加密模式(ECB、CBC、CFB、OFB),AES的6种测试模式(GFSbox、KeySbox、MCT、MMT、VarKey、VarTxt),以及3种密钥长度(128、192、256bits)的测试向量文件,共4*6*3=72个文件,每个文件含10-100组不等的测试向量。测试主要针对ECB和CBC这2种模式。
测试过程:
1、根据密钥数据,构造加密密钥。
2、对明文进行加密,获得密文,比较密文和已知密文。
3、根据密钥数据,构造解密密钥。
4、对密文进行解密,获得明文,比较明文和已知明文。
5、如果采用了CBC模式,则需要初始向量iv,在加密前使用iv和加密数据作指定运算。
测试注意事项:
1、如果采用了ECB-MMT模式,测试向量给出的明文和密文将超过基本块长度128bits。由于ECB模式下是对固定块加密,而且各块加密是独立的,所以加密时需要将明文分割成固定的128bits块,依次送入加密后,比较时也是按照顺序依次比较128bits密文块数据;反之亦然。如果在CBC模式下,则需要给出加密数据长度。
2、如果采用CBC模式,加密函数会改变送入的初始向量iv。如果不注意这点,解密时送入改变后的iv,则解密会失败。所以需要自己事先保存iv副本,加/解密时送入相同的iv。

测试结果:
1、正确性测试:其中关于MCT的测试向量都失败了,其余的全部通过。
2、速度测试:结果比较稳定,数据如下
对于128位密钥而言
2.1、加密密钥安装:每秒进行368千次,每次耗时2.71us。
2.2、解密密钥安装:每秒进行98千次,每次耗时10.18us。
2.3、AES-ECB块加密,针对AES基本块:每秒进行228千次,每次耗时4.38us,加密速度3.66M字节/秒。
2.4、AES-CBC块加密,针对AES基本块:每秒进行182千次,每次耗时5.50us,加密速度2.91M字节/秒。

你可能感兴趣的:(算法,加密,ssl,测试,解密,initialization)