内容简介:密码学是区块链技术的核心。所有交易信息都被编码进区块当中,而这些区块连接在一起则形成区块链结构。在本文中,我们将呈递区块链密码学的基础知识。
密码学是区块链技术的核心。所有交易信息都被编码进区块当中,而这些区块连接在一起则形成区块链结构。在本文中,我们将呈递区块链密码学的基础知识。
01
密码学的历史
02
SHA-256和区块创建过程
创建区块的过程包括对交易进行验证和记录,此过程我们称之为挖矿(mining)。交易经过哈希运算后被记录在区块中。 所谓哈希,是指将任意长度的文本信息转换为固定长度值的过程。 比特币交易就是使用SHA-256算法进行哈希处理。 以下是通过SHA-256算法将任意文本及其对应哈希的示例:
- 前一个区块头的哈希
- Merkle根哈希
- 时间戳
- 难度目标
- 随机数值
Merkle根显示当前区块交易的哈希值,并根据Merkle树算法进行计算,也被称为二进制哈希树。其工作原理如下:
- 首先,系统计算区块内所有交易的哈希值;
- 其次,系统将这些交易成对划分,并计算出每个交易对的哈希;
- 最后,系统再次将所有这些交易对的哈希按对配对,并依次反复计算,直到计算出唯一的哈希码,即得到所谓的根。
可以看出, Merkle树的结构是两两配对的 ,因此它必须拥有偶数个元素。如果Merkle树内的元素数量是奇数,那么系统会将落单的元素加倍以满足配对条件。
具有奇数元素数量的Merkle树如下所示:
区块中的所有交易数据正是以这种方式进行计算与记录在区块中的。在区块链序列中,每个区块都与前一个和后一个区块相连。如果有人尝试修改区块中的某一笔交易,将会引起连锁反应。首先,这将改变被修改后的交易的哈希,并向上扩散改变Merkle树的分支,最终改变Merkle根的哈希。此后,被修改的Merkle根将改变该区块的区块头,由此改变区块链序列中的所有后续区块。也就是说,哪怕只是一次修改也将导致此前用于创建该特定区块序列的计算工作的报废,并引发重新计算。
03
用于验证比特币和以太坊交易的密码学知识
比特币和以太坊网络中的交易数据通过一种称为椭圆曲线数字签名算法(ECDSA)所产生的签名来进行验证,这种算法主要运用的是椭圆曲线和有限域。
基点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亿年,这是一个与整个宇宙的年龄相称的时间过程。
- 计算z = hash( 交易 ) mod n;
- 选择随机整数k,其等于或大于1且小于或等于n-1(1≤k≤n-1);
- 通过将k乘以G得到点(x, y);需要注意的是,k 是一个临时的秘密值,其必须在步骤5之后立即销毁。泄漏秘密值 k 等同于泄漏私钥:如果攻击者知道 k 和签名,那么她(或他)就可以计算私钥。
- 计算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。
- 计算 s = (1/k mod n) × (z + r × Keypriv) mod n。如果s = 0,则返回步骤1;
- 计算对 (r, s) 将成为交易的签名。
- 确认签名元素,数字 r 和 s 均落在1到n-1的范围内;
- 计算 z = hash(交易) mod n;
- 计算 w = 1/s mod n;
- 计算 u = z × w mod n;
- 计算 v = r × w mod n;
- 计算点 (x, y) = (u × G) + (v × Keypub);
- 确认 r = x mod n。 如果r≠x mod n,则验证的签名无效。
以上所述就是小编给大家介绍的《攻破区块链?也许你该读点密码学》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 区块链快速入门(六)——区块链密码学与安全相关技术
- 区块链-密码学与安全技术
- 解密区块链中的密码学
- 区块链密码学如何对抗量子计算攻击?
- 简述密码学应用四阶段:对称加密、公钥加密、区块链与高等密码学
- 密码学初学者可以理解的密码学库
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Open Data Structures
Pat Morin / AU Press / 2013-6 / USD 29.66
Offered as an introduction to the field of data structures and algorithms, Open Data Structures covers the implementation and analysis of data structures for sequences (lists), queues, priority queues......一起来看看 《Open Data Structures》 这本书的介绍吧!