各种主流链的HASH算法、PKI及秘钥长度

  1. 什么是hash算法?
  2. 什么是PKI?

比特币、以太坊、EOS、NEO、量子链的HASH算法,PKI算法及秘钥长度

什么是hash算法?

从理论上讲,哈希函数就是一种数学流程,将任意大小的输入数据放入该流程,然后返回固定大小的输出数据。

更具体地讲就是,提取任意长度的字母序列作为输入——我们将其称为string——然后返回一个固定长度的字母序列。无论这个输入string是一个单一的字母,单词,句子还是整部小说,而输出的长度——叫做摘要(digest)——永远都是相同的。

这种类型的哈希函数的常见用例就是存储密码。

当你使用任何一种网络服务创建一种需要密码的用户账户时。这种密码都是通过哈希函数运行的,存储的就是该密码信息的哈希摘要。当你输入密码来登录账号时,然后相同的哈希函数就会去运行你输入的密码,然后服务器就会检查其结果是否与存储的摘要相匹配。

这就意味着即使黑客能够访问用于存储哈希的数据库,他们也不可能立即破坏所有用户账户,因为无法轻易找到生成某一特定哈希的密码。

什么是PKI?

Public Key Infrastructure(PKI),中文叫做公开密钥基础设施,也就是利用公开密钥机制建立起来的基础设施。现在大家的很多重要活动都是通过网络进行的,那么与之俱来的安全问题就显得非常重要。同时很多安全保障机制都是基于PKI的。

1,PKI的核心是身份证明书的发行

PKI的主要目的是用来发行“身份证明书”,网络上因为大家不能见面,所以伪造身份是非常容易的事情。因为要在网络上验明正身,所以这个网络身份证明书就变得很重要了。相互通信的时候,如果能相互确认身份证明书,那么我们就知道自己是在跟对的人通信。

但是,自己做的身份证明书是不能拿来作为证明的,就像生活中,如果公民身份证可以私人合法制作的话,那么身份证也就没啥可信度了。网络世界中,我们需要一个信得过的发证机关来发行身份证明书,同时自己要好好保管自己的身份证明书,就像派出所给你发了公民身份证,自己要好好保管一样。

PKI的世界里,这个身份证明书,被叫做“证明书”。发行“证明书”的机关叫做“认证机关”。还有一个就是统一管理证明书的证书“档案库”。这三个东西加起来,就是PKI的主要构成要素。

2,构成PKI的要素只有三个

就像之前提到的,一般来说,构成PKI的主要要素就是下面三个概念

◎证明书

◎认证机关

◎证书库

说到底,PKI指的是证明书的制作和分发的一种机制。在这个机制的保障前提下,进行可信赖的网络通信。即安全的网路通信保障机制。

实际上,证明书是被存放在硬盘或者IC卡里面的。证明书的文件构造是一种叫做 X.509 的协议规定的。另一方面,认证机关也其实就是一个网络应用程序。

证书库因为某些原因,其实也就是文件系统而已,在网络上将证书存放在一起。这些东西,可以通过下载来获取。或者,因为某些原因,证书直接分发,从而省去了证书库这个环节。

3,证明书里面的密钥

一旦利用了证明书确认了身份的同时,通信的加密也就可以实现了。为什么呢?证明书里面包含了用来加密的密钥。

比如说,你要和一个自称比尔的男人通信。这个自称比尔的男人,会在通信的最开始,通过网络将证明书发给你,那么通过这个证明书,就证实了他就是比尔。然后,你用这个“证明书中的密钥”,将你要发送给比尔的内容进行加密,然后发送给比尔。

用“证明书中的密钥”加密过的内容,只能用比尔自己才有的另一个“私人的密钥”才能解密。这样的话,如果你发送给比尔的内容被他人窃取的话,他人也无法解密。

只要比尔自己好好保管好自己才有的“私人的密钥”,那么如果有人拿着比尔的“证明书中的密钥”想要胡作非为的话,那就是不可能的。因为用“证明书中的密钥”加密过的内容,只有比尔自己才有的“私人的密钥”才能解密。

所以这么一来,PKI提供的证明书可以用来身份确认和通信加密。同时实现了这两个重要的功能。

4, 什么是“公开密钥”,什么是“私有密钥”

对于比尔来说,只要保证本人的那个“私人的密钥”不被盗走,包含在“证明书里的密钥”给多少人都没有关系。也就是说,想跟比尔通信的人,必须要有比尔的证明书,要用比尔“证明书里的密钥”对通信内容进行加密。为了能让其他人可以方便的获取比尔的证明书,证书库就显得有必要了。

在PKI机制中,放在“证明书里面的密钥”可以被任意自由分发,这里的“证明书里的密钥”被叫做“公开密钥(Public Key)”。与此相对,本人保管的那个“私人的密钥”就要做“私有密钥(Private Key)”。

就像前文提到的,公开密钥是放在证明书里面的,所有用什么样的方式去分发证明书都没有关系。放到U盘里给别人,或者放到网上让人任意下载,或者用邮件发送,都是可以的。

5,“拿什么去信任你?我的证明书”

先前说到,用包含在证明书里的公开密钥去给通信内容加密,这个过程大家已经知道。但是PKI提供的证明书真的可以被信任吗?说到底,证明书也就是普通的文件而已。不像货币那样,本身有着特殊的材质或者物理上的防伪措施。

这么想是完全对的,因为实际上,认证机关所用的证书生成器说到底也就是一个软件而已,如果搞到这个软件,谁都可以发行证明书。所以说,在技术上,伪造证明书是非常简单的。所谓假的证明书,比如说有一个所谓的“比尔的证明书”,但是里面含有的公开密钥是史提芬的公开密钥。那么,别人发给比尔的信息,史蒂芬可以解密,反而比尔自己不能解密。

这样看来,这个认证机关就至关重要了,认证机关的可信度,直接与证书的可信度挂钩,也就是与整个PKI机制的可信度息息相关。

关于认证机关的权威性和可信度的问题,其实是一个社会基础设施建设的话题了。

在很多国家认证机关都是由政府在主导建设,常常被视作一个社会性基础设施的一个环节。如同建设各种社会机构,比如医院,银行,学校等等。

第六届国际密码学会议对应用于公钥密码系统的加密算法推荐了两种:基于大整数因子分解问题(IFP)的RSA算法和基于椭圆曲线上离散对数计算问题(ECDLP)的ECC算法。RSA算法的特点之一是数学原理简单、在工程应用中比较易于实现,但它的单位安全强度相对较低。目前用国际上公认的对于RSA算法最有效的攻击方法–一般数域筛(NFS)方法去破译和攻击RSA算法,它的破译或求解难度是亚指数级的。ECC算法的数学理论非常深奥和复杂,在工程应用中比较难于实现,但它的单位安全强度相对较高。用国际上公认的对于ECC算法最有效的攻击方法–Pollard rho方法去破译和攻击ECC算法,它的破译或求解难度基本上是指数级的。正是由于RSA算法和ECC算法这一明显不同,使得ECC算法的单位安全强度高于RSA算法,也就是说,要达到同样的安全强度,ECC算法所需的密钥长度远比RSA算法低。这就有效地解决了为了提高安全强度必须增加密钥长度所带来的工程实现难度的问题。

名称 Hash算法 PKI算法 椭圆曲线模型 密钥长度 地址生成的编码方法
比特币 双重SHA256 ECC secp256k1 256 BASE58
以太坊 SHA3-256 ECC secp256k1 256 BASE64
EOS柚子 SHA256 ECC secp256k1 256 BASE58
NEO小蚁 双重SHA256 ECC secp256r1 256 BASE58
QTUM量子 SHA256 ECC secp256k1 256 BASE58
莱特币 SHA256 ECC secp256k1 256 BASE58
达士币 SHA256 ECC secp256k1 256 BASE58
BCOS SHA3 ECC secp256k1 256

比特币的区块哈希算法采用双重sha256算法。之所以不用一重sha256算法是因为SHA1在2017年被攻破,采用的方法是birthday collision attack。社区觉得SHA2被攻破也是时间的问题,而抵御birthday collision attack的有效方法为双重哈希算法。

Ethash工作量证明是内存难解的,这使它能抵抗ASIC。

附-ECC包含的椭圆曲线:

prime256v1 

secp256r1 

nistp256 

secp256k1 

secp384r1 

nistp384 

secp521r1 

nistp521 

sect163k1 

nistk163 

sect163r1 

sect163r2 

nistb163 

sect193r1 

sect193r2 

sect233k1 

nistk233k1 

nistk233 

sect233r1 

nistb233 

sect239k1 

sect283k1 

nistk283 

sect283r1 

nistb283 

sect409k1 

nistk409 

sect571k1 

nistk571 

sect571r1 

nistb571 

secp160k1 

secp160r1 

secp160r2 

secp192k1 

secp192r1 

nistp192 

secp224k1 

secp224r1 

nistp224 

prime192v1 

参考

http://www.atmarkit.co.jp/ait/articles/0102/17/news003.html


转载请注明来源

×

喜欢就点赞,疼爱就打赏