以太坊公钥 大小写(以太坊公钥作用)
在区块链的钱包中,私钥可以产生出公钥,而反过来要想从公钥推算出私钥则是不可能的。用公钥加密的信息可以用私钥来解密,而用私钥签名的信息则由公钥来验证,验证通过后才能证明该信息确实为私钥持有人所发布。以 BTC 为例的话,在这个过程中最重要的角色的就是" 椭圆曲线加密算法"。
有些人会以为 BTC 跟 ETH 是不同的链所以用的椭圆曲线并不相同,但事实上两个链使用的都是相同的 secp256k1 曲线,所以获得公钥的方式完全一样,差别在从公钥生成地址的过程,接下来我们会先介绍如何安全的生成私钥,然后说明 ETH 如何从地址验证由私钥生成的公钥。
私钥的规格
私钥必须为正整数且必须小于 secp256k1 曲线的阶 (secp256k1 的阶为FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141),每个点可由一组 256位代表,而 256 位正好是 32 个字节,所以我们需要提供这个曲线算法 32 个字节的数据。
换句话说,BTC 及 ETH的私钥都是一组 32 字节的字符串,但它也可以是二进制字符串、Base64字符串、WIF 密钥、助记码( mnemonic phrase )、十六进制字符串。
安全的私钥生成
既然都知道他们使用的是同一条曲线,那我们其实就可以使用 BTC 社群比较信任的 bitaddress.org 来生成我们的私钥,(用 MEW 或 Metamask 也都是不错的选择,至少他可以不是一串裸露在外的私钥),但如果有良好安全意识的话,我们甚至不应该用浏览器来生成我们重要的私钥 (可以看看 Reddit 上的讨论),所以我们将用 python 设计一个更简单的 bitaddress。
了解 Bitaddress原理
Bitaddress 做了三件事情。首先,初始化字节数组,然后尝试从用户的计算机获得尽可能多的熵,根据用户的输入填满数组,最后生成私钥。
Bitaddress 使用 256 字节的数组来存储熵。这个数组是被循环覆写的,所以当数组第一次填满时,索引变为零,然后覆写过程再次开始。
程序从 window.crypto 生成一个 256 字节的数组。然后写入一个时间戳来获得 4 个字节的熵。在这之后,它获得一些其他的数据包括屏幕大小,时区,浏览器扩充套件,地区等。来获得另外 6 个字节。
初始化后,使用者持续输入来覆写初始字节。当移动光标时,程序会写入光标的位置。当按下按钮时,程序会写入按下的按钮的字符代码。
最后,bitaddress 使用累积的熵来生成私钥。bitaddress 使用名为 ARC4 的 RNG算法。用当前时间以及收集的熵初始化ARC4,然后逐个取得字节,总共取 32 次。
初始化我们自己的种子池
我们从加密 RNG 和时间戳中写入一些字节。__seed_int 以及__seed_byte是将熵插入池的数组中的两个函式,而我们使用secrets生成我们的随机数。
由输入填充种子池
这里我们先写入一个时间戳,然后写入用户输入的字符串。
生成私钥
首先使用我们的池生成 32 位的数字,并确保我们的私钥在范围内(1, CURVE_ORDER),然后为了方便,我们转为十六进制并删除 0x 的部分。
生成ETH公钥
将我们刚刚的私钥代入椭圆曲线,我们会得到一个 64 字节的整数,它是两个 32 字节的整数,代表椭圆曲线上连接在一起的 X 点和 Y 点。
校验和 (ERC-55)
比特币通过将公钥哈希后并获得回传值的前 4 个字节来创建校验和,如果不添加校验和则无法获得有效地址。
但以太坊一开始并没有校验和机制来验证公钥的完整性。直到 Vitalik Buterin 在 2016 年时引入了校验和机制,也就是 EIP-55,并且后来被各家钱包和交易所采用。
将校验和添加到以太坊钱包地址使其区分大小写
首先,获得地址的 Keccak-256 哈希值。需要注意的是,将此地址传递至哈希函数时不能有0x的部分。
其次,依序迭代初始地址的字节。如果哈希值的第 i 个字节大于或等于 8,则将第 i 个地址的字符转换为大写,否则将其保留为小写。
最后,在回传的字符串开头加回0x。如果忽略大小写,校验和地址会与初始地址相同。但使用大写字母的地址让任何人都能检验地址是否有效。
此校验和有几个好处:
1. 向后兼容许多接受混合大小写的十六进制解析器,将来也能轻松引入;
2. 保持长度为 40 个字符;
3. 平均每个地址将有 15 个校验位,如果输入错误,随机生成的地址意外通过检查的净概率将为0.0247%,虽然不如 4 字节的校验代码好,但比 ICAP 提高了约 50 倍;
总结
为以太坊创建钱包地址相较于比特币简单得多。我们需要做的就只是将私钥丢到椭圆曲线,然后再把得到的公钥丢到Keccak-256,最后撷取该哈希值的后面 20 个字节。
相关内容
相关资讯
-
虚拟币平台钱包(虚拟币 钱包)
虚拟货币钱包APP哪一种比较安全好用鏍规嵁銆婂叧浜庨槻鑼冧唬甯佸彂琛岃瀺璧勯闄╃殑鍏憡銆嬶紝鎴戝浗澧冨唴娌℃湁鎵瑰噯鐨勬暟瀛楄揣甯佷氦鏄撳钩鍙般€傛牴鎹垜鍥界殑鏁板瓧璐у竵鐩戠瑙勫畾锛屾姇璧勮
-
虚拟货币上币的平台 国内正规的虚拟货币交易有哪些
br/>鐏竵鍏ㄧ悆涓撲笟绔欐槸鐏竵闆嗗洟鏃椾笅鏈嶅姟浜庡叏鐞冧笓涓氫氦鏄撶敤鎴风殑鍒涙柊鏁板瓧璧勪骇鍥介檯绔欙紝鑷村姏浜庡彂鐜颁紭璐ㄧ殑鍒涙柊鏁板瓧璧勪骇鎶曡祫鏈轰細锛岀洰鍓嶆彁渚涘洓鍗佸绉嶆暟
-
虚拟币哪个平台好 虚拟币哪个平台好用
目前国内比较好的数字货币交易平台应该属于三巨头,不管从数字货币成交量资金量来讲是从网站的安全性来讲,币安、火币、OKEX这三家大平台交易所都是非常不错的
-
股指期货对冲平仓,股指期货对冲原理
现手最近一笔的成交手数开仓是指开新的多头仓位或者新的空头仓位,也就是新买进或者新卖出一定手数的股指期货合约平仓如果你已经开了多头仓位的话,就需要卖出手上的合约来进行对冲平仓
-
2016年期货双边手续费 2016期货最新手续费
但如果你有认识好的期货客户经理,那你开的户可以只在交易所收取的标准上+0.01元每手,还是黄金,你交的总手续费只需10.01元
-
比特币大牛(比特币大牛市)
在巴比特创始人长铗看来:“中本聪在密码朋克组中是一个年轻后辈(可能30岁出头),但地位十分显赫,在这个密码朋克组中,有菲利普·希默曼(PGP技术的开发者)、约翰·吉尔摩(太阳微系统公司的明星员工)、斯
实时快讯
-
半年前黄金电子货币?电子货币 金属货币
-
半年前鼓励数字货币(数字货币有哪些)
-
半年前辐射货币代码,辐射4动力装甲代码
-
半年前国际汇兑货币,国际汇兑的两种方法
-
半年前黄金储备 基础货币?基础货币和储备货币的区别
-
半年前宏观微观货币,货币的四个职能
-
半年前黄金 货币 关系(黄金货币投资)
-
半年前国际货币基金组织份额(收益好的十大货币基金)