主页 > imtoken转账手续费 > 以太坊学习一:密码学

以太坊学习一:密码学

imtoken转账手续费 2023-08-29 05:08:34

密码学是区块链最基础的技术之一。 这些知识包括信息转换、加解密和验证过程,以及以太坊地址和交易Hash、交易信息RLP编码、基于椭圆曲线的公私钥签名、区块Merkle树交易。

散列

哈希在数学上也称为“散列”,是指将任意长度的二进制(明文)转换成较短的定长二进制(哈希值)。 Hash算法的特点如下。

输出长度小于输入长度 对任何输入进行快速高效的计算 强大的抗碰撞性:任何输入变化都会影响大量输出位。 只要输入数据稍有变化,一个结果就会相差很大,而且无法提前预测结果。单向值:输入不由输出决定

当然,不同的输入有时可能会产生相同的输出,输出值相同的概率就成了Hash的碰撞率。 Hash本质上是针对不同的信息,通过合适的方法生成消息摘要,以便在后续的使用中更好的识别。 Hash函数的实现经过多年的发展,已经包含了很多类型和实现。 ,有强调简单快速实现的,有强调Hash结果碰撞率小的,还有强调算法实现更高安全性的。 总之,应根据不同的应用场景选择不同的、合适的Hash算法。目前比较知名的Hash函数有MD5、SHA系列、PBKDF2等。

MD5:Message-Digest Algorithm,一种应用广泛的密码哈希函数,可以生成一个128位(16字节)的哈希值(hash value),用于保证信息传输的完整性和一致性。 MD5 由美国密码学家 Ronald Linn Rivest 设计并于 1992 年发布,用于替代 MD4 算法。 此算法的过程在 RFC 1321 标准中指定。 1996年后,该算法被证明存在弱点,可以被破解。 对于安全性要求高的数据,专家一般建议使用其他算法,如SHA-2。 2004年确认MD5算法不能防止碰撞(collision),所以不适合做安全认证,比如SSL公钥认证或者数字签名。

SHA家族的一系列Hash算法是在全球范围内广泛使用的安全Hash算法,常用于数字签名和验证场景,其中SHA-1应用尤为广泛。 然而,2005年2月,山东大学的王小云等人发表了完整版的SHA-1攻击。 它只需要小于 2 的 69 次方的计算复杂度就可以找到一组碰撞。 根据摩尔定律,随着计算机计算能力的提高以太坊私钥碰撞软件,SHA-1 很快被认为是一种不安全的 Hash 算法。之后,NIST 先后发布了 SHA-224、SHA-256、SHA-384 和 SHA-512,并且后四个成为 SHA-2。 SHA-256 和 SHA-512 是非常新的哈希函数。 结构相同,只是循环次数不同。 SHA-224和SHA-384是前两种Hash函数的截断版本,使用不同的初始值进行计算。

以太坊挖矿软件官网_以太坊私钥碰撞软件_以太坊私钥未加密

Keccak算法

Keccak 是一种被选为 SHA-3 标准的单向散列函数算法。 它在设计上与 SHA-2 有很大不同。 之前针对SHA-2的攻击方式无法有效攻击Keccak。

Keccak 算法使用一种称为海绵的结构。 海绵结构由两个阶段组成,一个是吸收阶段,另一个称为压缩阶段。 在海绵函数中,输入数据被分成固定长度的数据包。 每一组作为迭代的输入,上一次迭代的输出也反馈给下一次迭代,最终生成输出哈希值。 输入数据没有长度限制,输出哈希值的位长分为:224、256、384、512。

r:比特率(bit rate),它的值是每个输入块的长度

c:capacity(容量),它的长度是输出长度的两倍

b:向量的长度,b=r+c

在这里插入图片描述

以太坊私钥未加密_以太坊私钥碰撞软件_以太坊挖矿软件官网

填充:数据填充的目的是使填充数据的长度为r的整数倍,因为迭代压缩是对r位数据块进行的,如果数据的长度不是r的整数倍,最后一条数据会是一个short block,这个不会被处理。

以算法Keccak-256,输入abc为例显示补位的过程. a, b, c对应的ASCII码分别是97, 98, 99;于是原始信息的二进制编码为:01100001 01100010 01100011。此时r  = 1088。
① 补一个“1” :0110000101100010 01100011 1
② 补1062个“0”:

以太坊私钥未加密_以太坊私钥碰撞软件_以太坊挖矿软件官网

01100001 01100010 01100011 10000000 00000000 … 00000000 ③ 补一个“1” ,得到1088比特的数据:

Keccak算法的整体结构如下:

在这里插入图片描述

在这里插入图片描述

以太坊私钥碰撞软件_以太坊私钥未加密_以太坊挖矿软件官网

在这里插入图片描述

椭圆曲线加解密算法

椭圆曲线密码学(ECC)和签名算法(Ellipse Curve Digital Signature Algorithm,ECDSA)广泛应用于数字货币和区块链场景。 ECC不同于基于大素数分解难度的加密算法。 它所依赖的数学原理是解决椭圆曲线上离散对数问题的难度。

在椭圆曲线密码学(ECC)中,使用了一种特殊形式的椭圆曲线,即在有限域上定义的椭圆曲线。 其方程如下:

y²=x³+ax+b(mod p)

这里p是一个素数,a和b是两个小于p的非负整数,它们满足:4a³+27b²(mod p)≠0 其中,x,y,a,b ∈ Fp,则满足点公式(x,y)和无穷远点O构成椭圆曲线E。

在数学上,一个椭圆曲线群可以看作是曲线上所有点和无限原点O的集合。对于椭圆曲线上两个不同的点P和Q,若P+Q = R,则表示P和Q与椭圆曲线相交一点(-R),-R与x轴对称的点为R,如下图。

以太坊私钥未加密_以太坊挖矿软件官网_以太坊私钥碰撞软件

在这里插入图片描述

从上图可以看出,椭圆曲线上的加法运算,加法得到的点还是在椭圆曲线上。 在椭圆曲线上的两点P和Q之间以太坊私钥碰撞软件,存在一个方程kP = P+P+P+...+P = Q。如果知道k和P,那么求解Q点就比较简单,但是如果点Q和点 P 已知,求解有多少个 k 使得 kP=Q 是极其困难的。 椭圆曲线的密码学,它使用求解 k 的难度作为安全性的理论基础。 在应用层面,一般使用k作为私钥,Q作为公钥。

椭圆曲线离散对数问题ECDLP定义如下:给定一个素数p和一条椭圆曲线E,对于Q=kP,已知P和Q,求一个小于p的正整数k。 可以证明,已知k和P计算Q比较容易,但是从Q和P计算k比较困难。目前还没有有效的方法解决这个问题,这就是椭圆曲线加密的原理算法。

以太坊上使用的椭圆曲线与比特币相同,均采用密码学专业公司Certicom推荐的曲线——secp256k1。 椭圆曲线secp256k1在二维空间表示为y²=x³+ax+b,满足六元组关系D=(p, a, b, G, n, h)

由于自身结构的特殊性,对secp256k1进行了优化实现,其性能较其他曲线提升约30%,还能有效抵御破解攻击。

在区块链技术中,常用椭圆曲线代替RSA,因为椭圆曲线等同于RSA,具有以下四个显着特点:

更高的安全性能,160位的ECC密钥相当于1024位的RAS安全强度更快的处理速度,ECC在私钥处理速度、更低的带宽要求和更小的存储空间方面比RSA快很多