明文通信的弊端
- 冒充
- 窃听
- 篡改
flowchart LR id1(A)-- 我是A今晚7点小树林见 -->id2(B) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
冒充:
flowchart LR id3(C)-- 我是A今晚7点小树林见 -->id2(B) style id3 fill:#49a,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
窃听:
flowchart LR TXT(我是A今晚7点小树林见) id1(A) --- TXT -->id2(B) TXT --窃听--> id3(C) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 style id3 fill:#49a,stroke:#333,stroke-width:4px style TXT stroke-width:0
篡改:
flowchart LR TXT(我是A今晚7点小树林见) id1(A) --- TXT --> id2(B) id3 --我是A今晚9点点小湖边见--> TXT TXT --截获--> id3(C) style id1 fill:#f9f,stroke:#333,stroke-width:4px style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5 style id3 fill:#49a,stroke:#333,stroke-width:4px style TXT stroke-width:0
- 对称密钥:指通信的双方使用同一个密钥进行加解密。
- 非对称密钥:成对出现,一个称为公钥,可对外公开。一个称为私钥,仅自己持有。
对称加密
常见对称加密算法:
- DES
- AES
消息认证码的通信机制:
非对称加密
密钥交换/协商
这个过程是很重要的,尤其是对与对称加密算法而言。对称加密要想work,必须使得通信的双方具备同一个密钥,且不能被第三方知晓。要做到这一点,有两条路子:
- 提前(可能是很久之前,具备预见性)在通信的双方使用安全的方法部署好同一个密钥,供后续通信使用;
- 通信前使用安全的方法确定密钥(密钥交换/协商)。
第一种方式显然不太科学,缺乏灵活性和预见性。第二种方式有个依赖:如何才能安全地交换密钥信息呢?
基于加密通道传输密钥
这种就是使用非对称加密算法,发送方使用接收方公钥加密密钥(这是用于后续通信的密钥),然后直接发给接收方,接收方使用私钥解密,这样双方都有了同一个密钥。
基于通信双方共享的密钥
比如PSK算法,双方预先部署若干个共享的密钥,通过密钥编号(明文传输)协商使用哪个密钥。这是一种比较朴素的加密通信,相当少双方持有同一个密码本,然后发送“密文”(密钥编号),双方查询密码本确定明文(后续通信要用的密钥)。其实密钥编号可被中间人获取,但他不知道编号的意义。
see also DH 算法。