一、举个例子
1、发消息
用对方的公钥给对方发信息
1.小明想秘密给小英发送消息
2.小英手里有一个盒子( public key),这个盒子只有小英手里的钥匙( private key)才打得开
3.小英把盒子送给小明(分发公钥)
4.小明写好灣息放进盒子里,锁上盒子(公钥加密)
5.小明把盒子寄给小英(密文传输)
6.小英用手里的钥匙打开盒子,得到小明的消思(私钥解密)
7.假设小刚劫持了盒子,因为没有小英的钥匙,他也打不开
2、发公告
发公告的时候,用自己的私钥形成签名
其实公钥和私钥都可以用来加密或解密--只要能保证用A加密,就用B解密就行。至于A是公钥还是私钥,其实可以根据不同的用途而定。
例如说,如果你想把某个消息秘密的发给某人,那你就可以用他的公钥加密。因为只有他知道他的私钥,所以这消息也就只有他本人能解开,于是你就达到了你的目的。
但是如果你想发布一个公告,需要一个手段来证明这确实是你本人发的,而不是其他人冒名顶替的。那你可以在你的公告开头或者结尾上一段用你的私钥加密的内容(例如说就是你公告正文的一段话),那所有其他人都可以用你的公钥来解密,看看解出来的內容是不是相符的。如果是的话,那就说明这公告确实是你发的-因为只有你的公钥才能解开你的私钥加密的内容,而其他人是拿不到你的私钥的。
最后再说一下数字签名。
数字签名无非就两个目的:
证明这消息是你发的;
证明这消息内容确实是完整的-也就是没有经过任何形式的篡改(包括替换、缺少、新增)。
其实,上面关于公告那段内容,已经证明了第一点:证明这消息是你发的。
那么要做到第二点,也很简单,就是把你公告的原文做一次哈希(md5者sha1都行),然后用你的私钥加密这段哈希作为签名,并一起公布出去。当別人收到你的公告时,他可以用你的公钥解密你的签名,如解密成功,并且解密出来的哈希值确实和你的公告原文一致,那么他就证明了两点:这消息确实是你发的,而且内容是完整的。
二、加密和签名
RSA的公钥、私钥是互相对应的,RSA会生成两个密钥,你可以把任何一个用于公钥,然后另一个就是你必须保护好的私钥了。
RSA的公钥、私钥都可以加密,也都可以解密。
其中:
· 用公钥加密需要私钥解密,称为“加密”。由于私钥是不公开的,确保了内容的保密,没有私钥无法获得内容;
· 用私钥加密需要公钥解密,称为“签名”。由于公钥是公开的,任何人都可以解密内容,但只能用发布者的公钥解密,验证了内容是该发布者发出的。
所以:
· 如果用于加密解密,那就是用公钥加密私钥解密(仅你可读但别人不可读,任何人都可写)
· 如果用于证书验证,那就是用私钥加密公钥解密(仅你可写但别人不可写,任何人都可读)
三、认证过程
RSA公钥与私钥主要用于数字签名( Digital Signature)与认证(Authentication),我们一般也称之为不对称加密/解密。
什么是认证( Authentication)?
认证是安全通信的前提,如果认证出问题,A不是和A想要聊天的人B在聊天,而是和一个C(假冒B)在聊天,则接下来所有的安全措施都是白搭。以目前常用的数字证书(Digital Certificate)认证为例。
CA(CertificateAgent)存放A、B数字证书,在数字证书里包含有各自的RSA公钥与加空算法A、B各自保管自己的RSA私钥与加を篁法,RSA公钥与私拥美似锁与钥匙的关系。即RSAA期加密,可以用RSA公钥解密,反过来亦是如此。
A与B安全通信认证过程:
1. A向CA请求B的数字证书
2.1 CA把B的数字证书做输入参数,生成一个Hash
2.2 CA用自己的私钥加容Hash,生成一个数字签名( Digital Signature)
2.3 CA把数字签名附在B的数字证书之后,即B的数字证书+CA数字签名,发给A
3.A拥有CA的公钥(预装戦者离线方式获得),可以解密CA的数字签名(CA私钥加密),得到Hash,同时对接收到的B的数字让书做Hash运算,也得到一个Hash,如果两个Hash相等,则认为此证书安全可靠,在传输途中没有被算改,我们称这个过程为数据完整性(Data Integrity)保
4.A请求认证B,B用自己的私钥加密自己的身份信息,发送给A,由于A已经从CA处获得B的公期,所以可以解密B的加密报文。既然公钥与私是一对一的关系,由于只有B自己知道私钥,以此逻辑推,A通信的对象为真实的B。
5.B认证A的过程类似。
作者:高传集
职务:云服务集团云计算产品中心首席架构师
专业领域:云计算
专家简介:2006年加入金山,负责PaaS产品服务的研发。致力于打造一套高性能、可弹性扩展的PaaS产品服务,帮助用户在云原生时代更好的构建、交付、管理自己的应用平台。