第一部分:密码学技术
一、对称密码—用相同的密钥进行加解密
(1)分类
AES128、AES192、AES256
(2)密钥配送问题:如何将密钥安全的发送给接收者
- 通过实现共享密钥来解决
- 通过密钥分配中心来解决
- 通过Diffie-Hellman密钥交换来解决
- 通过公钥密码来解决
二、公钥密码—公钥加密,私钥解密
(1)种类
RSA、ECC
(2)弱点
处理速度只有对称密钥的几百分之一
(3)公钥密码无法解决的问题
无法判断公钥是否合法,这个问题称为公钥认证问题。
三、单项散列函数—获取消息的指纹
又称消息摘要函数(Message Digest Function)、哈希函数或杂凑函数;散列值也称消息摘要(Message Digest)或者指纹(Fingerprint)。
(1)性质
- 定长输出:根据任意长度的消息计算出固定长度的散列质;
- 能够快速计算出散列值:计算散列值所花费的时间必须要短;
- 抗碰撞性:哪怕只要1比特的改变,也必须有很高的概率产生不同的散列值;
3.1 强抗碰撞性:要找到散列值相同的两条不同的消息时非常困难的;
3.2 弱抗碰撞性:给定某条消息的散列值时,要找到和该条消息相同的散列值的另一条消息是非常困难的; - 单向性:无法通过散列值反算出原始消息;
(2)种类
MD5
SHA-1、SHA-256、SHA-384、SHA-512
RIPEMD-160
AHS(Advanced Hash Standard)和SHA-3
(3)单向散列函数无法解决的问题
可以防篡改(确保完整性或一致性),但是无法辨别出“伪装”(无法认证),即无法确认消息来自正确的发送者,还是经第三方攻击者发出的。
四、消息认证码—消息被正确发送了吗
(1)理解:
消息认证码是一种与密钥相关的单向散列函数。
(消息, 共享密钥) -> (MAC值)
(2)实现方法:
HMAC,例如HMAC-SHA1,HMAC-MD5,HMAC-SHA256.
(3)消息认证码无法解决的问题
- 对第三方证明
- 防止否认
五、数字签名—消息到底是谁写的
(1)包含
消息摘要算法
签名算法:RSA和ECDSA,私钥加密,公钥解密。
(2)性质:
防篡改、防伪装、防止否认
(3)实际应用
先针对明文应用消息摘要算法生成散列值,然后应用签名算法进行加密生成签名信息。然后,将签名信息随明文一起发送出去。
(4)数字签名无法解决的问题:
无法保证公钥真正属于发送者。
现在我们发现自己陷入了一个死循环——数字签名时用来识别消息篡改、伪装以及否认的,但是我们必须从没有被伪装的发送者得到没有被篡改的公钥才行。
为此,我们需要使用证书。
五、证书——为公钥加上数字签名
六、随机数生成算法
第二部分:密码学所面临的威胁:
(1)机密性:
依靠加密算法保障,例如AES-128-CBC;
加密算法可以保证机密性,但无法保证完整性。攻击者没有密钥,虽然无法破解数据,但是可以修改密文的部分数据,然后发送给接收方。接收方通过密钥发现可以解密,但是解出来的实际已不是原文,即消息已被篡改过。
(2)完整性:
消息验证码(Message Authentication Code,MAC)算法。MAC算法有两种形式,分别是:CMC-MAC算法和HMAC算法。例如HMAC-SHA256。
通信双方需维护一个密钥,只有拥有了密钥的双方才能生成和验证MAC值。
(3)机密性+完整性
提供机密性和完整性的模式叫做Authentication Encryption(AE)模式,主要有:
1)Encrypt-and-MAC
2)MAC-then-Encrypt,HTTPS一般使用这种模式进行处理,例如AES-128-CBC#PKCS7-HMAC-SHA256;
3)Encrypt-then-MAC,这种是比2更安全的模式。
AEAD加密模式
AEAD(Authentication Encryption with Associated Data)模式在底层组合了加密算法和MAC算法,能够同时保证数据机密性和完整性。AEAD的作用类似Encrypt-then-MAC。
主要有三种模式:
1)CCM模式
2)GCM模式,例如AES128-GCM,AES256-GCM;
3)ChaCha20-Poly1305
(4)认证
(5)不可否认性
数字签名
网友评论