首页 理论教育 区块链中的加密算法选择与应用

区块链中的加密算法选择与应用

时间:2023-10-28 理论教育 版权反馈
【摘要】:现实中,多数公有链采用的加密算法,都是经过反复验证和时间检验的,均采用了保守型技术选型。一旦加密算法因为漏洞而被攻击,整条区块链的数据就会受到挑战。加密算法可以分为两种:对称加密和非对称加密,在区块链中普遍使用的是非对称加密。区块链常见的加密算法如下:(一)哈希算法这是一类数学函数算法,又被称为散列算法,基本特性为输入任意大小的字符串、产生固定大小的输出、能在合理的时间内计算出输出值。

区块链中的加密算法选择与应用

对于区块链技术来说,加密技术是重要的组成部分,为区块链的匿名性、不可篡改性和不可伪造性等保驾护航。

现实中,多数公有链采用的加密算法,都是经过反复验证和时间检验的,均采用了保守型技术选型。一旦加密算法因为漏洞而被攻击,整条区块链的数据就会受到挑战。

加密算法可以分为两种:对称加密和非对称加密,在区块链中普遍使用的是非对称加密。

非对称加密,是指在加密和解密过程中使用两个非对称的密码,即公钥和私钥。具有这样两个特点:一是使用用其中一个密钥(公钥或私钥)加密信息后,只有用另一个对应的密钥才能解开;二是公钥可以向其他人公开,每个人都能获取,其他人无法通过该公钥推算出相应的私钥。

区块链常见的加密算法如下:

(一)哈希算法

这是一类数学函数算法,又被称为散列算法,基本特性为输入任意大小的字符串、产生固定大小的输出、能在合理的时间内计算出输出值。

哈希算法是区块链中使用最多的一种算法,被广泛使用在区块的构建和交易完整性的确认上。

哈希算法有很多,区块链主要使用的是SHA-256算法:将任意数据串作为输入值代入公式,得到一个独一无二的64位输出值。

数据存在哪里?

区块链采用分布式存储的方式,区块链的数据由区块链节点使用和存储,多个节点通过网络进行连接,最终形成完整的区块链网络。

对于同一个哈希算法来说,相同的输入通常都能得到相同的输出,但得到的输出是不同的。区块链就是利用哈希函数为区块生成签名,将区块中的数据作为输入,得到区块签名。

1.哈希算法的特点

哈希算法主要有以下几个特点:

(1)单向性。原始信息与摘要信息(哈希值)之间没有规律,无法从摘要信息倒推出原始信息。

(2)只要原始信息改变一点,输出的哈希值(摘要信息)就会天差地别。

(3)只有完全一样的原始信息,才能得到完全相同的输出值。

(4)哈希算法可以摘要和简化信息、验证信息、隐藏信息。

2.区块链中的哈希算法有什么用

哈希算法是区块链中使用最多的一种算法,被广泛使用在构建区块和确认交易的完整性上。为了保证数据的完整性,会采用哈希值进行校验。

区块链可理解为“区块+链”的形式,该链由哈希连接起来,每个区块上都有很多交易,整个区块又能通过哈希函数产生摘要信息,然后由每个区块将上一个区块的摘要信息记录下来,再将所有的区块连成链。

修改了历史中某一个区块的数据,该区块摘要值(即哈希值)就会发生改变,下一个区块中记录的上一个区块的哈希也会相应修改。也就是说,为了保证账本的合法性,如果要修改历史记录,所有记录都要修改。哈希函数,提高了账本篡改的难度。

(二)椭圆曲线算法(www.xing528.com)

椭圆曲线算法是一套关于加密数据、解密数据交换密匙的算法,可以用于对数据签名和验证。用于签名,不仅可以保证用户的账户不被其他人顶替,还能保证用户不能否认其签名的交易。用私钥对交易信息签名,用用户的公钥验证签名,只要通过验证,交易信息就能记账,继而成功完成交易。

椭圆曲线密码(ECC)由Neal Koblitz和Victor Miller于1985年发明,可以看作是椭圆曲线对先前基于离散对数问题(DLP)的密码系统的模拟。

椭圆曲线密码体制之所以是安全的,是因为椭圆曲线离散对数问题(ECDLP)很难解答。椭圆曲线离散对数问题远难于离散对数问题,椭圆曲线密码系统的单位比特强度要远高于传统的离散对数系统。因此,如果使用的密匙较短,ECC就能达到与DL系统相同的安全级别。如此,计算参数更小,密钥更短,运算速度更快,签名更加短小。

为了响应NIST对数字签名标准(DSS)的要求,1992年Scott和Vanstone提出了一种模拟,即ECDSA。1998年ECDSA作为ISO标准被采纳,1999年作为ANSI标准被采纳,2000年成为IEEE和FIPS标准。

(三)Base58编码

Base58是一种基于文本的二进制编码格式,是比特币中使用的一种独特编码方式,主要用于产生比特币的钱包地址。其去除了容易混淆的字符,没有使用数字“0”、大写字母“O”、大写字母“I”和小写字母“l”,以及符号“+”和“/”。

Base58是比特币使用的一种编码方式,不仅实现了数据压缩,保持了易读性,还具有错误诊断功能。其编码过程如下:首先,给数据添加一个“版本字节”前缀,识别编码的数据类型。例如,比特币地址的前缀是“0”(十六进制是“0x00”),而对私钥编码时前缀是“128”(十六进制是“0x80”)。然后,计算“双哈希”。

在这个过程中,要对之前的结果(前缀和数据)运行两次SHA256哈希算法:

checksum=SHA256×[SHA256×(Prefix+Data)]

在产生的长32个字节的哈希值(两次哈希运算)中,只取前4个字节,作为检验错误的代码或校验。校验码添加到数据后,结果由三部分组成:前缀、数据和校验。

(四)零知识证明

“零知识证明”的英文表示为“Zero-Knowledge Proofs”,简写为“ZKPs”,指的是,在不向验证者提供任何有用信息的情况下,证明者能使验证者相信某个论断是正确的。

整个过程很简单:A要向B证明他知道特定数独的答案,又不能将这个数独的解告诉B。B要随机指定某一行、列、九宫格,A将这一行、列、九宫格里所有的数字按照从小到大的顺序写下来,只要包含1—9的所有数字,就可以证明A确实知道这个数独题目的答案。在这个过程中,一旦A提前知道了B指定的行、列或九宫格,就可以在验证过程中作弊,所以为了确保该验证方式的安全性,B需要一个真正的随机数

零知识证明的成立需要具备三个要素:完整性、可靠性和零知识。举个例子,假设有一个环形走廊,出口和入口相邻但不互通;在这个环形走廊中间的某处有一道紧锁的门,只有拥有钥匙,才可以通过。这时,A要向B证明自己拥有打开这道门的钥匙,用零知识量证明来解决就是:B看着A走进入口,然后在出口等待,如果A从入口进入通过走廊并从出口走出,就说明其拥有打开中间那扇门的钥匙,而在这个过程中,他完全不用向B提供钥匙的具体信息。可见,零知识证明实际上是一种概率证明,并不是非确定性证明。

1.零知识证明的种类

零知识证明可以分为交互式和非交互式两种。

(1)交互式。零知识证明协议的基础是交互式的,要求验证者不断地对证明者所拥有的“知识”进行提问;证明者回答问题,让验证者相信证明者的确知道这些“知识”。然而,这种方法并不能使人相信证明者和验证者是真实的,因为双方只要提前串通,即使不知道答案,证明者也能通过验证。

(2)非交互式。这种证明不需要经历交互的过程,避免了串通的可能,但需要额外的机器和程序,来确定实验顺序。

2.为什么区块链中要用到零知识证明

在现在社会,个人的身份与很多信息进行了关联,手机号、身份证号、银行卡号等都被捆绑在一起,只要知道手机号,就可以通过关联信息获取到姓名、出生年月等信息。

在区块链的世界中,用地址来表示交易双方,就实现了匿名的作用。然而,链上的信息虽然是匿名的,但是通过链上信息绑定的链下信息,可以方便地追溯到真实世界的交易双方,使匿名性荡然无存。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈