非对称算法,散列(Hash)以及证书的那些事

转载请注明出处

http://blog.csdn.net/pony_maggie/article/details/35389657


作者:小马



这几个概念在金融电子支付领域用得比較多,我忽然认为把它们串起来一起讲,层层引入,可能更好理解一些。希望能以最简单朴实的方式讲明确他们之间的关系。

一非对称算法

关于非对称算法,你仅仅要知道以下这些即可了。密钥是一对,一个叫公钥。一个叫私钥,前者公开,后者保密。如果你有一对公私钥。给你一串数据。你能够用私钥加密,然后把密文和公钥都放出去,别人能够用这个公钥解密。

相同反过来,别人也能够用这个公钥加密一串数据,你用相应的私钥解密。能够用下图来表示:




二 散列

散列也叫哈希。学过数据结构的人对这个概念都不陌生。简单来讲。给你一串数据A。这个数据能够非常长,你通过一个算法把它们转变成一个非常短的固定长度(无论源串有多长)的还有一串数据B。这个过程就叫散列,数据B叫数据A的散列值(或者叫哈希值,或者叫摘要)。

再深入一些。

大部分情况下。A和B是一一相应的(这也是我们希望的),也就是说,假设我还有个A1,那么它的散列值B1和B不会相等。可是理想丰满,现实让人反感,B1有可能和B相等。这样的现象有个学名叫”碰撞”,添加散列值的位数是防碰撞的一个方法。由于非常自然位数越长,全然同样的概率就越小。眼下觉得超过128位的散列值都能非常好的防碰撞。

后面我们讲到签名时,假定是没有碰撞的。

最后再补充一点。散列具有不可逆性,也就是你没法从B还原回A,即使散列算法是公开的。

三数字签名

 生活中我们用签名代表自己的身份,比方领导签署一个文件,大家看到这个签名。就确认是这个领导签的,就代表他本人。

签名仅仅占用非常小的信息(通常是两个字或三个字,日本人的可能长一些),却能表示你整个人的信息,这样的思想确实意义非常大,我们把它用在电子化的签名过程,也就是数字签名

数字签名的过程是这种,比方小明有一串数据A要发给小红,小明先用散列生成一个A的摘要B。然后把B用一个私钥加密后附在A的后面发给小红,小红有公钥(由于是公开的),她先用这个公钥解密A后面的数据得到B。然后自己把A散列一些算出一个B1, 比較B1和B假设相等,首先能说明数据是小明发过来的。由于仅仅有小明才有私钥,其次能说明A在传输过程中没有被改过,由于假设改动过。散列值肯定不相等。上述过程能够用下图说明:

 

可能有有会有问题,数据A似乎没有加密?,确实是这样,由于这个不是小红所关心的,小红仅仅关心这个数据是不是小明发的。数据的内容没那么重要。事实上也不难理解。就跟你去超市刷卡购物一样。小票须要你签字作为对账的凭证,人们仅仅关心这个签名是不是你本人的,对于小票的内容没这么关心。

四证书

细致想想上面的验证签名的过程,似乎天衣无缝。但事实上有个问题。小红的公钥是哪来的?有人说这个不是公开的吗。随便哪都能够,能够是问别人要的,能够是网上找的。事实上不然。验签的前提,是小红已经如果她手上的公钥和小明的私钥是一对的。如果小王生成一对非法的公私钥对,然后给小红公钥,给她说这是小明的,就会产生问题了。

所以小红要有明白的途径确认她的公钥是合法的。


打个例如,一个人站在你面前,你没法推断他是好人还是坏人,可是假设法院告诉你这个人是杀人犯,你肯定会选择相信。由于法院是权威机构。相同的。对于公钥这种”公开的敏感信息”,也须要一个权威机构来认定。

这个机构叫CA(certification authority)。这样小红仅仅要是从CA拿的公钥。就能够觉得它是合法的了。

CA一般不会直接下发公钥,它通常把公钥信息和一些附加信息(比方公钥产生的日期。有效期等)一起依照一定的格式组织起来下发。这样的组织起来的数据就叫做证书。

证书的作用就是它有一定的格式,这个格式还是个标准,全世界都用它,这样就非常方便传播。眼下用得比較多的证书就是著名的x.509。

原文地址:https://www.cnblogs.com/jzssuanfa/p/6972080.html