既然非对称加密如此强大(为什么非对称加密难以破解?),那在安全上还有没有逻辑漏洞呢?
非对称加密的实现过程如下:接收方生成一对公钥和私钥,将公钥交付发送方,发送方用该公钥对明文进行加密,然后密文发送给接收方,接收方用自己的私钥解密。这个过程对(加密的)数据几乎是万无一失的,但是它没有办法验证发送方的身份(公钥可以随意分发),也难以确保信息的完整性,于是有了“数字签名”。
数字签名是为了证明信息是自己发的,一可防止别人冒用本人身份,二可防抵赖。比如在金融场景中,我们在网银转账,站在银行的角度,为了防止账号被盗刷,它必须有机制让转账者不可抵赖。
数字签名有两部分:(1)证明这信息是你发的;(2)证明信息内容是完整的,没有替换、新增、缺失。
要做到第一点,只需附上一段经你的私钥加密的信息(比如消息文摘),当所有人用你的公钥解密,这一段文摘与原文相符,即说明消息确是你本人发送,因为其他人不可能拿到你的私钥。
第二点则需要把原文做一次哈希,然后用你的私钥加密这段哈希作为签名,随同密文一起发送。接收者使用你的公钥解密签名,与原文相符,就证明内容是完整的。
但是这样依然存在公钥被替换的可能,所以又有了公钥证书体制:数字证书。CA中心(Certificate Authority)用自己的私钥,对信息发送者的公钥和相关信息一起加密,生成"数字证书"(Digital Certificate)。
来一个简单的总结: