密码技术的理解

第一部分:密码学技术

一、对称密码—用相同的密钥进行加解密

(1)分类

AES128、AES192、AES256

(2)密钥配送问题:如何将密钥安全的发送给接收者

  1. 通过实现共享密钥来解决
  2. 通过密钥分配中心来解决
  3. 通过Diffie-Hellman密钥交换来解决
  4. 通过公钥密码来解决

二、公钥密码—公钥加密,私钥解密

(1)种类

RSA、ECC

(2)弱点

处理速度只有对称密钥的几百分之一

(3)公钥密码无法解决的问题

无法判断公钥是否合法,这个问题称为公钥认证问题。

三、单项散列函数—获取消息的指纹

又称消息摘要函数(Message Digest Function)、哈希函数或杂凑函数;散列值也称消息摘要(Message Digest)或者指纹(Fingerprint)。

(1)性质

  1. 定长输出:根据任意长度的消息计算出固定长度的散列质;
  2. 能够快速计算出散列值:计算散列值所花费的时间必须要短;
  3. 抗碰撞性:哪怕只要1比特的改变,也必须有很高的概率产生不同的散列值;
    3.1 强抗碰撞性:要找到散列值相同的两条不同的消息时非常困难的;
    3.2 弱抗碰撞性:给定某条消息的散列值时,要找到和该条消息相同的散列值的另一条消息是非常困难的;
  4. 单向性:无法通过散列值反算出原始消息;

(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. 对第三方证明
  2. 防止否认

五、数字签名—消息到底是谁写的

(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)不可否认性

数字签名

你可能感兴趣的:(密码技术的理解)