http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 标题:数字证书原理
这篇文章写的非常清楚,因为怕错过,所以特此记录一下
下面是我自己的理解:
a.公钥和私钥是用某种算法同时生成的,它们总是成对的出现,公钥是可以随意公开的,即使全世界都知道了也没有关系,但私钥必须自己保存。
b.用公钥加密的信息有且仅有对应的私钥可以解密,用私钥加密的信息有且仅有对应的公钥可以解密。
c.公钥用来加密,私钥用来解密;私钥用来签名,公钥用来验证签名。
d.对称加密就是加密的密码和解密的密码是一样的,就和WINRAR加密的压缩包一样,非对称加密就是加密的密码和解密的密码不一样,就好像你用一个密码加密WINRAR压缩包,但解密的时候用的是另外一个密码,很神奇有没有。
假设A有一个公钥和私钥,B有一个公钥和私钥。
现在A想给B发送消息,可能的方法有以下几种方法:
1.A把信息用A的公钥加密,A把信息发送给B,由于B没有A的私钥不能解密信息所以这种是不行的。
2.A把信息用B的公钥加密,A把信息发送给B,B用自己的私钥解密信息。可行,虽然信息传递的过程中黑客可以获得密文,但这个过程中不可能获得B的私钥,所以解密不了信息。
3.A把信息用A的私钥加密,A把信息发送给B,B用A的公钥解密,也行,但不太安全,因为A把信息发送给B的过程中,如果黑客截取到了密文,而A的公钥又是大家知道的,所以黑客就获得了信息,这样信息就泄露了加密也就没有了意义,我们加密不就是不希望别人看到信息或者篡改信息吗?
4.A把信息用B的私钥加密? A没有可能拿到B的私钥,所以这种方法行不通。
仔细看一下3,这种方法虽然可能会泄露信息,但是却可以用来验证身份的,A把信息用A的私钥加密,又因为用私钥加密的信息有且仅有对应的公钥可以解密,所以只要有人能用A的公钥解密信息,那就说明了这个信息是用A的私钥加密的,不管是B用A的公钥解密的还是黑客用A的公钥解密的。这个过程中可能会泄露信息怎么办? 很简单,验证身份的过程我们传递的是不怕别人看到的数据,比如随机生成的100个字符串,爱怎么泄露怎么泄露,完全没有关系。 而要传递敏感信息我们就不用A的私钥加密信息了,应该用B的公钥加密。
总结一下就是:
A用B的公钥加密,B用自己的私钥解密,这是加密与解密。
A用A的私钥加密,B用A的公钥解密,这是数字签名与身份验证,密文就叫数字签名,B能解密A的密文,所以验证了A就是A,这叫身份验证。
有了数字签名与身份验证之后,上面A与B通信的过程就得改一改了。
A:我想和你通信
B:我想验证你的身份,请证明你是A。
A :这是我用我的私钥加密过的一段信息,618B0A8DD5F2F002。
B:我用你的公钥可以解密密文,证明你就是A。
A:我也想验证你的身份,请证明你是B
B:这是我用我的私钥加密过的一段信息,C56087F5B0FB776CE。
A:我用你的公钥可以解密密文,证明你就是B。
B:好的,现在我们可以通信了。
A:好的。我用你的公钥加密了一段信息,5A74FE78157A930C3B3D70170D6C50F45,啥意思你懂的蛤。
B:我用我的私钥解密了你刚才的那段信息,你的意思我都明白,可是明天真不行。我又用你的公钥加密了一段信息,647DF7010956AEA85ABEFCB413328808,你看这样行不行。
A:我用我的私钥解密了刚才的信息,好吧,那就这样。
B;嗯,好。