2022区块链钱包原理科普-关于钱包的基础密码学

当前位置:首页 > 币圈百科 > 2022区块链钱包原理科普-关于钱包的基础密码学

2022区块链钱包原理科普-关于钱包的基础密码学

2022-10-12币圈百科243

通过区块链,在人类历史上第一次,“私有财产的神圣性”通过技术得到了彻底和纯粹的保证。

一段深思熟虑又激动人心的话。

但是底层技术“密码学”是如何工作的,如何保障数字资产的安全?不管你是恋人还是投资人,都应该对背后的原理有多少了解,以免误会,闹出笑话,或者资产流失。因为我们总是听到一些无厘头的故事(帮我找密码!私钥发群!),都是因为对钱包的本质缺乏了解。

本文只谈钱包原型涉及的相关密码学,不包含密钥库、助记符、转账交易等。

如何生成钱包

区块链钱包原理科普:关于钱包的基础密码学

这是以太坊黄皮书中对钱包(私钥、公钥、地址)的描述,只有2行文字。主要解释是私钥通过ECDSA(椭圆曲线签名算法)导出公钥,然后通过Keccak单向哈希函数导出地址。

分解为3个步骤:

1。创建一个随机私钥(64位十六进制字符/256位/32字节)

2。导出公钥(128位十六进制字符/512位/64字节)

3。从公钥中导出地址(20字节)

区块链钱包原理科普:关于钱包的基础密码学

这是我从以太坊JS/Keytherum中剥离出来的JavaScript代码。关于黄皮书中公式的具体实现,只有6行代码。

这是一件美妙的事情。两行文字,六行代码承载着数十亿资产,但越简单越神秘。以上六行代码已经涵盖了密码学中的大部分技术,如蓑衣网小编2022随机数生成器、非对称加密、单向哈希函数等。下面,我将为大家解剖这六行代码,并逐一介绍其背后的相关密码学知识。

随机数

随机数用于生成私钥。如果随机数可以预测或复制,私钥马上就没用了。因此,保证随机数具有以下三个特征是必不可少的:

随机性:没有统计偏差,完全混沌的序列

不可预测性:不能从过去的序列中预测下一个数

;同样的序列除非保存,否则无法复制

软件本身就是因此,有了确定性代码,如果周期足够长,必然会出现同样的随机数。因此,要产生不可再现的随机数,就必须从不确定的物理现象中获取信息,如环境温度、环境噪声、鼠标移动、键盘输入间隔等。

在Linux内核中维护一个熵池,从设备驱动程序和其他来源收集环境噪声。熵是描述系统无序程度的物理量。系统的熵越大,系统的有序性越差,即不确定性越大。

所以在选择随机数方法生成私钥时,需要选择符合加密强度的随机数方法,比如Node中的crypto.randomBytes。当你调用crypto.randomBytes(32)方法时,它会等待熵池收集足够的信息,然后返回一个64位的随机数,也就是私钥。

const private key=crypto . random bytes(32)//private key . tostring(' hex '):ea 4692 a 11d 962 b 249 F8 f 0439d 642 a 9013 a 08807649311d 3672886d 72 D1 Fe 51

但是,另外,如果EVM中存在random操作码,矿工会生成不一致的随机数,无法达成一致意见。

目前社区也提出了相应的方案。Mist的作者Alex van de Sande提出使用块哈希来生成随机数。但由于矿工有操纵区块数据的能力,如果他们有能力也愿意放弃5块的奖励,理论上可以间接影响随机数,所以并不完全安全可靠。

为了解决矿工可能作恶的问题,国内社区提出了燃道:一种作为以太坊项目RNG的道,来建造一种每个人都可以参与的道。通过经济激励,所有参与者共同决定一个随机数。在冉道的基础上,维塔利克布特林还提出了冉道方案。有兴趣的可以看看。

非对称加密

在对称加密中,由于加密密钥和解密密钥是相同的,所以必须将密钥分发给接收方进行解密。但是,在发送密钥的过程中,窃听者可以窃取密钥并解密。而不是发送密钥,接收方无法解密。钥匙一定要发,但是不能发。这个问题被称为密钥分发问题。一般解决方案有提前共享、密钥分发中心、Diffie-Hellman密钥交换等。但在非对称加密方案出现之前,不需要将解密密钥分发给接收方,密钥分发问题得到了完美的解决。

在非对称加密中,密钥分为加密密钥和解密密钥,也就是通常所说的公钥和私钥。公钥和私钥是一一对应的,公钥加密的密文只能用与公钥配对的私钥解密。

好像有点复杂。先牺牲密码学的男女主角爱丽丝和鲍勃,通俗的梳理一下:

发送者:鲍勃,接收者:爱丽丝,窃听者:夏娃

1。爱丽丝生成一个密钥对(私钥和公钥),私钥由爱丽丝本人妥善保管

2。Alice将她的公钥发送给Bob,即使它被Eve

3窃取。Bob用Alice的公钥加密该消息,并将其发送给Alice

4。密文可能被Eve窃取,但他无法用公钥解密

5。Alice用自己的私钥解密密文

区块链钱包原理科普:关于钱包的基础密码学当我们调用secp256k1.publicKeyCreate获取公钥时,实际上使用的是非对称加密中的椭圆曲线算法。算法可以从私钥推导出公钥,这是一个不可逆的过程:k=k * g,当常数点G给定时,利用已知的私钥K找到公钥K并不困难,但另一方面,利用已知的公钥K找到私钥K就非常困难,这就是椭圆曲线算法中的离散对数问题,也是为什么你可以和别人分享你的地址(或公钥),但不能暴露你的私钥。

const public key=secp 256k 1 . public key create(private key,False)。slice(1)//public key . tostring(' hex '):1e3f 1532 e 3285 b02.45d91a36a8d78cb6bef8

为了形象地展示椭圆曲线算法是如何从私钥导出公钥的,我们将用一个简单的整数作为私钥k,求公钥k=k * g,在一条椭圆曲线中,点的相加相当于从该点画一条切线来寻找另一个与曲线相交的点。点,然后映射到X轴。下图是从曲线中获取G,2G,4G,8G的几何运算。

单向哈希函数区块链钱包原理科普:关于钱包的基础密码学有一个输入和一个输出,其中输入称为消息,输出称为哈希值。哈希值也称为消息摘要或指纹。单向哈希函数可以根据消息的内容计算哈希值,哈希值可以用来检查消息的完整性。

单向哈希函数有以下四个特征:

1。它可以计算固定长度的散列值

2。它可以快速计算出哈希值

3。它有单向

4。不同的消息有不同的哈希值

[ Keccak使用海绵函数对公钥和初始内部状态进行异或运算,得到一个32字节的哈希值,后面的20个字节转换成40位的十六进制字符,就是地址。

const address=createkeccakahash(' keccak 256 ')。更新(公共密钥)。摘要()。slice(-20)//address . tostring(' hex '):7a 48 AC 1 BF 3943 b 2 a 7 a 4 ca 4999 ccbbb 0 e 99950 c

以太坊中有很多应用单向哈希函数的地方,比如:

1。矿工需要不断计算特定数据的哈希值。当哈希值满足难度要求时,矿工可以广播该块并获得奖励。

2。根据默克尔树的根hash的值是否一致来判断块中的事务是否被篡改

题外话,有段时间我很好奇单向hash函数或者hash函数中的“Hash”是什么意思。后来经过查询发现,“Hash”在古法语中的原意是“斧头”,后来引申为“chop”,只是一种单向哈希函数的形象比喻,将消息切碎,蓑衣网小编2022混合成固定长度的哈希值。后来,赫伯特海尔曼的《Digital Computer System Principles》成为广为流传的术语。

以上是区块链钱包原理的科普:关于钱包基础密码学的详细内容,请关注coir.com其他相关文章了解更多关于钱包基础密码学的知识!

2022区块链钱包原理科普-关于钱包的基础密码学 | 分享给朋友: