一、如何生成bitcoin 地址长度不一样
1.首先你要知道公钥和私钥的概念(已经懂的不用看这部分了)
公钥私钥是现代密码学分支非对称性加密里面的名词,通常都是用公钥加密信息,用私钥解密信息,为什么要这样?因为你看电视剧的时候,发电报那种都是对称性加密,这种加密方式缺点是显而易见的,如果被人知道了密钥和加密方法,于是按照加密方法反着来就能解密。一直到非对称性加密这种情况才有所改观,公钥就是可以对全世界公开的密钥,比如你和google通讯,用google给的1024位的公钥加密,送到google那里只有他有对应的私钥,只有他能解密,于是就保证了通讯安全
2.比特币主要用了ECDSA,也就是椭圆曲线签名算法,这个算法有两个特性,注意这两点对下面至关重要
a.只要知道私钥,可以算出相应的公钥;
b.你用私钥签名过的东西,可以用公钥算一下是不是你签的;
3.知识准备完了,下面开始讲比特币的交易,比特币其实没有钱包,只有交易账单,整个比特币就是一大堆交易账单
比如:
账单1从A转到B转了XXX比特币
账单2从B转到C和D转了XXX比特币
账单3从C转到E转了XXX比特币
。。。。任何人只要下载了客户端都能接收到从比特币成立那一天起的所有账单,所以,只要把所有账单都下载全了自然知道每个账户上应该剩多少钱(这里仔细思考下)
4.比特币的账户,就是刚才讲的一段公钥
5.下面我开始贴一个比特币的账单,这里是核心部分了!!!每个账单都是一段数据,你签完了以后会发送到全网,把数据结构逆向成易懂的中文解释如下:
FROM(谁发送的,包括两部分)
Previous tx:你要花的这笔钱的那个账单的id,也就是说,你花的任何一笔钱都应该有人转给你过,需要出示那个账单的id
scriptSig:你对这笔交易的签名,就是把单子用你的私钥做hash,只有你能做这个hash
TO(谁接受,包括两部分)
Value:要发多少
scriptPubKey:对方的公钥,比特币账户就是一段公钥
6.等你签完单子以后,开始往全网发送,怎么发呢?比特币通讯没那么复杂,你可以类比成IRC频道,但和普通的“IRC”不同的是,任何一个客户端都是一台“IRC”服务器,当你启动客户端的时候,会接收到周围的有公网IP的客户端地址,就是“服务器”列表,这个列表也不断的刷新,都是其他的比特币用户,于是你在这个“IRC”喊一句话的时候,周围的人会听到,进而扩散的全世界。
7.把签单发送到全世界以后,所有收到这个单子的客户端会效验你这个单子对不对,比如会效验你的签名,是不是你发的,会效验你是否有那么多钱(根据历史交易可以推算出你有多少钱可以花)
如果这个交易大家算过没问题了,基本上就算转账成功了。
8.实际上现在对方已经接受了比特币,但是要想花的话,他得有那个地址(公钥)对应的私钥。于是他就能填下一个单子的 FROM头部,Previous tx就是刚才这笔交易的序号,scriptSig填用他私钥签名过的hash
如此往复。。。
二、ECC椭圆曲线加密算法(一)
btc address: 1FmWXNJT3jVKaHBQs2gAs6PLGVWx1zPPHf
eth address: 0xd91c747b4a76B8013Aa336Cbc52FD95a7a9BD3D9
随着区块链的大热,椭圆曲线算法也成了密码学的热门话题。在Bitcoin生成地址中使用到了椭圆曲线加密算法。
椭圆曲线的一般表现形式:
椭圆曲线其实不是椭圆形的,而是下面的图形:
Bitcoin使用了 secp256k1这条特殊的椭圆曲线,公式是:
这个东西怎么加密的呢?
19世纪挪威青年尼尔斯·阿贝尔从普通的代数运算中,抽象出了加群(也叫阿贝尔群或交换群),使得在加群中,实数的算法和椭圆曲线的算法得到了统一。是什么意思呢?
我们在实数中,使用的加减乘除,同样可以用在椭圆曲线中!
对的,椭圆曲线也可以有加法、乘法运算。
数学中的群是一个集合,我们为它定义了一个二元运算,我们称之为“加法”,并用符号+表示。假定我们要操作的群用𝔾表示,要定义的加法必须遵循以下四个特性:
如果在增加第5个条件:
交换律:a+ b= b+ a
那么,称这个群为阿贝尔群。根据这个定义整数集是个阿贝尔群。
岔开一下话题,伽罗瓦与阿贝尔分别独立的提出了群论,他们并称为现代群论的创始人,可惜两位天才都是英年早逝。
如上文所说,我们可以基于椭圆曲线定义一个群。具体地说:
在椭圆曲线上有不重合且不对称的 A、B两点,两点与曲线相交于X点, X与 x轴的对称点为R,R即为 A+B的结果。这就是椭圆曲线的加法定义。
因为椭圆曲线方程存在项,因此椭圆曲线必然关于x轴对称
曲线:,
坐标:A=(2,5),B=(3,7)
A、B正好在曲线上,因为坐标满足曲线公式
那如何找到相交的第三个点呢?
通过 A、B两点确定直线方程,
设直线方程:,m为直线的斜率
进一步得到c=1。
联立方程:
X(-1,-1)的x坐标-1代入方式正好满足方程,所以A、B两点所在直线与曲线相交于 X(-1,-1),则点X的关于x轴的对称点为R(-1,1),即A(2,5)+B(3,5)=R(-1,1)。
根据椭圆曲线的群律(GROUP LAW)公式,我们可以方便的计算R点。
曲线方程:
当A=(x1,y1),B=(x2,y2),R=A+B=(x3,y3),x1≠x2时,
, m是斜率
x3=
y3=m(x1-x3)-y1
A=(2,5), B=(3,7), R=(-1,1)符合上面的公式。
椭圆曲线加法符合交换律么?
先计算(A+B),在计算 A+B+C
先计算B+C,在计算 B+C+A
看图像,计算结果相同,大家手动算下吧。
那 A+ A呢,怎么计算呢?
当两点重合时候,无法画出“过两点的直线”,在这种情况下,
过A点做椭圆曲线的切线,交于X点,X点关于 x轴的对称点即为 2A,这样的计算称为“椭圆曲线上的二倍运算”。
下图即为椭圆曲线乘法运算:
我们将在 ECC椭圆曲线加密算法(二)介绍有限域,椭圆曲线的离散对数问题,椭圆曲线加密就是应用了离散对数问题。
参考:
本文来自用户投稿,不代表币大牛资讯立场,如若转载,请注明出处:https://www.98xmw.com/zhis/18353.html
发表回复
评论列表(0条)