05密钥和地址

以太坊的基础技术之一是 密码学 cryptography,它是数学的一个分支,广泛用于计算机安全。密码学在希腊文中的意思是“秘密写作”,但密码学的科学不仅仅包含秘密协作,它被称为加密。加密也可以用来证明秘密的知识而不泄露该秘密(数字签名),或者证明数据的真实性(数字指纹)。这些类型的密码学证明是以太坊和大多数区块链系统的关键数学工具,广泛用于以太坊应用。讽刺的是,加密并不是以太坊的重要组成部分,因为它的通信和交易数据没有加密,也不需要加密以保护系统。在本章中,我们将以密钥和地址的形式介绍一些以太坊用来控制资金所有权的密码学。

简介

以太坊有两种不同类型的账户,可以拥有和控制ether:外部所有账户(EOA)和_合同_。在本节中,我们将研究使用密码学来确定外部所有账户(即私人密钥)对ether的所有权。

EOAs中以太的所有权通过 数字密钥 digital keys以太坊地址_和_数字签名 建立 。数字密钥实际上并不存储在区块链中或在以太坊网络上传输,而是由用户创建并存储在文件或称为_钱包_的简单数据库中。用户钱包中的数字密钥完全独立于以太坊协议,可以由用户的钱包软件生成和管理,无需参考区块链或访问互联网。数字密钥可实现以太坊的许多有趣特性,包括去中心化的信任和控制以及所有权证明。

以太坊交易需要将有效的数字签名包含在区块链中,该签名只能使用密钥生成;因此,任何拥有该密钥副本的人都可以控制ether。以太坊交易中的数字签名证明了资金的真正所有者。

数字密钥成对组成,密钥和公钥。将公钥视为类似于银行帐号,私钥类似于私密PIN,用于控制帐户。以太坊的用户很少看到这些数字密钥。在大多数情况下,它们存储在钱包文件内并由以太坊钱包软件管理。

在以太坊交易的付款部分中,预期收款人由_以太坊地址_表示,该地址与支票上的收款人名称相同(即“付款给谁”)。在大多数情况下,以太坊地址是从公钥生成并对应的。但是,并非所有以太坊地址都代表公钥。他们也可以代表合同,我们将在 [contracts] 中看到。以太坊地址是用户常会看到的唯一密钥表示,因为这是他们需要与世界分享的部分。

首先,我们将介绍密码学并解释以太坊使用的数学。接下来,我们将看看密钥是如何生成,存储和管理的。最后,我们将回顾用于表示私钥和公钥以及地址的各种编码格式。

公钥密码技术和加密货币

公钥密码技术是现代信息安全的核心概念。首先由Martin Hellman,Whitfield Diffie和Ralph Merkle在20世纪70年代公开发明的,这是一个巨大的突破,它激起了公众对密码学领域的广泛兴趣。在70年代以前,强大的密码学知识在政府的控制下,很少有公开的研究,直到公钥密码技术研究的公开发表。

公钥密码系统使用唯一的密钥来保护信息。这些独特的密钥基于具有独特属性的数学函数:它们很容易在一个方向上计算,但很难在相反方向上计算。基于这些数学函数,密码学能够创建数字密钥和不可伪造的数字签名,这些签名由数学定律保证。

例如,计算两个大素数的乘积是微不足道的。但是给定两个大素数的乘积,很难找到这两个素数(称为_素因式分解_问题)。假设我提供数字6895601并告诉你它是两个素数的乘积。找到这两个素数要比让它们相乘生产6895601要困难得多。

如果你知道一些秘密信息,这些数学函数可以很容易地被反转。在我们上面的例子中,如果我告诉你一个主素数是1931,你可以简单地用一个简单的除法找到另一个:6895601/1931 = 3571。这样的函数被称为_trapdoor函数_因为给定一个秘密信息,你可以采取一个快捷方式,使得反转该函数很简单。

在密码学中有用的另一类数学函数基于椭圆曲线上的算术运算。在椭圆曲线算术中,乘以模数是简单的,但是除法是不可能的(一个被称为_离散对数_的问题)。椭圆曲线密码术在现代计算机系统中被广泛使用,并且是以太坊(和其他加密货币)数字密钥和数字签名的基础。

Tip

更多关于密码学和现代密码学中使用的数学函数:

密码: https://en.wikipedia.org/wiki/Cryptography

Trapdoor函数: https://en.wikipedia.org/wiki/Trapdoor_function

素因子分解: https://en.wikipedia.org/wiki/Integer_factorization

离散对数: https://en.wikipedia.org/wiki/Discrete_logarithm

椭圆曲线密码学: https://en.wikipedia.org/wiki/Elliptic_curve_cryptography

在以太坊,我们使用公钥加密技术来创建一个密钥对,以控制对ether的访问,并允许我们对合同进行身份验证。密钥对由私钥和唯一公钥组成,并且被认为是“一对儿”,因为公钥是从私钥中派生出来的。公钥用于接收资金,私钥用于创建数字签名来签署交易以支付资金。数字签名也可用于验证合同的所有者或用户,我们将在 << contract_authentication>> 中看到。

公钥和私钥之间存在数学关系,允许私钥用于在消息上生成签名。该签名可以在不公开私钥的情况下使用公钥进行验证。

当使用ether时,当前所有者在交易中呈现她的公钥和签名(每次不同,但是使用相同的私钥创建)。通过公钥和签名,以太坊系统中的每个人都可以独立验证并接受交易的有效性,从而确认在转移ether的人拥有他们。

Tip

在大多数钱包实现中,为了方便起见,私钥和公钥一起存储为_key pair_。但是,公钥可以由私钥进行简单计算,因此只存储私钥也是可以的。

为什么使用不对称加密(公钥/私钥)?

为什么在以太坊使用非对称密码术?它不习惯“加密”(保密)交易。相反,非对称密码术的有用特性是产生数字签名的能力。私钥可应用产生交易的数字签名。这个签名只能由知道私钥的人制作。但是,任何有权访问公钥和交易签名的人都可以使用它们来验证。非对称加密技术的这一有用特性使任何人都可以验证每笔交易的每个签名,

私钥

私钥只是一个随机选取的数字。私有密钥的所有权和控制权是用户控制与相应以太坊地址相关联的所有资金的基础,也是对该地址的合同的访问权授权。通过证明交易中使用的资金的所有权,私钥用于创建花费ether所需的签名。私钥在任何时候都必须保密,因为向第三方透露密钥相当于让他们控制以太和由该密钥保证的合同。私钥还必须备份并防止意外丢失。如果它丢失了,无法恢复,它保护的资金也将永远丢失。

Tip

以太坊私钥只是一个数字。你可以使用硬币,铅笔和纸随机挑选你的私钥:投掷硬币256次,得到可以在以太坊钱包中使用的随机二进制数字作为私钥。然后可以从私钥生成公钥和地址。

从随机数生成私钥

生成密钥的第一步也是最重要的一步是找到一个安全的熵源或随机源。创建以太坊私钥基本上与“选择1到2256之间的数字”相同。只要不可预测和不可重复,用于选择该数字的确切方法并不重要。以太坊软件使用底层操作系统的随机数生成器生成256位熵(随机性)。通常,操作系统随机数生成器是由一个人为的随机源进行初始化的,这就是为什么可能会要求你将鼠标左右摇摆几秒钟,或者按下键盘上的随机键。

更确切地说,可能的私钥范围略小于2256。在以太坊中,私钥可以是+1+和+n-1+之间的任何数字,其中n是定义为使用的椭圆曲线的阶数的常数(n = 1.158*1077,略小于2256)(参见椭圆曲线密码学解释)。为了创建这样的密钥࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值