以太坊密码学

  • 时间:
  • 浏览:26
  • 来源:区块链技术网

本文介绍在以太坊密码学是如何工作的?什么是公钥和私钥,以及如何使用它们

-密码学-

密钥和地址

以太坊有两种不同类型的账户:外部账户(EOAs)和合约。以太币的所有权是通过私钥,以太坊地址,和数字签名建立的。私钥是每个用户与以太坊交互的中心。事实上,账户地址直接来源于私钥:它唯一确定了一个以太坊地址,也叫账户。

私钥

私钥只是一个随机选择的数字。私钥的所有权和控制权是用户控制相应以太坊地址所有资产的根本,此外,用户还可以访问授权该地址的合约。私钥用于在交易中进行签名,以证明所有权。

必须确保私钥,如果将它透露给第三方就等于交出了以太币和合约的控制权。并且,必须要备份,以免意外丢失。如果私钥遗失,是无法恢复的,它所保护的资产也就永远丢失了。

从随机数生成私钥

生成密钥的第一步,也是最重要的一步,就是找到一个安全的熵或者随机数的源。创建以太坊私钥涉及到要从$ 1-2^{256}$中选择数字。以太坊软件使用底层操作系统的随机数生成器生成256位随机数。

私钥可以是任何非零的数字,可以大到只略小于$ 2^{256}$的非常大的数——一个非常大的78位的数,大约$ 1.158×10^{77}$。

“$ 2^{256}$——以太坊私钥空间的大小——是一个非常大的数字,十进制大约为$ 10^{77}$”——Andreas Antonopoulo,《Mastering Ethereum: Building Smart Contracts and DApps》的作者

注意,私钥生成是离线的;它与以太坊网络没有任何通信,也不需要。

不要自己编写代码来生成随机数或者用你的编程语言随机生成一个简单的随机数。

公钥

以太坊公钥是椭圆曲线上的一个点,一个满足椭圆曲线等式的(x,y)坐标。

它由两个从私钥生成的数字组成,并且只能单向生成,这意味着,如果你有一个私钥,就可以计算出公钥,但是你不能从公钥计算出私钥。

公钥是私钥通过椭圆曲线乘法得来,是不可逆的:$K = k × G$,这里的$k$是私钥,$G$是常数点(生成点),$K$是公钥。

椭圆曲线乘法(×)与普通的乘法不同。它是一种单向函数:一个方向很容易计算出结果(乘法),而反方向则是不可能的(除法)。

椭圆曲线密码学

椭圆曲线密码学是非对称的,基于离散算法问题的公钥密码学,这种离散算法问题由椭圆曲线上的点的加法和乘法来表示。

以太坊使用与比特币相同的椭圆曲线,secp256k1——Andreas Antonopoulo,《Mastering Ethereum: Building Smart Contracts and DApps》的作者

-椭圆曲线-

以太坊使用一个特定的椭圆曲线和一组数学常数,标准定义为secp256k1secp256k1曲线由函数定义,该函数会产生一条椭圆曲线:

$y^2 = ( x^3 + 7) over ( \mathbb F p)$ or: $y^2 \lvert p \rvert = (x^3 +7) \lvert p \rvert$

mod p(素数)表明这条曲线在素数阶p的有限域上,p = 2²⁵⁶–2³²–2⁹–2⁸–2⁷–2⁶–2⁴–1,这是一个非常大的素数。

以太坊地址格式

以太坊地址是一个十六进制数,用公钥的 Keccak-256 哈希的后20字节表示。

生成公钥

我们可以用helpeth命令行工具来创建ICAP地址,用npm安装:

npm install -g helpeth

如果没有npm,你可能就得按照这里的说明来安装。

helpeth keyGenerate

输出:

Address: 0xe16c1623c1aa7d919cd2241d8b36d9e79c1be2a2
Address (checksum): 0xe16C1623c1AA7D919cd2241d8b36d9E79C1Be2A2
ICAP: XE56 QBY1 TCEL SB4U 7BTR QQRC IOUY 8UNS DK2
Public key: 0xaa931f5ee58735270821b3722866d8882d1948909532cf8ac2b3ef144ae8043363d1d3728b49f10c7cd78c38289c8012477473879f3b53169f2a677b7fbed0c7
Private key: 0x227dbb8586117d55284e26620bc76534dfbd2394be34cf4a09cb775d593b6f2b

现在我们将用给定的私钥来推出公钥,如下:

helpeth keyDetails \
  -p 0x227dbb8586117d55284e26620bc76534dfbd2394be34cf4a09cb775d593b6f2b

输出:

Address: 0xe16c1623c1aa7d919cd2241d8b36d9e79c1be2a2
Address (checksum): 0xe16C1623c1AA7D919cd2241d8b36d9E79C1Be2A2
ICAP: XE56 QBY1 TCEL SB4U 7BTR QQRC IOUY 8UNS DK2
Public key: 0xaa931f5ee58735270821b3722866d8882d1948909532cf8ac2b3ef144ae8043363d1d3728b49f10c7cd78c38289c8012477473879f3b53169f2a677b7fbed0c7

“互换客户端地址协议 (ICAP) 是一种以太坊地址编码,部分兼容国际银行帐号 (IBAN) 编码,为以太坊地址提供灵活、校验和且可互操作的编码。ICAP 地址可以对以太坊地址或在以太坊名称注册表中注册的通用名称进行编码。” — Andreas Antonopoulo,《Mastering Ethereum: Building Smart Contracts and DApps》的作者

原文:https://betterprogramming.pub/understanding-ethereum-cryptography-3ef7429eddce

猜你喜欢

比特币区块链挖矿原理入门由浅到深

自从开始学习区块链相关知识之后,脑袋中对于挖矿的机制开始有越来越多的问号。而网路上大部分的文章都只有讲到一些大面向,并没有谈到一些细节的部份,于是就稍微整理下关于挖矿的整体流程

2022-07-30

挖矿入门:没有矿机也能当矿工

虽然上一篇要大家不要买矿机,不过身为一个虚拟货币爱好者,还是很想体验如何挖矿的,所以来介绍一个租借算力来挖矿的网站:MiningRigRentals。MiningRigRent

2022-07-30

STEPN入门教学攻略:边跑步边赚钱的NFT游戏

STEPN是什么?这款可以让你边走边赚的区块链GameFi游戏,是一个透过近期大热「move-to-earn」方式进行的NFT项目,透过购买、交易运动鞋,以及跑步走路赚到GST

2022-07-30

Otherside入门指南|Otherside 开发套件(ODK) 介绍

虚拟世界游戏计划Otherside的首次航行已于昨(17)日晚间顺利完成,活动结束后官方也发布了一份作为游戏指南的Litepaper。究竟Litepaper中说了什么?又有什么

2022-07-30

智能合约安全审计入门篇 —— delegatecall (1)

By:小白@慢雾安全团队背景概述上篇文章中我们学习了合约中数据的存储方式以及如何读取合约中的各种数据。这次我们将带大家了解delegatecall函数。前置知识首先,我们先来了

2022-07-30