读《精通比特币2》有感 + 自己的理解与补充知识
补充的教材:《密码学原理与实践》(第三版)、《密码编码学与网络安全 原理与实践》(第六版)
前言:今天读到了《精通比特币2》的第四章,但是文章讲的太简略了,如果没有密码学补充知识就很难看懂,故这里进行一些补充说明,希望能够更好地帮助大家理解,如果博客有误还请大家在评论区指正,谢谢!
一、介绍
- 密码体制:公钥密码体制
- 私钥、公钥、地址的关系:私钥是随机选出的一个数字(使用操作系统底层的随机数生成器产生256位随机数,如果小于n则可以作为私钥),然后通过椭圆曲线算法生成公钥,再利用SHA256和RIPEMD160生成地址(以公钥 K作为输入,计算其SHA256哈希,然后对结果再计算RIPEMD160 哈希,得到一个长度为160位(20字节)的数字)
二、基础知识
1、韦达公式
这个我确实给忘了哈哈哈,只用看三个根相加即可
2、Abel群
只要记住它除了满足一般的群公理,即运算的结合律、G 有单位元、所有 G 的元素都有逆元之外,还满足交换律公理。
- 封闭性:若a和b属于G,则a*b也属于G
- 结合性:在G中a,b,c,有(a·b)·c=a·(b·c)
- 单位元:G中存在元素e使得对G中的a,e·a=a·e=a
- 逆元:对G中任何a存在a’使得 a’·a=a`a’=e
- 交换性:对G中a,b,有a·b = b·a
3、本原元
如果模幂运算 ax = 1 (mod n),记满足该方程的最小正整数m为模n下a的阶记为ordn(a),并且如果a的阶等于 φ \varphi φ(n),则称a为n的本原元,其中 φ \varphi φ(n)=n-1
其中,ordn(a)必然是 φ \varphi φ(n)=n-1的因子,所以求a的阶只需要计算 ad (mod n)即可,这里d是 φ \varphi φ(n)=n-1的因子。
例如:求n=23的本原元
三、椭圆曲线
1、实数上的椭圆曲线
这里通过《密码学原理与实践》(第三版)上的案例对椭圆曲线进行解释,便于后面理解比特币的椭圆曲线。
2、模素数的椭圆曲线
有了上面的基础,我相信你也很快可以看懂啦
3、比特币中的椭圆曲线
椭圆曲线方程:
椭圆曲线图片:
乘法的快速计算(图像法)
倍乘法的流程如下:(参考博客:https://blog.csdn.net/u012391423/article/details/116233630)
- 过 G点做切线 , 与椭圆曲线相交的点即为 -2G , -2G = G + G
- -2G点 上下翻转 , 得到 2G交点
- 过 2G点做切线 , 可以计算获得 -4G = -2G + -2G
- -4G点 上下翻转 , 得到 4G交点
- 依次类推…
四、公钥的生成
比特币的私钥是一个随机生成的数字k,这里可以看到教材中最后那个加密案例,这个k相当于那个k,然后将其与椭圆曲线上预定的生成点G相乘(这里我还没有太清楚这个生成点G是一直不变还是会相应改变),得到的曲线上另一个点就是公钥K,即:K=k*G (是不可逆的,因为难算)
这里的乘法就按照上面教的做即可。
K=(x,y)
tips:
- 这篇回答中跑了一下代码,可以看看https://zhuanlan.zhihu.com/p/36705648
- 为什么比特币中的椭圆曲线不可逆
https://blog.csdn.net/superbfly/article/details/88639055?
假定我们现在已知点8G(公钥K),我们可以反向推出它关于x轴的对称点-8G。到了这一步我们会发现,想通过-8G反向堆出4G变成了不可能的事情。因为-8G是椭圆曲线上的一个点,在平面上过这个点有无数条直线,这里或许会有一条或者几条与椭圆曲线相切,但这些切线我们却无从求得。或许我们可以逐条测试,通过穷举法找出过点-8G且与椭圆曲线相切的直线,进而得到可能的点4G。但不要忘记,我们只是进行了反向推理的第一步,我们想从4G得到2G也需要同样的计算量。这还只是我们将私钥k定为了8,如果私钥k真的是我们上面的1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD,那么计算量将是不可想象的。
五、比特币地址
还没看,看了补充