公钥密码技术和加密货币

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

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

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

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

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

Tip

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

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

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

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

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

Tip

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

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

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