密码学基础概论
散列函数
散列函数的特点是单向不可逆、输入数据敏感(细微改动输出变化也很大)、输出长度固定,常用于校验数据的完整性;
常见的散列函数:
- MD5
- 输出散列值的长度固定为128bit
- SHA-1/SHA-256/SHA-384/SHA-512
SHA1输出散列值的长度固定为160bit;SHA256输出散列值的长度固定为256bit;SHA512输出散列值的长度固定为512bit;
散列函数术语:消息摘要、数据哈希
应用:检测文件是否被篡改、口令加密(将口令和盐混合后计算散列值作为密钥)、消息认证码(HMAC,通过在消息中加入共享密钥来生成可认证的散列值)、伪随机数生成器等;
对称加密
对称加密算法的特点是使用相同的密钥对信息进行加密和解密,信息的传输模式是1对1,服务器和N个客户端通信,需要维持N个密钥,密钥的安全是信息安全的基础;
- DES(短时间可破解)
DES是一种将64bit的明文加密成64bit密文的对称加密算法,DES的密钥长度是64bit,但是由于每隔七位设置一位错误校验位,因此实质上其密钥长度是56bit;
DES加密是分组加密的一种,加密时明文以64bit为一组;如果明文较长时,就需要对DES加密进行迭代(反复),迭代的方式又称为模式; - 3DES
3DES是为了增强DES强度,将DES重复3次所得的一种加密算法,明文经过三重DES算法处理才能变为密文,3DES算法的密钥长度为192(3个密钥,每个密钥64bit,64x3);如果使用的三个密钥都不相同,3DES又称3DES-EDE3;
3DES并不是对明文进行三次DES加密,而是加密 -> 解密 - > 加密,其目的是为了兼容DES,当使用的三个密钥都相同时,3DES就相当于普通的DES加密了; - AES
Rijndael加密算法,又称AES,是一种分组密码算法,其分组的长度为128bit(标准,同样也可以按后续规则选择,分组长度和密钥长度可以不相同),密钥的长度可以以32bit为单位,在128bit到256bit的范围内进行选择(规范的密钥长度只有128、192、256三种);
非对称加密
非对称加密算法的特点是密钥是成对出现,一般称为公钥(公开)和私钥(保密),公钥加密的数据只能私钥解开,私钥加密的数据只能公钥解开,服务器只需要维持一个私钥就可以和多个客户端通信;该算法的加密计算复杂,加密速度较慢;
-
RSA
-
ECC
-
DH
ps:非对称加密常用作对称加密的密钥交换
分组密码模式
分组加密算法都只能加密固定长度的明文,如果明文的长度是任意的,那么只能通过分组迭代的方式反复加密,而分组迭代方法就称为分组密码的模式;一旦分组密码模式选择不恰当,攻击者很可能会根据密文中的规律来破解密文;
-
ECB模式(Electronic Code Book 电子密码本模式)
将明文分组直接加密输出密文分组的方式就是ECB模式;
-
CBC模式(Cipher Block Chaining密文分组链接模式)
CBC模式是将前一个密文分组和当前明文分组的内容混合起来进行加密;
CBC模式块与块之间耦合性很强,无法直接对中间某一块加解密,如果密文中某一块数据损坏了,那么后面的内容都无法正确解密;
-
CFB模式(Cipher FeedBack密文反馈模式)
CFB模式是将前一个密文分组再次加密后与本次明文分组内容异或产生本次的密文分组;
由于明文分组和密文分组之间只是进行了一次异或操作,因此明文数据可以被逐比特位加密,我们可以将CFB模式看做是一种使用了分组密码来实现流密码的方式;
CFB的数据块之间依然存在很大的耦合性;
-
OFB模式(Output-Feedback,输出反馈模式)
OFB模式通过对初始化向量多次加密,并且依次将加密输出与明文分组内容异或产生密文分组;
-
CTR模式(CounTeR,计数器模式)
CTR模式通过将逐次累加的计数器进行加密后与明文分组异或后生成密文分组;
加密时会生成一个值来作为计数器的初始值,加密每组数据时该值会逐次累加;
CTR的优点是通过组序号可以以任意顺序处理分组,这就意味着能够实现并行计算;
分组密码是每次只能处理特定长度数据的一类密码算法,无需记录加解密的内部进度;流密码是对数据流进行连续处理的一类密码算法,流密码中一般以1bit、8bit或32bit为单位进行加密和解密,需要记录加解密的内部进度;
密钥配送
当对数据使用对称加密算法加密时,一定会遇到密钥配送的问题,解决密钥配送问题的方法有以下几种;
-
事先共享密钥
配送密钥最简单的一种方式,事先用安全的方法将密钥共享给对方; -
密钥中心分配
通过密钥分配中心来获取通信密钥; -
Diffie-Hellman密钥交换
通信前,通信双方需要交换一些信息,根据交换的信息,双方各自可以生成相同的密钥; -
公钥密钥
使用非对称加密的方式配送密钥,持有加密密钥的一方将密钥加密后,只有持有解密密钥的一方才能解密;
密码学的6个重要工具
-
对称加密
-
非对称加密
-
单向散列函数
-
消息认证码
用于验证消息是否被篡改和验证发送消息人是否被伪装,是一种确认完整性并进行认证的技术,简称MAC;消息认证码的输入可以是任意长度的数据和一个发送者与接收者共享的密钥,它可以输出固定长度的值,这个值被称为MAC值;
消息认证码可以理解为是一种与密钥相关联的单向散列函数;
-
数字签名
数字签名是以非对称加密为基础的一种用于识别消息的篡改和伪装的方式,还可以防止消息发送者否认;消息的发送者使用自己的私钥对发送的消息进行签名,接受者使用公钥解密签名,并验证;
-
伪随机数生成器