加密算法,数字签名与数字证书
加密算法,数字签名与数字证书
明文与密文的关系

缩写解释
缩写 | 解释 |
---|---|
P | 明文 |
C | 密文 |
KE | 加密 key |
KD | 解密 key |
E | 加密算法 |
D | 解密算法 |
H | 哈希函数 |
加密算法
对称加密
满足的条件:
KE == KD
优点: 对称加密效率高, 加密解密的计算量是可控的.
缺点: 发送则和接收者必须都拥有密钥, 为了把密钥给另一个人, 他们甚至不得不物理意义上的碰面
Secret-key systems are efficient because the amount of computation required to encrypt or decrypt a message is manageable, but they have a big drawback: the sender and receiver must both be in possession of the shared secret key. They may even have to get together physically for one to give it to the other.
非对称加密
在非对称加密中:
KE 一般称为公钥 public key
KD 一般称为密钥 private key
满足的条件:
KE != KD
缺点: 非对称加密比对称加密慢千倍
数字签名
使用非对称加密算法,且加密算法需要满足一个特性:
E (D (x)) = x
所有的非对称加密算法都满足 D (E (x)) = x ,但只有部分满足 E (D (x)) = x ,RSA算法是其中一个。

工作流程
文档发送者生成公钥和密钥, 将自己的公钥公布
发送者:
- 对文档进行hash生成hash串
- 使用密钥解密hash串生成解密串
- 将解密串作为签名块附在文档上
接收者:
- 使用发送者的公钥加密签名块得到hash串h1
- 对文档进行hash生成hash串h2
- 对比h1与h2是否相同,不相同则说明文档的完整性被破坏,文档已经被篡改
数字证书
为了使用数字签名,接受者必须知道发送者的公钥.一些使用则将他们的公钥发布在网页上,另一些则不,因为他们担心侵入者闯入秘密的修改掉他们的公钥.
一个通常的做法是消息发送者在消息上附上一个数字证书, 数字证书上有发送者的名字和公钥, 数字证书由可信第三发签发.
一旦接收者获取到了可信第三方的公钥,他就能接受所有从该可信第三发签发数字证书的发送者的数字证书(好绕)
(Once the user has acquired the public key of the trusted third party, he can accept certificates from all senders who use this trusted third party to generate their certificates)
获取
可信的第三方被称为CA(Certification Authority). 虽然如此一个用户要验证由CA签发的数字证书,他必须要有该CA的公钥.
这里就有一个问题: CA的公钥从哪儿获取, 获取之后用户如何知道是真的的公钥 ?
这又是一个先有蛋还是现有鸡的问题: 为了保证发送者的公钥没有被篡改,需要CA签发的数字证书,为了保证数字证书没有被篡改又需要CA的公钥,为了保证CA的公钥没有被篡改?
这就引入了一个新的事物 PKI(Public key Infrastructure),这里就不谈这个了.
对于游览器来说这个问题已解决: 所有的游览器内置了绝大部分知名CA的公钥.