为了支持https ,所以有必要弄清楚数字签名的概念。
参考阮一峰大神的博文进行学习:
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
1 加密方法
加密方法可以分为两大类。
- 单钥加密(private key cryptography)
- 双钥加密(public key cryptography)
前者的加密和解密过程都用同一套密码,后者的加密和解密过程用的是两套密码。
而我们主要用到的就是第二类
双钥加密的原理如下:
a) 公钥和私钥是一一对应的关系,有一把公钥就必然有一把与之对应的、独一无二的私钥,反之亦成立。
b) 所有的(公钥, 私钥)对都是不同的。
c) 用公钥可以解开私钥加密的信息,反之亦成立。
d) 同时生成公钥和私钥应该相对比较容易,但是从公钥推算出私钥,应该是很困难或者是不可能的。
目前通用的双钥加密算法为RSA
2 数字签名
2.1 双匙加密在消息传输中的使用。
实现两个用户间的加密通信。
公钥用来加密信息,私钥用来数字签名。
2.1.1 公匙加密
用户A 有自己的公匙 私匙,用户A想和用户B 加密通信,所以用户A将自己的公匙给了用户B ,用户B使用用户公匙对传输信息加密,发送给用户,用户A用私匙解密后得到信息,即实现用户B到用户A的加密通信。
这里带来了一个困惑:用户A到用户B的加密传输该怎么处理?
结论:使用用户B的公匙和私匙,把用户B的公匙交给用户A 重复上面的过程。
原因:因为有你的公匙给的可能不止一个人,即用户B,用户C,用户D,都可能有你的公匙,所以不能保证用户A与用户B的加密传输。
2.1.2数字签名(认证身份)
RSA的两个密钥是对称的,随便哪一个加密,可以用另一个解密。所以可以用公钥去验证私钥。这就为该种设计带来一个功能:数字签名。
用户A于用户约定好数字签名的内容(比如摘要),用户A对想要签名的内容(摘要)使用私匙加密得到签名,然后与message一同发送给用户B,用户使用公匙解密签名然后与约定好的签名内容(摘要)进行对比,一致则可以认定用户A身份。(因为用户A的公匙才能解密用户A私匙加密的内容)
2.2 数字证书
上述过程中,如果用户A的公匙被掉包了,即用户B就会和假的用户A通信。
这里就存在一个问题:如何确定公匙真的来自用户A?
用户A可以去找”证书中心”(certificate authority,简称CA),为公钥做认证,证书中心用自己的私钥,对鲍勃的公钥和一些相关信息一起加密,生成”数字证书”(Digital Certificate)。
使用数字证书的流程:
就是用户A 将数字证书给用户B ,用户B使用证书中心的公匙(可以通过网络获取)对数字证书进行解密,成功得到用户A公匙,即可进行下一步。(而不是用户A直接把公匙给用户B),这里就可以确保用户A公匙的合法性。