攻破区块链?也许你该读点密码学

栏目: 数据库 · 发布时间: 5年前

内容简介:密码学是区块链技术的核心。所有交易信息都被编码进区块当中,而这些区块连接在一起则形成区块链结构。在本文中,我们将呈递区块链密码学的基础知识。

密码学是区块链技术的核心。所有交易信息都被编码进区块当中,而这些区块连接在一起则形成区块链结构。在本文中,我们将呈递区块链密码学的基础知识。

01

密码学的历史

人们对于信息编码的需求几乎伴随着写作的发展出现。加密写作这一形式最先被应用于古埃及、美索不达米亚以及古印度。随着时间的推移,人们学会了使用特殊的 工具 来编码文本。最早的加密工具之一是密码棒(scytale),斯巴达军方使用其来进行战场通信。密码学技术一直在不断发展。一旦现有的加密方法不再奏效,人们就会发明出新的信息编码方案。 在第二次世界大战期间,第三帝国(德国)使用非常复杂的机电转子密码装置(即Enigma装置)来进行军事通信编码。Enigma装置的主要构造包括键盘、转子、电路板和灯。转子将输入文本转换为密码,其位置会随着每次击键发生改变。一个拥有一万人的解密中心最终耗费多年才成功破解Enigma代码。随着计算机时代的到来,密码学跃升到了一个新的高度。许多国家,尤其是美国,组建了全新的国家资助加密计划,其中就包括由NIST开发的安全哈希算法SHA-256。如今,在众多应用程序中,SHA-256哈希算法都被用于在BTC/" target="_blank"">比特币中创建区块。以太坊区块链网络使用的是Keccak算法。基于Keccak算法,一种新的哈希算法标准SHA-3问世,该新标准于2015年首次发布。

02

SHA-256和区块创建过程

创建区块的过程包括对交易进行验证和记录,此过程我们称之为挖矿(mining)。交易经过哈希运算后被记录在区块中。 所谓哈希,是指将任意长度的文本信息转换为固定长度值的过程。 比特币交易就是使用SHA-256算法进行哈希处理。 以下是通过SHA-256算法将任意文本及其对应哈希的示例:

攻破区块链?也许你该读点密码学

如上图所示,哈希是由64个字符组成,通过SHA-256算法所得到的结果为256位,即64个16进制字符。 SHA-256算法对于输入字母的大小写十分敏感,比如单词Hello和hello的哈希完全不同。 挖矿的目的是确定所生成区块的哈希, 以保证该哈希将适合某个特定区块链网络中的所有交易。随着创建单个区块所需的算力越来越多,挖矿的难度也会逐渐增加。随着创建区块所需的算力增长,哈希码中“零”的个数也在不断增长。目前在比特币中,其哈希的开头有20个连续的零,创建区块需要消耗大量的计算资源(computational resources)。然而,产生区块的时间上限是不变的,依旧保持在10分钟。在每生成2016个区块以后,比特币挖矿的难度将进行自动调整,这个调整的切换率在比特币代码发布时已经确定。因此, 创建区块的过程在于记录该区块内所有交易的哈希值
  • 前一个区块头的哈希
  • Merkle根哈希
  • 时间戳
  • 难度目标
  • 随机数值

Merkle根显示当前区块交易的哈希值,并根据Merkle树算法进行计算,也被称为二进制哈希树。其工作原理如下:

  1. 首先,系统计算区块内所有交易的哈希值;
  2. 其次,系统将这些交易成对划分,并计算出每个交易对的哈希;
  3. 最后,系统再次将所有这些交易对的哈希按对配对,并依次反复计算,直到计算出唯一的哈希码,即得到所谓的根。

攻破区块链?也许你该读点密码学

可以看出, Merkle树的结构是两两配对的 ,因此它必须拥有偶数个元素。如果Merkle树内的元素数量是奇数,那么系统会将落单的元素加倍以满足配对条件。

具有奇数元素数量的Merkle树如下所示:

攻破区块链?也许你该读点密码学

区块中的所有交易数据正是以这种方式进行计算与记录在区块中的。在区块链序列中,每个区块都与前一个和后一个区块相连。如果有人尝试修改区块中的某一笔交易,将会引起连锁反应。首先,这将改变被修改后的交易的哈希,并向上扩散改变Merkle树的分支,最终改变Merkle根的哈希。此后,被修改的Merkle根将改变该区块的区块头,由此改变区块链序列中的所有后续区块。也就是说,哪怕只是一次修改也将导致此前用于创建该特定区块序列的计算工作的报废,并引发重新计算。

03

用于验证比特币和以太坊交易的密码学知识

比特币和以太坊网络中的交易数据通过一种称为椭圆曲线数字签名算法(ECDSA)所产生的签名来进行验证,这种算法主要运用的是椭圆曲线和有限域。

签署交易和验证交易的过程是截然不同的。 我们使用一个被称为私钥(private key)的工具来签署交易,而使用另一个被称为公钥(public key)的工具来验证交易。私钥是在创建钱包的过程中随机生成的。公钥是基于有限域上的椭圆曲线乘法利用私钥导出的,也就是说椭圆曲线数字签名算法(ECDSA)就是用来产生公钥的算法。 只有签署交易的人才知道私钥,而公钥可以被任何想要验证交易的人(即矿工)获取。椭圆曲线主要包含以下参数:一个方程式(an equation),一个素数模(a prime modulo)和一个具有素数阶的基点(a base point with a prime order)。 椭圆曲线的方程为 y²=x³+ ax + b 。(备注:素数也称质数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数,如2、3、5、7、11等都是质数) 在比特币,以太坊,BKX, EOS ,Litecoin和许多其他加密货币中,其使用的椭圆曲线为secp256k1,该曲线方程的形式为y²=x³+ 7 mod p。 secp256k1曲线的素数模是2²⁵⁶–2³²–2⁹–2⁸–2⁷–2⁶–2⁴–1(或十六进制形式的FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F)。因为这个结果本质上是一个大素数,因此我们称之为素数模。实数域上的椭圆曲线如下所示: 攻破区块链?也许你该读点密码学

基点G具有素数阶n,从图形化的角度来看,n可以被视为基点不断相加直到其斜率无穷大或者成为垂线的次数。因此,在选定基点时,我们要确保其阶数是大素数。 对secp256k1来说,基点G的压缩形式为:G = 02 79 BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798,并且G的阶数n为:n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141。 要生成公钥,我们需要用私钥乘以G,即:   Keypub = Keypriv×G 通过私钥导出公钥并不困难。但是,Keypriv是一个非常大的数字。因此,想要通过公钥来获取私钥,并破解ECDSA算法,则需要进行计算 2¹²⁸个附加点的操作。对于普通计算机而言,这样的操作将花费超过100亿年,这是一个与整个宇宙的年龄相称的时间过程。

在生成私钥和公钥后,我们必须使用私钥对交易进行签名。 为此,我们需要完成以下操作:
  1. 计算z = hash( 交易 ) mod n;
  2. 选择随机整数k,其等于或大于1且小于或等于n-1(1≤k≤n-1);
  3. 通过将k乘以G得到点(x, y);需要注意的是,k 是一个临时的秘密值,其必须在步骤5之后立即销毁。泄漏秘密值 k 等同于泄漏私钥:如果攻击者知道 k 和签名,那么她(或他)就可以计算私钥。
  4. 计算r = x mod n。如果r = 0则返回步骤1;函数x mod p 仅返回除法的余数,例如78 mod 33 = 12 等同于 78 = (33*2)+12,98 mod 31 = 5 等同于 98 = (31*3)+5。注意,s 模 n的乘法逆表示为1/k mod n,并且1/k mod n 等于等式 kx = 1(mod n) 的解。这个方程在欧几里德算法的帮助下以下列方式求解:假设 s = 3且 n = 5,则方程显示为3x = 1(mod 5) ,或者利用欧几里德算法,得3x = b(mod 5) 。如果我们将其扩展到线性丢番图方程ax - by = c,或sx - ny = b,或 3x - 5y = 1,其中 x = 2且 y = 1(6–5=1) 中,那么 s-1将为2。
  5. 计算 s = (1/k mod n) × (z + r × Keypriv) mod n。如果s = 0,则返回步骤1;
  6. 计算对 (r, s)  将成为交易的签名。
在交易签名生成并被接收后,任何第三方都可以使用公钥通过以下方式对其进行验证:
  1. 确认签名元素,数字 r 和 s 均落在1到n-1的范围内;
  2. 计算 z = hash(交易) mod n;
  3. 计算 w = 1/s mod n;
  4. 计算 u = z × w mod n;
  5. 计算 v = r × w mod n;
  6. 计算点 (x, y) = (u × G) + (v × Keypub);
  7. 确认 r = x mod n。 如果r≠x mod n,则验证的签名无效。
如上所述,ECDSA算法的安全性依赖于整数 k 的随机性以及使用普通算力在合理时间内不可能导出私钥的特性。 这种全新的加密方式赋予区块链技术最高级别的安全性,打破它的唯一方法是创建一个具有超过2000个量子比特算力的量子计算机——这种做法,至少在目前看来,是不可能的。

以上所述就是小编给大家介绍的《攻破区块链?也许你该读点密码学》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计数组合学(卷2)

计数组合学(卷2)

斯坦利 / 机械工业出版社 / 2004-11-15 / 59.00元

本书介绍了生成函数组合、树、代数生成函数、D有限生成函数、非交换生成函数和对称函数。关于对称函数的论述只适用于研究生的入门课程并着重于组合学方面,尤其是Robinson-Schensted-Knuth算法,还讨论了对称函数与表示论之间的联系。附录(由Sergey Fomin编写)中更深入地讨论了对称函数理论,包括jeu de taquin和Littlewood-richardson规则。另外,书中......一起来看看 《计数组合学(卷2)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具

html转js在线工具
html转js在线工具

html转js在线工具