0%

(迁移)什么是数字签名

早期在新浪博客的一篇翻译文章,迁移到这里,文章写于:2011-12-18 20:46:00

这还是人生第一次翻译外国的文章哩。11年,啊,好遥远啊,才过了6年就已经物是人非了。

正文

突然看到JAVAEYE上的一篇文章是说数字签名的,有图有文字,很有兴趣。看到原文出处是英文,而翻译的文章却不是完全翻译原文的意思,所以尝试着翻译了一下,顺便了解一下。

cover

Bob有两把钥匙,一把称为公钥,一把称为私钥。

cover

Bob的公钥可以提供给任何需要的人,但他会保留自己的私钥。钥匙用来加密信息,加密信息的意思是把信息打乱,这样只有拥有正确钥匙的人才能使加密的信息成为可读的。Bob的两把钥匙都可以用来加密,并且对应的另一把钥匙用来解密数据。

Susan可以使用Bob的公钥加密一段消息,Bob使用他的私钥可以对消息进行解密。任何一个Bob的同事可以接触到Susan加密的信息,但如果没有Bob的私钥,那这些数据就是没意义的。

cover

使用私钥和正确的软件,Bob可以对文档或者其他数据使用数字签名。数字签名就是Bob放置在数据上的独一无二的而且很难被伪造的标记。此外,签名可以保证任何对已经被签名的数据进行的修改都是可以被发现的。

cover

对一个文档进行签名,Bob的软件会通过一个叫”hashing”的过程压缩数据成只有很少的几行。这很少的几行称为消息摘要。(不可能从信息摘要来还原成原始的数据)

cover

同时Bob的软件使用私钥对消息摘要进行加密。结果就是数据签名。

cover

最后,Bob的软件在文档的的结尾附上数字签名。所有被”散列化”的数据都被签名了。

cover

Bob现在传递文档给Pat。

一开始,Pat的软件使用Bob的公钥解密签名将数据换回成消息摘要。如果这个处理好了,那么证明Bob对这份文档进行了签名,因为只有Bob有他的私钥。然后Pat的软件对文档数据散列化成消息摘要。

如果这个消息摘要和签名被加密时的消息摘要是一致的,那么Pat就知道被签名的数据没有被修改过。

Doug(我们充满了不满的员工)希望去欺骗Pat。Doug肯定Pat收到了一份被签名的数据以及一把好像属是于Bob的公钥。Pat不知道的是,Doug使用Bob的名义寄了配对密码钥匙给她。不是收到Bob亲自送的公钥,那么Pat怎么肯定所谓的Bob的公钥是可信的?

碰巧的是Susan在一家证书认证中心工作。Susan可以简单的对Bob的公钥以及一些Bob的信息进行签名来为Bob创建一个电子证书。

cover

现在Bob的同事可以检查Bob可信的证书来确定那把所谓的公钥就是他的。事实上,在Bob的公司没有人会接受一个不包含Susan生成的证书的签名。并且这给了Susan权利当私钥无效时或者不需要时去取消证书。
甚至有更多被人接受的证书中心可以去证明Susan。

让我们假设Bob给了Pat一份文档。为了证明这份文档上的签名,Pat的软件首先使用Susan(证书中心)的公钥去检查Bob证书上的签名。

成功的加解密证明是Susan创建的。证书被解密之后,Pat的软件可以检查Bob在证书中心的情况是否良好并且所有证书中心关于Bob的信息没有被改变。

Pat的软件于是使用从证书中心取得的Bob的公钥去检查Bob的签名。如果Bob的公钥解密成功,那么Pat就可以肯定签名是使用Bob的私钥生成的。

因为Susan已经使用对应的公钥去进行了证明。当然了,如果前面是有效的,那么我们就可以知道Doug没有试着去改变被签名的内容。

尽管这些步骤听起来可能很复杂,但他们都通过隐藏在幕后的友好的软件进行处理。为了验证一个签名,Pat仅仅只需要敲击一下按键。

参考资料

  1. http://www.youdzone.com/signature.html