十月是一只猴子 ;的财富 2015年运势如何?
根据昨天的讨论,我们大概清楚了SHA-256算法在数字签名过程中的重要性。
用三句话来概括一下昨天文章的要义:
1. SHA-256是一个安全的HASH算法,不管将什么作为输入参数,最终得到的结果总是一个包含256个二进制位的数值。
2. 文本内容的细微变更(哪怕是一个标点符号,空白格)都会对最终加密结果有着重大的影响。
3. 如果输入的内容一模一样,那么用SHA-256函数来进行加密总是能得到相同的最终加密结果。
正式由于SHA-256函数具备这些特性,才让我们对他产生浓厚的兴趣。
由于在下面的内容中,我们又要频繁的应用到秘钥的概念,这里再总结一下相关要义(但求易懂):
1. 秘钥可以简单理解为某一算法的输入参数,比如有一串数:5201314,那么我们要现在给他加密,采用一个算法f(给每一位数字+2)=7423536. 这里f就可以理解为我们的加密算法即我们这里所说的SHA-256算法。这里的2就可以简单的认为是我们加密的秘钥。
2. 如果加密的秘钥和解密的秘钥是相同的,则该类叫对称加密法
3. 如果加密的秘钥和解密的秘钥是不相同的,那么该类就叫做非对称加密法。在非对称加密法中,用于加密的秘钥叫做私钥,用于解密的秘钥叫做公钥。私钥只有加密的人自己知道,而公钥则是公开的,目的是要能让别人用公钥去进行解密。公钥一般是将私钥输入某个算数计算出来的,由私钥可以推导出公钥,而反之则不能。
所以,我们又可以优化一下我们之前讨论的数字签名了,前面我们说过:
SHA-256("小青欠小红10000元")的结果当做数字签名(该结果是一个包含256位二进制数的数值)。
但是,聪明的读者朋友们,你们肯定可以猜想得到,这还不够,一个前面不仅仅要满足对应性的需求,还要满足可鉴别这个重要特性。
比如,当一个人看到一个数字签名之后,我们要确定这个是小青的签名,而不是小红,小刚,小明或者其他人的签名。但是SHA-256函数是一个公开的算法,网上有很多的在线加密,解密的工具。
比如:SHA-256("小青欠小红10000元")= 27848e760c837f0d3e31628b9f05196fd6694694d95ec158ea11f0610d5d3206。
用SHA-256函数虽然可以确保和内容的对应性,确保内容不会被修改(如果被修改会导致加密结果的重大变化,详细可参见前一天的文章"数字签名")
但是,这样仍然无法保证该条签名是小青签的,因为小红,小刚,小明或者任何其他人都可以用SHA-256函数进行加密得到相同的加密串。那如何来保证该条签名是小青签名的,而不是小红,小刚,小李呢?
这里我们就用到了上面我们所说的非对称加密的算法。大概的原理是这样的:
小青用自己的私钥加密(SHA-256("小青欠小红10000元"))得到的结果就可以作为小青的签名。
小青可以将自己的公钥公布出来,这样任意一个人就可以利用小青公布的公钥对小青加密的内容进行验证了。
举个简单的例子:
小青用自己的私钥加密(SHA-256("小青欠小红10000元"))值加上自己的公钥公布出来。
小红可以利用小青公布出来的公钥对小青的数字签名进行解密,得到一串hash值,然后小红可以再用SHA-256("小青欠小红10000元")计算得到的hash值和上面的hash值进行对比,如果两个hash值是相同的,那么可以说明两个问题:
1. 这个签名是小青签署的,要不然不可能可以利用小青的公钥对其解密。
2. 这个签名的内容是"小青欠小红10000元",不然解密后的hash值不可能等于SHA-256("小青欠小红10000元")
经过这两天的讨论,我们可以归纳一下:
1. 数字签名和签名内容的对应性必须得到保证(这是用SHA-256函数来保证的)
2. 数字签名必须可鉴别是谁签名的(可以通过非对称加密的私钥,公钥来进行识别)
小伙伴们,你们听懂了吗?
还没有评论,来说两句吧...