主页 > imtoken官网地址是什么 > 区块链加密算法介绍

区块链加密算法介绍

imtoken官网地址是什么 2023-12-18 05:11:40

区块链通过机器算法为参与者之间的信任问题提供了新的解决方案。其核心是通过在不完全信任的各方中深度使用加密算法来确保数据的不变性。

比特币,谁能转移我的钱

比特币是一条公链,账本分布在非中心化节点上。任何节点都可以发出交易来转移比特币。那么如何保证我的比特币不被他人转让呢?

假设你拥有100个比特币,公共账本上有一个数据结构,即所谓的UTXO,其主要内容是:

▲索引:索引

▲值:金额

▲ 哈希:一个 SHA256 数据摘要

▲脚本:脚本,这是要说的重点

这个脚本是一串可执行的二进制代码,比特币定义了一个基于堆栈的脚本执行器,可以执行加减乘除、移位、HASH、签名验证等算法,类似于常见的科学计算器。当你要花掉你持有的比特币时,首先需要执行作为输入交易的UTXO对应的脚本(脚本),称为“解锁脚本”,只有执行成功才能继续。

最常用的解锁脚本是P2PKH脚本:

OP DUP OF HASH160 < Public Key Hash > OP EQUAL

解锁时传入签名和公钥,组成完整的脚本:

p>

 <Public Key> OP DUP OP Hash160 < Public key

翻译为:“公钥的HASH160等于,用这个公钥的HASH值验证签名可以通过”。计算通过后,资金就可以使用了。

由于私钥掌握在自己手中,其他人无法计算出满足条件的签名,从而确保只有你可以使用资金。

除了数字签名,还有一点说明中本聪真的很聪明。你的公钥不会存储在账本里,而是它的HASH160(双HASH,SHA256+RIPEMD160),由于HASH是单向的,公钥不能从HASH反向推导出来,大大降低了风险未来的量子机会。

如何防止HASH链被篡改

我谈到了比特币中数字签名的使用。这里结合区块链数据结构本身来谈谈HASH的使用。

一个block只是一个组织数据的结构,这里不再详述,关键在block里面有一个重要的参数,就是前一个block的HASH,它就形成了一个链式结构。

我们垂直查看数据,就像玩积木游戏一样。前一个块有一个钩子。如果此时有人试图篡改之前的交易,势必会导致该区块的 HASH 发生变化。为了让修改后的交易被大家认可,他可以以这个修改后的区块为起点。 ,重新计算后面的所有区块,关键是和世界上其他节点竞争,目前还没有人能做到。

HASH算法的特点如下:

▲数据一点点变化,HASH变化很大。

▲不可能为不同的数据计算相同的HASH(或者非常困难)。

比特币和以太坊公钥和私钥——ECC算法

RSA速度慢且不安全,因此比特币和以太坊都没有采用更安全的椭圆曲线算法——ECC作为非对称加密的基本算法。 ECC的210位算法的难度相当于RSA 2048的难度,性能相差一个数量级。那么椭圆算法的神圣之处在哪里?

如前所述,非对称算法无非是设计一个数学问题。它使单向计算非常方便,但反向计算很困难。例如,RSA 使用因式分解原理。将两个大素数相乘很容易,但将大数分解为素数却很困难。

椭圆算法其实ECC就是利用易乘难除的特点来设计一个乘法:K=k*G,其中大K为公钥,小k为私钥,G是生成点。从私钥推导出公钥很容易,只需要加上k G。但是,从公钥推导出私钥是很困难的,即无法计算出公钥K除以G. 当然,这个加法不能用在我们日常的整数加减法中。 ,而是由函数定义的特殊椭圆曲线上的哈希点的特征定义的加法。其中 p 是一个常数。不同的p可以设计成不同的曲线,比特币使用p = 2256 – 232 – 29 – 28 – 27 – 26 – 24 – 1,这条曲线的名字是secp256k1。这是一个非常大的数字,曲线上的点是一个复杂的散点图。为了表述方便,这里用一个小得多的17阶曲线来表示加法的定义:

screenshot

加法的定义是曲线上任意两点P1和P2,必须有第三点P3,即P1和P2的延长线与曲线的交点x轴映射的点, 并定义 P1+P2= P3。可以通过数学算法证明,该点满足加法和乘法交换律:

▲ A + B + C = A + (B + C)

▲ A(B+C) = AB + A*C

目前,我不会详细说明证明。需要注意的是,为了改进计算,还定义了无穷大点O(相当于0),满足:P1+O=P1)。 (想一想:如果P1 + P2 = O,那么P1 = -P2?)

ECC加密过程:

▲K = k G,大K为公钥,小k为私钥;

▲将明文编码成曲线上的一点M;

▲生成随机数r;

▲计算密文C1 =M + rK,C2 = r*G,其中大K为公钥;

▲对方收到密文后,可计算出C1 - kC2 = M,其中小k为私钥;

▲p>

▲攻击者获得C1、C2、公钥K和基点G。没有私钥,M无法计算。

ECC算法使用非常短的密钥,可以达到RSA2048的安全强度,计算速度提高了一个数量级比特币的加密算法,所以目前被广泛使用。国密中的SM2是基于ECC算法的。

隐私保护

由于区域区块链通过算法解决了一组不完全信任的参与者之间的信任问题。

隐私和不可篡改其实是矛盾的。为了实现不可篡改,其他人必须验证数据。例如,公链经过全网所有用户的验证;但隐私只希望授权人员可以验证,甚至希望其他人可以验证但不知道数据,例如盲签名、同态算法等。本节介绍在非安全环境中处理安全数据的一些方法。

数字信封

非对称算法可用于将机密信息安全地传输给指定的接收者。通常我们会使用对方的公钥进行加密,使用自己的私钥对数据进行签名。数字信封提供了更方便和强大的信息 只有特定的收件人才能阅读信息。

数字信封的功能与普通信封类似,将内容包裹起来,上面写着收件人,只有收件人才能打开信件。

如何制作信封:

▲准备一个生成器

CMSEnvelopedDataGenerator edGen = new CMSEnvelopedDataGenerator();

▲添加收件人:

edGen.addRecipientinfoGenerator(<接收人>)

接收者可以是公钥证书、普通公钥或密码,可以有多个。

▲做一个信封

打开信封时,只需使用您的公钥找到您的收件人信息,然后使用您持有的私钥提取内容。

群签名和环签名

通常以公司名义签订合同,例如A公司有3个合同经理C1、C2、C3,可以代表公司签订合同。

这里有几个要求:

▲签署的合同可以由公司使用公司的公钥进行验证;

▲合同可以进一步确认经理的身份;

▲如果经理辞职,个人证书被吊销,现有业务数据不受影响。

根据孙子定理,n个整数(公钥)的同余方程组有唯一解,那么理论上,它是根据成员{K1, K2, ..., Kn的公钥集合来选择的一组模M可以解出x作为组因子,这样组成员就可以使用自己的私钥ki和x D(ki, x, C) = P来解密密文。

类似的原理可以应用于数字签名来实现:

▲组签名:组织使用组公钥作为自己的公钥,可以验证签名属于指定机构,机构管理员可以进一步确定是哪个成员签名的。

▲ 环签名:对于匿名性要求,可以确定签名来自某个群组的成员,但无法确定是哪个成员签名的。

同态加密

隐私数据的处理通常在群组内部进行比特币的加密算法,但使用区块链技术后,隐私数据的处理可能需要在非中心化节点上进行。甚至处理第三方节点。这时,需要对要处理的数据进行保密处理。

比如股东A有100股,卖出60股,剩下的40股,就是减法运算。如果这个过程是在智能合约中,并且智能合约运行在多个不完全信任的节点上,如果需要对真实的份额数进行加密,则需要实现减法同态:

C3 = C1 - C2 ,其中 C1、2 和 3 都是密文。执行减法的节点无法知道实际余额和金额,但股东 A 可以用自己的密钥(C3) = P = P1-P2,其中 P 代表明文,D 代表解密算法)解密 D。

目前实现的算法主要有:

▲Paillier 方案

概率公钥加密,基于复合残差类,满足加法和乘法的同态性。

▲ BGV 和 RLWE 方案

BGV 和 RLWE 都是基于 LWE(Learning With Errors)问题的同态算法,支持加法、乘法、减法和移位操作的同态。源码在github-HElib上开源。

▲基于其他数学问题的解

如基于决策的问题等

p>

虽然全同态算法的实现取得了长足的进步,但其实现效率与实际要求相去甚远。