数字签名与加密解密

有关数字签名与加密解密的文章我看了许多次,基于这样的事实——我总是说服不了自己,所以每次看都看不明白,说服不了自己。最近在看OAuth的相关东西,数字签名与加密解密是绕不开了,干脆静下心来,看看资料,尝试着将自己说服.

1,加密解密基础

简单地讲,计算机加密无非是,用密钥K,对明文P加密,得到密文M:

K(P) = M

解密就是将这个过程反过来:

K(M) = P

对于密钥K,有两种选择方式:对称加密,不对称加密。

2,数字签名

数字签名实际上起到两个作用:1,验证。2,加密。

这里的验证指的是,验证发送消息人的身份,以防伪造者。而加密指的是将明文加密,以防被偷看。

数字签名既可以用"对称加密"来实现,也可以用"不对称加密"来实现。

3,采用对称加密来实现数字签名

说明

  1. 使用对称加密(加密,解密使用相同的密钥)。
  2. 需要第三方仲裁者

资源

角色

步骤

  1. Alice将明文PA经过密钥KA加密,得到密文MA。
  2. Alice将MA传给Trent
  3. 仲裁者Trent用KA解密MA,得到PA
  4. 仲裁者Trent用PA加上Alice的身份证,再加上Trent自己的身份证
  5. Trent将上面的(AliceID+TrentID+PA),经过密钥KB加密,得到MB。
  6. Trent将MB传给Bob
  7. Bob用KB来解密MB,得到PA,Alice的身份证和Trent的身份证

备注

由于在密钥只有Trent知道,在网络上传输的都是密文,所以不怕被偷看。其次,密钥变换过程是Trent完成的,这里Trent是可信的。所以不存在伪造问题。

什么?Alice不承认发过PA,我找Trent说理去。

4,采用不对称加密实现数字签名

说明

  1. 采用不对称加密技术
  2. 用公钥加密的东西,只有私钥能解开,同样用私钥加密的东西,只有公钥能解开
  3. 使用两个密钥对(每个密钥对包含公钥/私钥各一个),不需要第三方仲裁就可以完成数字签名

资源

角色

步骤

  1. Alice先将明文PA用私钥SK-A加密(这一步起到防抵赖的作用,只有Alice有私钥SK-A)
  2. Alice再将上面的结果用公钥VK-B加密(这一步起到加密的作用,只有Bob的私钥SK-B能解开)
  3. Alice将经过上面步骤得到的密文MA,发给Bob
  4. 防不胜防啊,有人想偷看,结果愣是没有看懂(嘿嘿,只有Bob有SK-B这个神器)
  5. 还有人想伪造,好吧,算你狠,你能得到公钥,所以你能产生VK-A(X),VK-B(X)
  6. Bob收到了三个东西:MA,VK-A(X)和VK-B(X)
  7. 先用自己的私钥SK-B(MA)=>SK-A(PA), 然后再用公钥VK-A(SK-A(PA))=>PA,哈哈,Alice来消息了。
  8. VK-A(X),什么东西?先用SK-B试试,啥也看不到嘛!
  9. VK-B(X),啥东西?先用SK-B解开看看,原来是X啊。再用VK-A试试,啥也看不到嘛,肯定不是Alice。(记住VK-A只能解Alice的私钥SK-A加密的内容,别人没有SK-A)

备注

信息在网络上传输都是加密过的,不怕被偷看。

什么?你有VK-A,能看到Alice经过私钥加密的东西,但他妈的Alice每次发送的都是经过VK-B加密过的密文。

由于Alice发送的东西经过自己的私钥SK-A和Bob的公钥VK-B同时加过密,不怕被伪造(没有私钥,咋造啊),不怕被抵赖(只有你Alice才能用SK-A加密,我用VK-A解开的东西,肯定是你Alice发的)。


参考资料:

http://www.ruanyifeng.com/blog/2006/12/notes_on_cryptography.html

http://en.wikipedia.org/wiki/Public-key_cryptography

@ 2011-11-10 08:00

Comments:

Sharing your thoughts: