一、密码学的起源
密码学的出现主要是因为战争,有了战争,就有了密码学的应用环境。在战争中,对阵双方要保护自己的通信安全并窃取、破译对方的情报,就出现了密码学。
为了保证通信的安全,出现了下面3种保密方法:
1、对传递的数据进行加密,使用的方法包括:对称加密算法、非对称加密算法。
2、虽然对数据进行了加密,但是会存在加密的数据被破坏的情况,因此使用散列函数来验证数据的完整性。通过散列函数,可以为数据创建一个散列值,散列值通常是一个短的随机字母和数字组成的字符串,收发双方提前约定要使用的散列算法,如果消息被篡改,数据前后所得的散列值就会不同。散列函数常用的算法有MD--消息摘要算法,SHA--安全散列算法、MAC--消息认证码算法。
3、除此之外还需要保证数据来源的可认证性和数据发送行为的不可否认性,就需要通过数字签名来保证,数字签名可以保证签名者任何时候都无法否认自己曾经签发的数字签名,信息接受者能够验证和确认收到的数字签名,但任何人无法伪造发送者的数字签名,当收发双方对数字签名真伪产生争议时,可进行仲裁。数字签名使用非对称密码体制,签名算法受私钥控制,由签名者保密,验证算法受公钥控制,对外公开,也就是说私钥用于签名,公钥用于验证。常用的数字签名算法有:RSA(即可用于非对称加密算法,也可用于签名算法)、DSA(属于非对称加密算法但不具备数据加解密功能)
Tips:
双向认证:
甲方用私钥对数据做签名发送给乙方,数据是可以保证安全的,但是如果乙方想发送消息给甲方,由于公钥,算法都是公开的,窃听者可以截获乙方的消息替换成自己的,而甲方无法辨别消息是否来源于乙方,也就是说上述的认证消息是单向的,属于单向认证。如果有两套公私钥,甲乙双方都对数据做签名及验证就可以避免这个问题,这就是双向认证。
二、密码学分类
1、按时间划分
A、古典密码:以字符为基本加密单元,通过移位(也称错位,将字符的顺序重新排列,如:将“12345”变为“32165”),替代(也称置换,将明文中的一组字符替代成其他字符,如:将“encryption”变为“fodszqujpo”每个字母用下一个字母替代)达到加密的目的。
B、现代密码:以信息块为基本加密单元
2、按保密内容划分
A、受限制算法:算法的保密性给予保持算法的秘密,算法由专业机构开发,验证,确保其算法的安全性,是古典密码学的主要特征。
B、基于密钥算法:算法的保密性基于对密钥的保密。这样做的好处是:算法的公开有助于算法安全性的验证,算法的漏洞得以及时修正,避免留下后面,这是先打密码学的主要特征。
3、按密码体制划分
A、对称密码体制(单钥密码体制/私钥密码体制):加密与解密的密钥相同,即加密与解密的过程中使用同一套密钥。
B、非对称密码体制(双钥密码体制/公钥密码体制):加密与解密的密钥不同,分为公钥与私钥,公钥对外公开,私钥对外保密。
这两种密码体制对应的算法为对称密码算法和非对称密码算法。
A、对称密码算法(单钥密码算法/私钥密码算法):DES,AES
B、非对称密码算法(双钥密码算法/公钥密码算法):RSA,这种算法有更高的安全性,但是加密解密的耗时较长。
4、按明文的处理方法划分
A、分组密码:加密时将明文分成固定长度的租,用同一密钥和算法对每一块加密,输出的也是固定长度的密文,多用于网络加密。分组长度越长,密码分析越困难,分组长度越短,操作运算越简单。代表算法:DES,AES。
分组密码工作模式:
1)电子密码本模式--ECB:是最基本、最易理解的工作模式。每次加密均产生独立的密文分组,每组的加密结果不影响其他分组,相同明文加密后产生相同密文。适用于加密密钥,随机数等短数据。(如果密文较长,重复的内容较多,则密文也会重复,密文容易被篡改)
2)密文链接模式--CBC:应用最广泛。明文加密前先与前面的密文进行异或再加密,因此只要选择不同的初始向量,相同的明文加密后产生的密文也不相同。但如果在加密过程中发生错误,则错误会被无限放大,最终导致加密失败。适用于检车数据完整性的消息认证码MAC。
3)密文反馈模式--CFB:初始化一个向量,加密后与第一个分组进行异或产生第一组密文,之后对第一组密文加密后再与第二个分组进行异或取得第二组密文,以此类推。这种作法,即使明文相同,产生的密文也不同,但也会误差传递。用于检查发现明文密文的篡改。
4)输出反馈模式--OFB:与CFB类似,无误差传送问题,对明文的主动攻击是可能的,安全性较CFB差,适用于加密冗余性较大的数据,如语音和图像。
B、流密码(序列密码):加密时每次加密一位或一个字节的明文,对系统资源要求极低,常用于手机应用平台,它的实现简单,便于硬件技术,加解密速度快,错误传播率低,但对错误的产生不够敏感。常用算法有RC4,SEAL。
流密码分为:
1)同步流密码:信息在发送和接收时,同步进行加解密操作,明文与密文一一对应,密文内容如果被篡改,会导致同步失败,则密文解密失败。同步流密码的重要特点就是,如果一个密文位发生变化,只会影响这一位密文的恢复,对后续密文无影响。这样也会导致攻击者选择性的对密文进行改动,因此同步流密码具有同步性、无错误传递性、主动攻击性三种特征。适用于对音频、视频提供版权保护。
2)自同步流密码:是一种由记忆变换的密码,每个密钥与已产生的固定数量的密文位有关,密钥由已生成的密文决定。如果一个密文位发生变化,这个变化会影响后续有限位(如n位)的密文位的正确解密。所以,自同步流密码有错误传递的现象。但是,在接收了n为正确密文字符后,密码自身又会实现重新同步。自同步流密码的密码分析更困难,安全性更高。有自同步性,错误传递有限性,主动攻击性及明文统计扩散性四种特征。
三、算法介绍
1、Base64
Base64是一种基于64个字符的编码算法,是一种以任意8位字节序列组合的描述形式,这种形式不易被人直接识别。Base64算法的转换类似于古典加密算法中的电表置换算法,通过一个字符映射表对原数据进行转换。经过Base64编码后的数据会比原始数据略长,为原来的4/3倍,经过Base64编码后的字符串的字符数是以4位单位的整数倍。如果编码后的字符数不足4的整数倍,需要补位,Base64的字符映射表中用于补位的符号是“=”,因此看到字符串末尾有等号,就会联想到Base64的算法。
Base64算法的编码、解码操作可以作为加解密操作,字符映射表可以作为密钥,为什么他不能叫做加密算法呢?因为Base64的算法公开没有问题,但是充当密钥的字符映射表也公开了,相当于把密钥进行公开了,自然无法作为加密算法了,而且Base64算法的加密强度并不高。虽然Base64不能作为加密算法,但他常作为密钥、密文、证书的一种通用存储编码格式,与加密算法形影不离。
2、消息摘要算法(验证数据完整性)
散列函数的单向性(通过散列函数可以获得对应的散列值,但不可通过该散列值反推其原始信息)使其能够用于校验数据的完整性,任何消息经过散列函数处理后,都会获得唯一的散列值,这一过程称为“消息摘要”,其散列值称为“数字指纹”,其算法称为“消息摘要算法”。数字签名是使用消息摘要算法获得数字指纹。
消息摘要算法主要分为三大类:MD(Message Digest,消息摘要算法)、SHA(Secure Hash Algorithm,安全散列算法)和MAC(Message Authentication Code,消息认证码算法)
A、MD算法家族
MD5是典型的消息摘要算法,其前身有MD2,MD3,MD4,它由MD4,MD3,MD2算法改进而来。这种算法需要获得一个随机长度的信息,并产生一个128位的信息摘要,并将这个128位的二进制摘要信息换算成十六进制,就得到一个32位的字符串,所以大部分MD5算法的数字指纹都是32位的十六进制字符串。
B、SHA算法家族
SHA算法家族有SHA-1,SHA-224,SHA-256,SHA-384,SHA-512(通常将后四种算法称为SHA-2算法)。SHA算法是在MD4算法基础上演进而来,通过SHA算法能获得一个固定长度的摘要信息,但若输入的消息不同,则与其相对应的摘要信息的差异概率很高,因此要找到两组不同的信息对应相同的消息摘要,从理论上来说很困难。与MD算法相比,摘要长度更长,安全性更高。
C、MAC算法家族
MAC算法结合了MD5和SHA算法的优势,并加入密钥的之处,是一种更为安全的消息摘要算法。
3、循环冗余校验(奇偶校验码)算法--CRC算法
CRC(Cyclic Redundancy Check,循环冗余校验)是可以根据数据产生简短固定位数的一种散列函数,主要用于检测/校验数据传输/保存后出现的错误。生成的散列值在传输或存储之前计算出来并附加到数据后面,在使用数据之前,对数据的完整性做校验。一般来说,循环冗余校验的值都是32位的二进制数,以8位十六进制字符串形式表示。他编码解码方法简单,检错纠错能力强,在通信领域广泛用于实现差错控制。
CRC算法与消息摘要算法一样,属于散列函数,但他并不属于加密算法。
4、对称加密算法
对称加密算法,解密算法是加密算法的逆运算,加密密钥和解密密钥相同。对称加密算法易于理解,便于实现,根据加密方式分为密码和分组密码,分组密码又有几种工作模式:ECB,CBC,CFB,OFB,CTR等,密钥长度决定了加密算法的安全性。
Java6中提供了DES,DESede,AES,Blowfish,RC2,RC4算法,其中DES是对称加密算法的代表,DESede是DES算法的变种,AES算法是DES的替代者。
5、非对称加密算法
非对称加密算法与对称加密算法的主要区别在于,非对称加密算法用于加密和解密的密钥不同,一个公开,称为公钥,一个保密,称为私钥。这种双钥体系更为安全,但他的加解密速度要远远慢于对称加密,在某些极端的情况下,会比非对称加密慢1000倍。
非对称加密的公钥公开,通过非安全通道发放,私钥保密,由发放者保留,公钥私钥互相对应,成对出现,公钥加密的数据,只能用私钥解密,反之亦可。这样密钥的管理就不是问题了,安全性大大保证。非对称加密算法一般应用在对安全性要求相当高的领域,如电子商务平台。
Tips:
由于非对称加密算法效率低,所以一般讲对称和非对称加密算法结合使用,使用对称加密算法为数据加解密,而使用非对称加密算法为对称加密算法的密钥进行加解密。因为非对称加密算法对待加密数据的长度有极为苛刻 要求,如RSA算法要求待加密数据不得大于53个字节,因此非对称加密算法主要用于交换对称加密算法的密钥,而非数据。
非对称加密算法最重要的实现就是RSA算法。
通过RSA形成了DSA算法,DSA和RSA都是数字证书中不可或缺的两种算法,但DSA值包含数字签名算法,使用DSA算法的数字证书无法进行加密通信,而RSA算法既包含加解密算法,又包含数字签名算法。可以认为DSA是RSA数字签名算法实现的简装版。
四、应用--数字证书
数字证书用于标识网络中用户的身份,数字证书有认证机构(Certificate Authority,CA)签发,证书的签发是对申请数字证书的公钥做数字签名,证书的验证是对数字证书的公钥做验证签名,有效期验证。
数字证书使用相应的加密算法保证了网络应用的安全性
1、非对称加密算法对数据进行加解密操作,保证数据的机密性
2、数字签名算法对数据进行签名验证操作,保证数据的完整性和抗否认性
3、消息摘要算法对数字证书本身做摘要处理,保证数字证书的完整性
五、总结