数字签名
用私钥加密消息即可得到数字签名,用公钥解密签名称为验证签名
只有持有私钥的用户可以生成签名,而由于公钥的公开性,所有用户都可以验证签名
生成数字签名
一般来说,不直接对消息message进行签名,而是对消息的哈希值(message abstract)进行签名。简短地说,是对消息摘要进行签名,步骤如下
-
对消息进行哈希计算,得到哈希值,即摘要
-
利用私钥对哈希值进行加密,生成签名
即 sig = private(hash(message))
验证签名
- 用公钥对签名进行解密,得到哈希值1
- 对消息正文进行哈希计算,得到哈希值2
- 比较哈希值1和哈希值2,如果相同,则验证成功
证书
考虑这样一种场景:我们对签名进行验证时,需要用到公钥。如果公钥也是伪造的,那怎么办?如果公钥是假的,验证数字签名那就无从谈起,根本不可能从数字签名确定对方的合法性
证书实际上就是CA对其他互联网服务机构的公钥进行数字签名,以提供这些机构的公钥合法性证明
这样,当客户端通过https请求服务端时,服务端发回自己的公钥和证书(公钥就是消息正文,证书就是数字签名),客户端用CA的公钥来验证证书(步骤见上文#验证签名),验证通过客户端即信赖服务端
网友评论