私钥,公钥和地址

您所在的位置:网站首页 比特币私钥生成公钥使用哪个算法 私钥,公钥和地址

私钥,公钥和地址

#私钥,公钥和地址| 来源: 网络整理| 查看: 265

# 简介

*比特币的所有权是通过数字密钥、比特币地址和数字签名来确定的。*

就好比银行里面钱的所有权,要确认这笔钱属于你,一般是需要你知道银行账户(公钥),自己的密码(私钥),以及一个签名来确认的。在支付钱的时候,卖家给你的也是一个账号,而非自己的密码。稍微有点差别的是,在程序世界中,因为账号,密码是一一对应的,而数字签名也是由有效的密钥才能产生。*所以只需你知道私钥,就可以拥有一笔比特币的所权*。同样其他人知道了你的私钥,也可以轻易的拿着这笔比特币。

# 私钥和公钥

*从私钥到公钥,再到公钥到地址。这个推导流程都是单向的*。很难逆向推导。这是由于不对称加密的方式导致的。什么是不对称加密呢?就是往一个方向做计算很容易,但从另外一个方向反推就很困难。比如,做幂乘积相对简单,但求对数就很难。

## 私钥是如何产生的?

*比特币私钥是一个256位二进制数字*可以通过各种能产生是或否的算法计算256次。比如抛256次硬币。只要这个过程是*不可预测或不可重复*的,那么选取数字的具体方法并不重要。比特币软件使用操作系统底层的随机数生成器来产生256位的熵(随机性)。通常情况下,操作系统随机数生成器由人工的随机源进行初始化,这就是为什么也可能需要不停晃动鼠标几秒钟。

## 公钥

* K=k\*G其中k是私钥,G是生成点,在该曲线上所得的点K是公钥。因为所有比特币用户的生成点是相同的,一个私钥k乘以G将 得到相同的公钥K.

# 椭圆曲线加密

给定椭圆曲线上的点P,如果k是整数,则 kP = P + P + P + …+ P(k次)

给定椭圆曲线上的两个点P1和P2,则椭圆曲线上必定有第三点 P3 = P1 + P2。几何图形中,该第三点P3可以在P1和P2之间画一条线来确定。这条直线恰好与椭圆曲线相交于另外一个地方。此点记为 P3’= (x,y)。然后,在x轴做翻折获得 P3=(x,-y)。为了处理一些特殊点,比如A(x,y),B (x,-y)所组成的线与曲线相交的情况(曲线与x轴垂直),需要引入无线电Aoo。这个点与其他个点相加,所得到的结构仍为其他点。A(x,y)+B (x,-y)=Aoo,

由于实数范围很大,很难应用于实际的加密中。为了便于应用,在实际运用中,还将使用范围控制在质数P个。这样能形成的集合能够满足一定的数学要求。例如互换, 除法等。在*限定在一个素数范围后,曲线就不再是一个连续的曲线,而是一些离散的点*。比如素数阶17的有限域内的椭圆曲线。

## 为什么椭圆曲线加密能够单向加密?

公钥加密使用的是椭圆曲线加密法。*其特性导致了做乘法容易,除法难*。该曲线加密的特点在于:你拿球从A射向B.当它撞上曲线,这个球向上反弹或者向下反弹到X轴的另外一侧。以这个规则,若有个人知道了要加的次数和起始点,他可以很容易得知终点在什么地方。但反过来就很复杂,你只知道初始末尾两个点是很难知道这个推导是经过了多少步,那异常艰难。另外,相比于其他加密方式,椭圆曲线加密可以要求数据长度更短,这样对存储的要求更低。

## 如何简单理解椭圆曲线加密呢?

知乎上Chizhong Jin有段很生动的描述:(链接:https://www.zhihu.com/question/22399196/answer/308626466)有一天张三挑出了两个数字,123,456。由于张三会乘法,于是乎张三计算出了:123 \*456 = 56088 于是张三告诉你:123\*??? = 56088你是个天资卓绝的人,但是没办法,上天不允许你会除法 (乘法大家都会,但除法大家都不会),因此你没法知道张三说的???是什么。有一天,你打算告诉张三一个秘密,67。但是你又不想别人知道。于是聪明绝顶的你随手选了一个数字222。计算出:123\*222 = 27306  56088\*222 + 67 = 12451603然后你对张三说:123\*??? = 2730656088\*??? + x = 12451603当然,你聪明绝顶,张三聪明秃顶,于是张三一寻思:123\*???\*456 = 56088\*???这上下一减,x = 12451603 - 27306\*456 = 67哎妈呀,这x就这么被传递过来了。如果我们把上面的过程写成数学公式的话,就是G\*k = K (G,K公开,k保密)c1 = G\*Mc2 = K\*M + x (M随机选取,x为要加密的数字,M和x都保密)x = c2 - c1\*k = K\*M + x - G\*M\*k = G\*M\*k + x - G\*M\*k (消除左右两侧的G\*M\*k) = x

# 公钥私钥的格式## 公钥的格式

公钥是在椭圆曲线上的一个点,由一对坐标(x,y)组成。公钥通常表示为前缀04紧接着两个256比特的数字 ( 130个十六进制数字)。其中一个256比特数字是公钥的x坐标,另一个256比特数字是y坐标。如 K = 04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE 52DDFE2E505BDB

压缩公钥:由于Y其实是X的一个函数,在知道了X后可以轻易推导出Y。所以为了节省储存数量,就可以只记录X的数据即可。这样可以节省256个比特。但由于在曲线函数中Y是以平方的形式出现的,所以会出现正负两个解。为了对这个进行区别,在前导字符用不同的数字指明正负的形式。

*未压缩格式公钥使用04作为前缀。我们在生成压缩格式公钥时,如果y是偶数,则使用02作为前缀;如果y是奇数,则使用03作为前缀*

## 私钥的格式

*压缩的私钥”实际上只是表示“用于生成压缩格式公钥的私钥”*。压缩的私钥比非压缩的私钥多了一个字节 (十六进制为01)。这是为了告诉钱包,这个私钥已经被用于生成压缩公钥以及地址了。虽然Base58编码版本前缀对于WIF和WIF压缩格式都是相同的(0x80),但在数字末尾添加一个字节会导致Base58编码的第一个字符从5变为K或 L

# 比特币地址 ## 比特币地址为什么长度不同?

由于6位二进制代码有可能出现大于58的情况,所以在Base58中在进行编译时,可能出现按照*6位二进制切分编译也可能出现按照5位二进制切分编译*的情况。所以可能会出现不同长度的“Base58Check”编码的地址。

## 比特币地址为什么开头字母不一样? # 其他一些应用:

1:加密私钥。BIP0038加密方案是(BIP:比特币优化建议):输入一个比特币私钥,通常使用WIF编码过,base58chek字符串的前缀“5”。此外BIP0038加密方案需要一个长密码作为口令,通常由多个单词或一段复杂的数字字母字符串组成。BIP0038加密方案的结果是一个由base58check编码过的加密私钥,前缀为6P。在使用时需要将这个加密秘钥进行口令解密后才能看见实际的秘钥。相当于多了一层保证。

2:P2SH (Pay-to-Script Hash)和多重签名地址以数字3开头的比特币地址是P2SH地址,有时被错误的称谓多重签名或多重签名地址。他们指定比特币交易中受益人为哈希的脚本,而不是公钥的所有者。资金被发送到3开头的地址时,需要的不仅仅是一个公钥的哈希值和一个私钥签名作为所有者证明。在创建地址的时候,这些要求会被指定在脚本中。这就为多重签名创造了条件。比如需要同时3个人签名才能取款等。

3:比特币靓号可以让比特币地址前面一些字符具有一定的意义,比如“1kidsXXXXXXXX”。这样显得更独特。但每增加一个字符,难度会增加58倍。

4:纸钱包将秘钥保存在纸或者其他媒介上的钱包。

***内容参考或出自:***

精通比特币 第二版 中文 Andreas M. Antonopoulos作,乔延宏等翻译,http://book.8btc.com/books/6/masterbitcoin2cn/_book/trans-preface.html

一个关于椭圆曲线密码学的初级读本(相当容易懂) http://8btc.com/thread-1240-1-1.html知乎 谁能最简单的详解椭圆曲线算法,secp256k1 是如何生成公钥和私钥的? https://www.zhihu.com/question/22399196谈谈有限域那些事儿 https://blog.csdn.net/qmickecs/article/details/77281602为什么比特币地址以1开头 http://8btc.com/thread-14607-1-1.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3