您当前的位置: > 山寨币 >

区块链之暗码学与宁静技能

发布时间:2021-08-25 16:50

据IPVN团队先容,在区块链技能中,用到了大量的暗码学常识来包管系统的宁静性。暗码学的分支许多,这篇文章仅仅对区块链中应用到的暗码学常识,做一个较为全面的菲薄的先容。

首先,会先容一些暗码学常识,然后,会先容一些应用在区块链中的宁静技能。总的来说,全文先先容理论,后先容理论的应用。全文将根据如下布局铺开:

全文架构

暗码学可以分为古典暗码学和现代暗码学。

古典暗码学主要存眷信息的保密书写和通报,以及与其相对应的破译要领。

现代暗码学不只存眷信息保密问题,还同时涉及信息完整性验证(动静验证码)、信息公布的不行狡辩性(数字签名)、以及在漫衍式计较中发生的来历于内部和外部的攻击的所有信息宁静问题。总而言之,现代暗码学是互联网宁静的基石。

一、暗码学常识

在现代暗码学中,有浩瀚的分支,别离维护者系统宁静的差别脚色。如上所述,为了确保信息的秘要性、完整性、认证性和不行狡辩性,降生了大量的宁静算法。

个中,和区块链相关的算法主要有哈希算法和加密解密算法。接下来一一先容:

1.Hash函数

哈希函数的简介

暗码哈希函数是一类数学函数,可以在有限合理的时间内,将任意长度的动静压缩为固定长度的输出值,而且是不行逆的。其输出值称为哈希值,也称为散列值。

以哈希函数为基础机关的哈希算法,在现代暗码学中饰演着重要的脚色,常用于实现数据完整性和实体认证,同时也组成多种暗码体系体例和协议的宁静保障。接下来,将从这三个方面来简朴阐明一下Hash函数:

Hash函数先容导图

哈希函数的评价尺度

一个优秀的Hash算法将能实现如下功效:

·正向快速:给定明文和Hash算法,在有限时间和有限资源内能计较获得Hash值;·逆向坚苦:给定(若干)Hash值,在有限时间内很难(根基不行能)逆推出明文;·输进敏感:原始输进信息产生任何改变,新发生的Hash值都应该呈现很大差别;·冲突制止:很难找到两段内收留差别的明文,使得它们的Hash值一致(产生碰撞)。

下面,来举一个输进敏感的例子,如下图所示:

哈希值完全改变

上图中,输进的改变,仅仅是将Hello的首字母,从小写改变为大写,可是输出的哈希值就已经完全改变了。这说明MD5哈希函数的输进敏感度很是高!

碰撞是与哈希函数相关的重要观点,表现着哈希函数的宁静性。

所谓碰撞是指两个差别的动静在统一个哈希函数感化下,具有沟通的哈希值。哈希函数的宁静性是指在现有的计较资源(包括时间、空间、资金等)下,找到一个碰撞是不行行的。

冲突制止有时候又称为“抗碰撞性”,分为“弱抗碰撞性”和“强抗碰撞性”。

假如给定明文条件下,无法找到与之碰撞的其他明文,则算法具有“弱抗碰撞性”;

假如无法找到任意两个产生Hash碰撞的明文,则称算法具有“强抗碰撞性”。

哈希函数的种类

今朝常见的Hash算法包括MD和SHA系列算法。详细分类如下:

MD4(RFC 1320)是MIT的Ronald L.Rivest在1990年设计的,MD是Message Digest的缩写。其输出为128位。MD4已被证实不敷宁静。MD5(RFC 1321)是Rivest于1991年对MD4的改良版本。它对输进仍以512位举行分组,其输出是128位。MD5比MD4越发宁静,但历程越发庞大,计较速度要慢一点。MD5已被证实不具备“强抗碰撞性”。SHA(Secure Hash Algorithm)并非一个算法,而是一个Hash函数族。NIST(National Institute of Standards and Technology)于1993年公布其首个实现。今朝知名的SHA-1算法在1995年面世,它的输出为长度160位的Hash值,抗穷举性更好。SHA-1设计时仿照了MD4算法,接纳了雷同道理。SHA-1已被证实不具备“强抗碰撞性”。NIST还设计出了SHA-224、SHA-256、SHA-384和SHA-512算法(统称为SHA-2),跟SHA-1算法道理雷同。SHA-3相关算法也已被提出.

今朝,MD5和SHA1已经被破解,一般推荐至少使用SHA2-256或更宁静的算法。

Hash函数在区块链中的应用

比特币系统中使用了两个暗码学哈希函数,一个是SHA256,另一个是RIPEMD160。RIPEMD160主要用于天生比特币地址。

SHA256是机关区块链所用的主要暗码哈希函数。

在HyperLedger-Fabric区块链平台中,Hash函数主要用于检测数据未经授权的修改,签名者的身份识别和抗狡辩。

2.加密解密算法

加解密算法是暗码学的焦点技能。

加密解密算法的分类

从设计理念上可以分为两大根基类型,如下表所示:

加解密算法的类型

加解密系统根基构成

现代加解密系统的典型组件一般包括:加解密算法、加密密钥、解密密钥。

在加解密系统中,加解密算法自身是固定稳定的,而且一般是公然可见的;密钥则是最要害的信息,需要宁静地生存起来,甚至通过特殊硬件举行掩护。

一般来说,对统一种算法,密钥需要根据特定算法每次加密前随机天生,长度越长,则加密强度越大。加解密的根基历程如下图所示:

加-解密-历程示意图

加密历程中,通过加密算法和加密密钥,对明文举行加密,得到密文。

解密历程中,通过解密算法息争密密钥,对密文举行解密,得到明文。

按照加解密历程中所使用的密钥是否沟通,算法可以分为对称加密(symmetric cryptography,又称大众密钥加密,common-key cryptography)和非对称加密(asymmetric cryptography,又称公钥加密,public-key cryptography)。两种模式合用于差别的需求,刚好形成互补。某些时候可以组合使用,形成混淆加密机制。

二、宁静技能

前面说到,现代暗码学不只存眷信息保密问题,还同时涉及信息完整性验证(动静验证码)、信息公布的不行狡辩性(数字签名)、以及在漫衍式计较中发生的来历于内部和外部的攻击的所有信息宁静问题。

通过前面的先容,我们知道了加密息争密算法实现了对信息的保密,哈希函数可以或许对任意的输进,输出长度必然的哈希值。

怎么把这些理论用起来,以包管信息宁静?

1、动静认证码与数字签名

动静认证码和数字签名技能通过对动静的摘要举行加密,可用于动静防窜改和身份证实问题。

关于动静验证码

动静认证码全称是“基于Hash的动静认证码”(Hash-based Message Authentication Code,HMAC)。

动静验证码基于对称加密,可以用于对动静完整性(integrity)举行掩护。根基历程为:对某个动静操纵提前共享的对称密钥和Hash算法举行加密处置惩罚,获得HMAC值。该HMAC值持有方可以证实本身拥有共享的对称密钥,而且也可以操纵HMAC确保动静内收留未被窜改。一般用于证实身份的场景如Alice、Bob提前共享和HMCA的密钥和Hash算法,Alice需要知晓对方是否为Bob,可发送随机动静给Bob。Bob收到动静后举行计较,把动静HMAC值返归给Alice,Alice通过检讨收到HMAC值的正确性可以知晓对方是否是Bob。注意这里并没有思量中间人攻击的环境,假定信道是宁静的。

关于数字签名

数字签名基于非对称加密,既可以用于证明某数字内收留的完整性,又同时可以确认来历(或不行狡辩,Non-Repudiation)。

数字签名的全历程分两大部门,即签名与验证。一侧为签名,一侧为验证历程。签名历程:发方将原文用哈希算法求得数字摘要,用签名私钥对数字摘要加密得数字签名,发方将原文与数字签名一起发送给接管方。(Q:?为什么要将原文举行数字摘要之后,操纵私钥和摘要,对原文举行签名,而不是直接用对原文举行签名?A:原因有二:一是由于非对称加密算法的加密速度,遥小于对称加密速度。直接对原文举行签名,耗损较大;而是由于非对称加密,对加密信息的长度,有着严格的要求,只能用于少量数据的加密。好比,RSA加密算法,要求加密的数据不得大于53个字节。)验证历程:?收方验证签名,即用发方公钥解密数字签名,得出数字摘要;收方将原文接纳同样哈希算法又得一新的数字摘要,将两个数字摘要举行比力,假如二者匹配,说明经数字签名的电子文件传输乐成。用于防止动静窜改的场景Alice通过信道发给Bob一个文件(一份信息),Bob如何获知所收到的文件即为Alice发出的原始版本?Alice可以先对文件内收留举行摘要,然后用本身的私钥对摘要举行加密(签名),之后同时将文件和签名都发给Bob。Bob收到文件和签名后,用Alice的公钥来解密签名,获得数字摘要,与收到文件举行摘要后的成果举行比对。假如一致,说明该文件确实是Alice发过来的(别人无法拥有Alice的私钥),而且文件内收留没有被修悔改(摘要成果一致)

数字签名与动静验证码的区别

动静验证码是基于对称加密,可以用于对动静完整性(integrity)举行掩护。通讯两边需要提前共享的对称密钥和Hash算法。

数字签名是基于非对称加密,MAC不仅可以或许包管完整性,还可以或许包管真实性。两边不需要共享密钥,私钥仅仅需要被一方把握。

2、数字证书

公钥可能被窜改的危机

对于非对称加密算法和数字签名来说,很重要的一点就是公钥的分发。

理论上任何人可以公然获取到对方的公钥。然而这个公钥有没有可能是伪造的呢?传输历程中有没有可能被窜改掉呢?一旦公钥自身出了问题,则整个成立在其上的宁静体系的宁静性将不复存在。

数字证书机制恰是为相识决这个问题,它就像日常糊口中的一个证书一样,可以证实所记载信息的正当性。

好比证实某个公钥是某个实体(如组织或小我私家)的,而且确保一旦内收留被窜改,就能被探测出来,从而实现对用户公钥的宁静分发。我们谈论数字证书的时候,可以从以下几个方面接头:

数字证书根基环境

证书的分类

按照所掩护公钥的用途,可以分为加密数字证书(Encryption Certificate)和签名验证数字证书(Signature Certificate)。

加密数字证书用于掩护用于加密信息的公钥;

签名验证数字证书则掩护用于举行解密签名举行身份验证的公钥。

两种类型的公钥也可以同时放在统一证书中。

证书发表机构

一般环境下,证书需要由证书认证机构(Certification Authority,CA)来举行签发和背书。权势巨子的证书认证机构包括DigiCert、GlobalSign、VeriSign等。用户也可以自行搭建当地CA系统,在私有网络中举行使用。

从上面我们可以得知,证书作为公钥信任的基础。

那么,怎么用证书来实现公钥的宁静分发呢?

在HyperLedger-Fabric中,使用的是PKI体系来包管的。

关于数字证书的格局:

一般来说,一个数字证书内收留可能包括根基数据(版本、序列号)、所签名对象信息(签名算法类型、签发者信息、有效期、被签发人、签发的公然密钥)、CA的数字签名,等等。

今朝使用最遍及的尺度为ITU和ISO结合拟定的X.509的v3版本规范(RFC 5280)。

X.509规范中一般推荐使用PEM(Privacy Enhanced Mail)格局来存储证书相关的文件。

证书文件的文件名后缀一般为.crt或.cer,

对应私钥文件的文件名后缀一般为.key,

证书请求文件的文件名后缀为.csr。

有时候也同一用.pem作为文件名后缀。

PEM格局接纳文本方式举行存储,一般包括首尾标志和内收留块,内收留块接纳Base64举行编码。别的,另有DER(Distinguished Encoding Rules)格局,是接纳二入制对质书举行生存,可以与PEM格局互相转换

3、PKI体系

简介

在非对称加密中,公钥可以通过证书机制来举行掩护,但证书的天生、分发、打消等历程并没有在X.509规范中举行界说。

在实际工程中,宁静地办理和分发证书可以遵循PKI(Public Key Infrastructure)体系来完成。

PKI体系焦点解决的是证墨客命周期相关的认证和办理问题,在现代暗码学应用范畴处于十分基础和重要的职位。

在HyperLedger-Fabric区块链系统中,就是用PKI体系来对质书举行办理的。

接下来,将从以下几个方面来先容PKI体系:

PKI体系

PKI根基组件

一般环境下,PKI至少包括如下焦点组件:

·CA(Certification Authority)证书发表机构:卖力证书的发表和作废,吸收来自RA的请求,是最焦点的部门;·RA(Registration Authority)用户挂号机构:对用户身份举行验证,校验数据正当性,卖力挂号,审核过了就发给CA;·证书数据库:存放证书,多接纳X.500系列尺度格局。可以共同LDAP目次办事办理用户信息。

个中,CA是最焦点的组件,主要完成对质书信息的维护。

PKI操作流程

常见的操作流程为:

1. 用户通过RA挂号申请证书,提供身份和认证信息等;2. RA审核完成后发给CA;3. CA审核后完成证书的制造,发表给用户。用户假如需要打消证书则需要再次向CA发出申请。

证书的签发

CA对用户签发证书实际上是对某个用户公钥,使用CA的私钥对其举行签名。这样任何人都可以用CA的公钥对该证书举行正当性验证。验证乐成则承认该证书中所提供的用户公钥内收留,实现用户公钥的宁静分发。

用户证书的签发可以有两种方式。

一种是由CA直接来天生证书(内含公钥)和对应的私钥发给用户;另一种是由用户本身天生公钥和私钥,然后由CA来对公钥内收留举行签名。

后者环境下,用户一般会首先自行天生一个私钥和证书申请文件(Certificate Signing Request,即csr文件),该文件中包括了用户对应的公钥和一些根基信息,如通用名(common name,即cn)、组织信息、地舆位置等。

CA只需要对质书请求文件举行签名,天生证书文件,发表给用户即可。整个历程中,用户可以保持私钥信息的私密性,不会被其他方获知(包括CA方)。

证书的打消

证书超出有效期后会作废,用户也可以主动向CA申请打消某证书文件。

因为CA无法强制收归已经发表出往的数字证书,因此为了实现证书的作废,去去还需要维护一个打消证书列表(Certificate Revocation List,CRL),用于记载已经打消的证书序号。

因此,凡是环境下,当第三方对某个证书举行验证时,需要首先查抄该证书是否在打消列表中。假如存在,则该证书无法通过验证。假如不在,则继续举行后续的证书验证历程。

4、Merkle树布局

简介

Merkle(默克尔)树,又鸣哈希树,是一种典型的二叉树布局,由一个根节点、一组中间节点和一组叶节点构成。在区块链系统呈现之前,遍及用于文件系统和P2P系统中。其根基布局如下图所示:

Merkle树布局

其主要特点为:

· 最下面的叶节点包罗存储数据或其哈希值;· 非叶子节点(包括中间节点和根节点)都是它的两个孩子节点内收留的哈希值。

入一步地,默克尔树可以推广到多叉树的景象,此时非叶子节点的内收留为它所有的孩子节点内收留的哈希值。

默克尔树逐层记载哈希值的特点,让它具有了一些奇特的性质。比方,底层数据的任何变更,城市通报到其父节点,一层层沿着路径一直到树根。这意味树根的值实际上代表了对底层所有数据的“数字摘要”。

Merkle树应用场景

今朝,默克尔树的典型应用场景有许多,下面别离先容。

1.快速比力大量数据

对每组数据排序后构建默克尔树布局。当两个默克尔树根沟通时,则意味着两组数据一定沟通。不然,一定存在差别。

因为Hash计较的历程可以十分快速,预处置惩罚可以在短时间内完成。操纵默克尔树布局能带来巨大的比力机能上风。

2.快速定位修改

比方上图Merkle树布局图中。假如D1中数据被修改,会影响到N1、N4和Root。

因此,一旦发明某个节点如Root的数值产生变化,沿着Root→N4→N1,最多通过O(lgn)时间即可快速定位到实际产生改变的数据块D1。

5、布隆过滤器

简介

布隆过滤器是一种基于Hash的高效查找布局,可以或许快速(常数时间内)回覆“某个元素是否在一个荟萃内”的问题。

如下图所示,是一个简朴的布隆过滤器布局:

布隆过滤器示意图

布隆过滤器(Bloom Filter)的焦点实现是一个超大的位数组和几个哈希函数。假设位数组的长度为m,哈希函数的个数为k:

以上图为例,详细的操作流程:

假设荟萃内里有3个元素{x, y, z},哈希函数的个数为3。首先将位数组举行初始化,将内里每个位都配置位0。对于荟萃内里的每一个元素,将元素依次通过3个哈希函数举行映射,每次映射城市发生一个哈希值,这个值对应位数组上面的一个点,然后将位数组对应的位置标志为1。查询W元素是否存在荟萃中的时候,同样的要领将W通过哈希映射到位数组上的3个点。假如3个点的个中有一个点不为1,则可以判断该元素必然不存在荟萃中。反之,假如3个点都为1,则该元素可能存在荟萃中。可以从图中可以望到:假设某个元素通过映射对应下标为4,5,6这3个点。虽然这3个点都为1,可是很明明这3个点是差别元素颠末哈希获得的位置,因此这种环境说明元素虽然不在荟萃中,也可能对应的都是1,这是误判率存在的原因。

布隆过滤器由于其高效性大量应用于网络和宁静范畴,比方信息检索(BigTable和HBase)、垃圾邮件法则、注册办理等。

布隆过滤器的应用场景

1.基于Hash的快速查找

Hash函数的一个常见应用就是基于Hash的快速查找算法。

基于哈希的快速查找,实际上是一种基于内收留的编址方式。

Hash可以将任意内收留映射到一个固定长度的字符串,并且差别内收留映射到沟通串的概率很低。因此,这就组成了一个很好的“内收留→索引”的天生关系。

试想,假如给定一个内收留和存储数组,通过机关Hash函数,让映射后的Hash值总不凌驾数组的巨细,则可以实现快速的基于内收留的查找。

比方,内收留“hello world”的Hash值假如是“100”,则存放到数组的第100个单位上往。假如需要快速查找任意内收留,如“hello world”字符串是否在存储系统中,只需要将其在常数时间内计较Hash值,并用Hash值检察系统中对应元素即可。该系统“完美地”实现了常数时间内的查找。

然而,令人遗憾的是,当映射后的值限制在必然规模(如总数组的巨细)内时,会发明Hash冲突的概率会变高,并且规模越小,冲突概率越大。许多时候,存储系统的巨细又不能无穷扩铺,这就造成算法效率的下降。

为了进步空间操纵率,厥后人们基于Hash算法的思惟设计出了布隆过滤器布局。

2.更高效的布隆过滤器

布隆过滤器接纳了多个Hash函数来进步空间操纵率。对统一个给定输进来说,多个Hash函数计较出多个地址,别离在位串的这些地址上标志为1。举行查找时,举行同样的计较历程,并检察对应元素,假如都为1,则说明较或许率是存在该输进。如下图所示:

布隆过滤器

布隆过滤器相对单个Hash算法查找,大大进步了空间操纵率,可以使用较少的空间来暗示较大荟萃的存在关系。

6、同态加密

简介

同态加密是一种加密形式,它允许人们对密文举行特定的代数运算获得仍旧是加密的成果,将运算后的数据举行解密,其解密所获得的成果与对明文举行同样的运算成果一样。

什么意思呢?

一般的加密方案存眷的都是数据存储宁静。

即,我要给其他人发个加密的工具,或者要在计较机或者其他办事器上存一个工具,我要对数据举行加密后在发送或者存储。没有密钥的用户,不行能从加密成果中获得有关原始数据的任何信息。只有拥有密钥的用户才可以或许正确解密,获得原始的内收留。

我们注意到,这个历程中

用户是不能对加密成果做任何操作的!

用户是不能对加密成果做任何操作的!

用户是不能对加密成果做任何操作的!

只能举行存储、传输。对加密成果做任何操作,都将会导致错误的解密,甚至解密失败。

可是,

同态加密提供了一种对加密数据举行处置惩罚,加密数据举行处置惩罚,加密数据举行处置惩罚的功效。

也就是说,其他人可以对加密数据举行处置惩罚,可是处置惩罚历程不会泄露任何原始内收留。同时,拥有密钥的用户对处置惩罚过的数据举行解密后,获得的正好是处置惩罚后的成果。

举例来说:

A和B两个用户。A需要把本身的数据给B处置惩罚。有两种方式:方式一:A把本身的数据举行加密,发送给B。B将数据解密后,对数据举行处置惩罚,然后获得方针成果Result。最后把处置惩罚后的成果发送给A。方式二: A把本身的数据举行加密,发送给B。B直接对加密的数据,举行处置惩罚,然后获得处置惩罚的成果Result*.A收到Result*之后,通过私钥解密Result*,终极获得Result。方式二用到的要领,就是同态加密。在方式二的方式中,B完成了对A数据的处置惩罚目的,而且包管了A用户的隐私!

意义

换言之,这项技能令人们可以在加密的数据中举行诸如检索、比力等操作,得出正确的成果,而在整个处置惩罚历程中无需对数据举行解密。其意义在于,真正从底子上解决将数据及其操作委托给第三方时的保密问题,比方对于各类云计较的应用。

三、总结

综上所述,本文的所有内收留都是基于哈希函数和加解密算法铺开的。

动静认证码和数字签名,Merkle树,布隆过滤器等都是基于Hash函数的应用。

数字证书,PKI体系,则长短对称暗码体系宁静性的保障。有了对这些基础常识的相识,我们会更收留易理解区块链是奈何实现信息宁静的。

检察更多