实用干货|解锁区块链信任机制的核心——加密技术

哈喽,童鞋们,上周刚刚结束的普林斯顿大学数学博士Cameron Wang主讲的《一块链习·区块链技术公开课100讲》直播课的第二讲——JURA《区块链加密技术》,大家课后温故知新了没有呢?

嘻嘻,贴心的班长juice小姐姐已经整理好了课程的内容概要。是不是等得着急了?哈哈,这就分享给大家~
在这里插入图片描述
课程内容主要分为四大块,分别是:Hash函数、数字签名、环签名、零知识证明。

一、Hash函数

首先我们定义一下什么叫Hash函数。Hash 函数,是将任意长度的数据映射到有限长度的域上。直观解释起 来,就是对一串数据 m 进行杂糅,输出另一段固定长度的数据 h,作为这段数据的特征(指纹)。有四个性质:一、 正向快速。给定原文和 Hash 算法,在有限时间和有限资源内能 计算得到 Hash 值;二、 逆向困难。给定(若干)Hash 值,在有限时间内无法(基本不可 能)逆推出原文; 三、输入敏感。原始输入信息发生任何改变,新产生的 Hash 值都应 该发生很大变化; 四、碰撞避免。很难找到两段内容不同的明文,使得它们的 Hash 值 一致(即发生碰撞)。

二、数字签名

我们现在来讲下一个主题,数字签名。数字签名是一个带有密钥的消息摘要算法,这个密钥包括了公钥和私 钥,用于验证数据完整性、认证数据来源和抗否认。常见的数字签名算法主要有 RSA、DSA、ECDSA(椭圆曲线数字签名加密算法 )三种。RSA既能用于数据加密也能用于数字签名 RSA 的算法涉及三个参数, n、e1、e2。 其中,n 是两个大质数 p、q 的积,n 的二进制表示时所占用的位数, 就是所谓的密钥长度。e1 和 e2 是一对相关的值,e1 可以任意取,但 要求 e1 与 (p−1)∗(q−1) 互质;再选择 e2,要求 (e2×e1)≡1 (mod((p−1)×(q−1))) (n,e1),(n,e2) 就是密钥对。其中 (n,e1) 为公钥,(n,e2) 为私钥。RSA 加解密的算法完全相同,设 A 为明文,B 为密文,则: A ≡ Be2(mod n);B ≡ Ae1(mod n);(公钥加密体制中,一般用公钥 加密,私钥解密)e1 和 e2 可以互换使用,即: A ≡ Be 1(mod n);B ≡ Ae 2(mod n)。

在这里插入图片描述
椭圆曲线数字签名加密算法 (Elliptic Curve Digital Signature Algorithm,ECDSA) 的基础是椭圆曲线密码学。
给定参数 a,b, 我们选取如上的椭圆曲线: y2 = x3 +ax+b。定义一组共同接受的椭圆曲线参数: (C,G,n),其中,C 表示椭圆曲线点域和几何方程;G 是所有点倍积运算的基点; n 是该椭圆曲线的可倍积阶数。
签名者需要创建一对匙:即一个私钥和一个公钥,其中私匙 d 是一个 小于 n 的标量,公匙是 Q = d×G。签名过程:计算 e = Hash(m), 并截取二进制下其前 n 位为 z。 选择一个随机数 k ,计算椭圆曲线上的点 (x1,y1)= k×G ,计算 r ≡ x1 (mod n) ,计算 s = k−1(z +rd) (mod n) ,生成的数字签名就是 (r,s)。
签名文件验证:计算 e = Hash(m),验证前 n 位是否为 z 。计算 w = s−1 (mod n) ,计算两个参数 u1 = zw (mod n) 和 u2 = rw (mod n) ,计算 (x1,y1)= u1×G+u2×Q,如果 (x1,y1) 不是椭圆曲线上 一个点,验证失败 。验证 r ≡ x1 (mod n)。

三、环签名

接下来我们说说环签名。环签名是一种特殊的群签名,当中只有环成员,没有管理者。签名者 利用其他人的公钥临时组建一个集合,被加入到这个集合的其他人都 不一定知道自己被“加”进来了。陷门置换就是一类具有某种功能的函数,这类函数正向计算很容易, 但是在不知道密钥的情况下求逆的概率可以忽略。例如 RSA 就是一种 陷门置换,假设有公钥 (n,e1) 和私钥 (n,e2),在已知公钥的情况下, 任何人都可以从明文 A 计算密文 B,B ≡ Ae1 (mod n),但是如果不 知道私钥,从 B 计算出 A 的概率是可以忽略的;而如果知道私钥,那 么就可以计算 A ≡ Be2 (mod n),是很容易的。我们用 g(x) 来表示正向计算,g−1(x) 来表示求逆。组合函数:组合函数输入一个密钥 k,一个初始值 v,以及一系列随机数 y1,y2,··· ,yn,对于每一个参数都使用一个对称加密函数 Ek,最终输 出一个值 z ∈{0,1}b。我们构造如下函数: Ck,v(y1,y2,…,yn)= Ek(y1⊕Ek(y2⊕Ek(…Ek(yn ⊕v)))) ,实际使用的时候令 Ck,v(y1,y2,yn)= v,也就是令初始值和结果相等, 这样就相当于将等式构成了一个环,再缺少其中任何一项时都可以用 其他项算出缺少的那一项。

签名: 签名者随机选择一个公钥集合 P1,P2,Pn 作为混淆公钥,其中签名者 自己的公钥对应的下标为 s,按照如下方式来产生对消息 m 最终的环签名:计算 k = Hash(m) ,选择一个随机数 v ∈{0,1}b ,接着为所有公钥选择一个随机 xi ∈{0,1}b,1≤ i ≤ n,i ̸= s 然后 计算 yi = gi(xi), 签名者可以求解组合函数方程 Ck,v(y1,y2,··· ,yn)= v 的解 ys, 签名者使陷门置换由 ys 算出 xs, 即 xs = g−1 s (ys) ,输出最终的环签名,σ =(x1,x2,··· ,xn,v)。签名验证:验证者收到对于消息 m 的签名 (x1,x2,··· ,xn,v) 后,按照如下步骤 来进行验证: 对于所有的 i =1,2,··· ,r,计算 yi = gi(xi) ,验证 k = Hash(m) ,验证 Ck,v(y1,y2,··· ,yn)= v。

四、零知识证明

最后一个,零知识证明。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使 验证者相信某个论断是正确的。零知识证明实质上是一种涉及两方或 更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。 证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过 程不能向验证者泄漏任何关于被证明消息的信息。零知识证明步骤分为以下四个:编码成一个多项式问题,简单随机抽样,同态编码加密 ,零知识。怎么样,是不是对区块链加密技术的只是又巩固、加深了呢?因为文章篇幅限制的原因,小姐姐不能全文公开,感兴趣的同学欢迎关注微信公众号并且回复「加密技术?」即可获取课程链接!!!JURA《区块链中加密技术》直播课的最后部分环节为一问一答,童鞋们摩拳擦掌,只为等待这一刻~

在这里插入图片描述

接下来重头戏来啦~

大家应该很好奇,一块链习的《区块链技术公开课100讲》直播课的第三讲,会请到哪位大咖和我们分享呢?千呼万唤的资深全栈工程师,区块链DApp开发老司机Joe终于出场啦~

自六月份EOS主网之后,Joe亲身经历和见证过EOS DApp一路走来的艰辛。被黑客以各种各样方式攻击过的DAPP,总的损失规模至少上千万了。一直以来,Joe都想对所有被攻击过的DAPP,以及攻击方式做一个汇总。因为前人花大的代价踩的坑,得到的教训,都应当总结好,避免后人再犯。因此,本周日11月11日上午10点的《区块链技术公开课100讲》直播课的第三讲《汇总累计造成千万损失的EOS智能合约漏洞》即将开播。Joe将从实例讲解假币转账、回滚交易、伪随机数算法被破解等问题的原理以及新项目中应该如何避免三个方面带大家对常见对攻击方式以及写合约等进行初步的了解和避免犯错。如果你已经心痒难耐,迫不及待地想要报名参与了,那不妨添加一块链习Jessie微信号:yikuailianxi,建议手速加快!

「一块链习」技术社区链接全世界最极客的区块链开发者,共同学习区块链技术知识与开发实战,为每一位开发者提供有深度的、持续的价值与帮助。

关注「一块链习」 与全球区块链开发者一块学习

猜你喜欢

转载自blog.csdn.net/Yikuailianxi/article/details/83861306
今日推荐