收藏
上一篇:
维基链即将发布 区块链应用或迎来爆发机遇
下一篇:
欲切入多款应用的维基链,能否成为行业“独角兽”?
比特币的私钥,公钥和地址是什么?
 2017-12-21 17:25
 50337

      

       在比特币中,经常出现三个词:私钥,公钥和地址。他们是什么意思呢?他们之间又有什么样的关系呢?搞清楚他们之间的关系和区别,是了解比特币的基础。


私钥

先说说私钥,一般我们看到的私钥是下面这样的一段字符串

5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss

支持比特币协议的应用都可以正确把这段字符串转换成比特币的私钥,再转换出公钥,再得到一个地址,如果该地址上面有对应的比特币,就可以使用这个私钥花费上面的比特币。

私钥本质上是随机数私钥本质上是一个随机数,由32个byte组成的数组,1个byte等于8位二进制,一个二进制只有两个值0或者1。所以私钥的总数是将近2^(8*32)=2^256个,但是有一些私钥并不能使用,他真实的大小是介于:1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的数。这个数量已经超过了宇宙中原子的总数,想要遍历所有的私钥,耗尽整个太阳的能量也是不可能的。

我们所说的比特币私钥的是密码学上面安全的,并不是说不可能出现重复的私钥,而是说不可能通过遍历的方式找到某一个特定的私钥,或者通过其它的方式找,而不通过私钥就能花费地址上面的比特币,私钥的安全性是由数学上保证的。

私钥的总数量很大,但是私钥的生成是依赖随机数的,真正的随机是很难做到的,大部分私钥的生成都是依赖于伪随机算法(PRNG)。

伪随机是用函数生成随机数。它并不真正是随机的。只是一个比较近似真随机的随机数

私钥生成的随机性就很重要的,密码学上安全的随机是指:

随机是不可预测的,随机的结果是不可遍历的,如果不是安全的随机数生成器,生成的私钥就有可能被别人碰撞到。不依赖随机生成的私钥就会大大的降低其生成的概率空间。

公钥和地址的生成都依赖私钥,所以我们只需要保存私钥即可,有了私钥就能生成公钥和地址,就能够花费对应地址上面的比特币。


私钥到字符串

上面提高的私钥字符串是按照一定的规律从32位byte数据格式化生成的,32个byte的数组是由256个0或者1组成的,如果显示出来,不仅仅是识别率不高,而且私钥太长。

因此私钥字符串就是对于原始的随机数进行一定的转换,转换为识别率高的形式,上面私钥的是对32个byte数组就做了Base58的转换.

Base58是用于比特币中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址和私钥。相比Base64,Base58不使用数字”0″,字母大写”O”,字母大写”I”,和字母小写”l”,以及”+”和”/”符号。这样做的主要原因是为了肉眼容易识别,在输入的时候不容易打错,

不过上面那段没有规律的字符串输入起来还是挺费劲的,当然也可以把私钥转换其他形式,比如以单词的形式(12或者24个单词),脑钱包的形式,又或者自己记住的某一句话来生成私钥,注意脑钱包生成的私钥随机的安全性并不高。

我们看到的私钥除了以5开头的以外,还有以L和K开头的私钥,为什么会出现这样的情况呢?5,L,K又带代表什么呢?这就要说到公钥了。


公钥

比特币的根基是椭圆曲线数字签名算法:

椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟

椭圆曲线加密法(ECC)是一种公私钥加密技术:

ECC以椭圆曲线理论为基础,利用椭圆曲线等式的性质来产生密钥,而不是采用传统的方法利用大质数的积来产生,其特点是:密钥长度小,安全性能高,整个数字签名耗时小

DSA(DigitalSignature Standard)数字签名技术:

DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。

这里明确了私钥用来签名,而公钥用来验证签名。

公钥是由私钥生成的,通过椭圆曲线(ECPoint)生成,一个私钥经过椭圆曲线变换之后能够得到公钥,公钥是一个65个byte数组,一般我们会看到这样的一个公钥:

04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235

显示出的公钥一般把byte数组是经过hex(16进制)的处理之后显示,不经过Base58的原因是: 公钥是用来验证私钥的签名,一般我们很少会看到公钥,使用私钥签名交易之后,会把自己的公钥一起和交易发送出去,这样对于一个完整的交易开说,他就使用交易里包含的公钥验证私钥的签名是否正确。

私钥和公钥是成对出现的,一个私钥签名的数据,只有对应的公钥才能对其进行验证,而地址也是从公钥生成的,这样就可以验证花费的交易是不是属于这个地址了!

回答下上面的问题为什么会出现5开头或者L,K开头的私钥?
出现这种情况是因为公钥的不同格式而产生了不同的私钥格式,早期的比特币开发者没有使用压缩的公钥(椭圆曲线是对称的,知道了一半的信息就可以推导出来另外一半的信息了),因此只需要保存一般的公钥信息即可。压缩的公钥只有33个byte,而未压缩的公钥有65个byte。

私钥开头的第一位的不同,是用来区分该私钥使用的公钥是否支持压缩格式
压缩的公钥对比特币的意义很大,比特币是去中心化的p2p加密货币,每个节点都会拥有完整的交易记录,除了coinbase(挖矿得到的比特币)以外,每个交易都需要发送公钥,支持压缩格式的公钥,每个交易的数据就可以减少32个字节,这对整个比特币网络是非常有意义的,整个比特币网络的数据在传输和保存中都可以提高不少效率。

而对私钥进行Base58编码的时候,老版本未压缩公钥的私钥是33位byte数组,第一位存放私钥的Version信息,当前值为128,生成的Base58都是以5开头。

老版本未压缩私钥=Base58(version+32位随机数)
支持压缩公钥的私钥是34位,同样是第一位是version信息,它的值也是128,而多出来的一位是最后一个byte是用来存放是否压缩信息的信息,1就表示是支持压缩格式的公钥。经过Base58处理之后正好是L或者K开头

新版本私钥格式=Base58(version+32位随机数+是否支持压缩)

例子中的私钥不仅仅包含了32个byte数组的信息,还是私钥version的信息以及其公钥是否压缩的信息(通过位数和值来判断)

公钥是否压缩除了对私钥的显示有影响以外,还会对地址有影响。


地址

公钥太长了,所以就有更短一些的地址的概念,另一方面没有发送过交易的地址,并不想暴露自己的公钥,而地址是通过摘要算法生成的,不会暴露公钥的真实内容:

地址是由公钥产生的,地址长度为25byte,经过base58处理,地址未尾添加了4个字节的校验位。

我们看到的地址一般都是Base58编码处理的,地址的生成比较复杂,公钥到地址生成的过程是,先对公钥做一次SHA256(哈希算法)。

sha-256-hash= SHA-256(public key)

再经过了hash160处理, hash160:RIPEMD(PACE integrity Primitives Evaluation Message Digest)是一种原始完整性校验消息摘要,160标准对应20字节:

hash160=hash160(sha-256-hash)

对结果进行hash160处理可以得到一个20个byte的数组,在这个20位的byte数组前面再加上一个byte,这个byte就是地址的Version信息,地址的Version当前值为0,Version信息在比特币的test网络上会使用不同的值,比特币地址完成的表示就是:

address=Base58(version+hash160(SHA-256(public key))+checksum)
checksum是用来对于比特币地址进行检验的,再得到的hash160中加入地址的version信息 ,再对该信息做两次SHA-256之后取前4位就是checksum:

checksum=get_front_four( SHA-256(SHA-256(version+hash160)))
其中hash160是这个过程中最重要的信息,从这个值就可以到地址的前21位(第一位是version)和后面的checksum, 进而可以生成Base58格式的地址。而从Base58格式的地址中也可以得到hash160,也就是说hash160格式可以和Base58格式的地址互换。


私钥的不同对于地址有什么样的影响呢?

前面已经说了:

一个随机数可以有一个压缩的公钥,和一个未压缩的公钥
而每个公钥都会生成一个地址,上面私钥其实可以有两个地址分别为:

1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN(未压缩公钥)

1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV (压缩公钥)

这两个地址都是这一个随机数生成的地址,每个地址上面的比特币都可以用这个随机数对应的私钥花费。目前大多数的应用默认都使用压缩格式的私钥。


总结

对于私钥,公钥和地址来说,公钥作为私钥到地址的中间桥梁,他在交易的验证是最关键的:

对于一个交易的验证,公钥的作用:

  1. 公钥生成地址,验证发送交易的地址是否和该公钥生成的地址一致
  2. 公钥验证私钥的签名,用来验证该交易是否使用了正确的私钥签名
  3. 私钥生成公钥是成对出现,公钥可以生成对应的唯一地址,这样就能确认了该地址发送的交易是否使用了对应的私钥

声明:所有在本站发表的文章,本站都具有最终编辑权。本站全部作品均系比特币之家原创或来自网络转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责,所产生的纠纷与本站无关。如涉及作品内容、版权和其它问题,请尽快与本站联系。
收藏
微信
微博
相关新闻
斉木
总篇数
725
粉丝
1568
2018.01.08
10:02:47
11:24
据南华早报9月8日报道,中国交易者在利用VPN,注册海外交易所,交易加密货币。报道提及,消息人士透露,面对监管,中国加密数字货币交易者通常利用所谓“客户对客户”的交易。交易双方都在一家海外交易所注册,完成其客户身份认证KYC流程,然后通过交易所将法币转换为USDT,由交易所充当交易的监督者。报道称,个人客户的资金通常通过银行账户或者第三方线上支付网络转移。收到USDT以后,交易者可以开始在任一交易所进行数字货币之间的交易,通过VPN完成交易。
11:24
据自媒体爆料,9月7日,警方介入调查深圳某区块链发币项目。该项目实际控制人孟某以及主要相关人员正接受警方调查。目前孟某等人已被采取出入境限制措施。知情人士称,近期,随着对虚拟货币监管加强,深圳等地针对利用区块链诈骗、非法集资等,将会有实质性“清理动作”。
11:23
中国工商银行网络金融赵磊近日表示,区块链只是一种技术手段和方式,它不能够解决体制上的问题,区块链只能是在某一个环节去中心化,节省成本,增加信任,甚至实现智能合约的匹配。
10:46
汇桔网董事长兼CEO谢旭辉在2018中国军民融合知识产权金融高峰论坛上表示,知识产权事业发展的未来是知识产权成果全国与全球范围内充分的二次流通,知识产权的的互联网化、大数据云化与区块链化,知识产权成果充分的金融化与证券化。
10:45
澳大利亚的一家区块链公司今天公布了一个名为TrustGrid飞新平台,这是电子汽车牌照的关键架构组件之一,预计该牌照将于明年年底前在全州范围内就位。
10:45
9月12日,由同济大学、中科院控股、上海杨浦区政府、上海市经信委联合主办,上海区块链技术研究中心、中科院资本、同济大学国家现代化研究院、同济大学设计创意学院、新湃资本、中科鼎晟承办的“中国(上海)新技术发展与应用论坛”在上海拉开帷幕。论坛以“区块链、人工智能技术与城市治理”为主题开展对话交流,深入讨论未来新技术趋势与其在城市治理领域的应用、创新和监管。
10:45
据sputniknews9月10日报道,在莫斯科举办的第四届东方经济论坛上,俄罗斯总统特别代表Dmitry Peskov表示,就现在而言,俄政府不允许发行和流通数字货币。这违背了国家的基本职能,这很重要。在他看来自由市场与监管是不可分割的,而现在有着超高的风险,那么央行的监管就必须更加严格。作为国家政府我们有义务去警告所有投资者。但是我们并不是试图摧毁数字货币市场,如何引入规范才是工作重点。
10:44
BTC过去24小时的活跃地址为432849个,再次回到低谷。BTC全网算力为53.2EH/s,BTC 每THash单日收益为0.2387美元。此外,BTC在推特上讨论量虽居于所有数字货币中首位,但是较上周均有所下降。从链上数据来看,昨日单笔转账超过3000 BTC的有3笔,尚无交易所流入流出。从技术角度来讲,盘面分析师认为,BTC经过早上出现的跳水情况,目前多头能否在前低完成防守,仍有待观察。
10:43
A股开盘,区块链板块低开,整体下跌0.34% 。84只概念股中,12只上涨、68只下跌。涨幅前三为:商赢环球(+5.43%)、中南建设(+1.93%)、北大荒(+1.27%)。跌幅前三为:科蓝软件(-4.84%),嘉泽新能(-3.47%),科达股份(-2.82%)。
14:38
9月6日,CoinBene满币与安全机构Armors Labs正式达成战略合作。Armors Labs将为CoinBene满币上线的项目方提供安全审计,以保障用户资产安全。据悉,CoinBene在数字货币的平台搭建、交易逻辑、金融风控、用户运营体系等领域具备丰富经验。Armors Labs作为区块链安全实验室,从智能合约全生态平台延展到整体区块链安全。目前,Armors已经与ArcBlock、MyToken、BGOGO、BUMO、DATA等多个项目进行了合作。
14:38
TokenInsight针对9月初BTC价格暴跌事件做了专业分析,结合近期行业新闻和相关统计数据来看,TokenInsight认为,本次暴跌和“丝绸之路”组织密切相关,再加上提供匿名转账服务的头部交易所Shapeshift政策变动,市场疯传高盛取消通证服务平台计划(后被证实为假消息),三者共同叠加导致了本次BTC价格的异动。
14:37
据onchainfx数据显示,过去24小时内,只有26个不同的区块链有超过400个活动地址。活动地址,指一个时间段内,任意时间参与事务的地址。据sludgefeed发文指出,“虽然dApp活跃度无疑是智能合约区块链的实际应用的可靠指标,但更有意义的衡量标准可能是整个网络的日常地址活动。
12:52
据闪电网络浏览器1ml.com数据显示,闪电网络的网络容量扩展为104.37BTC;节点目前总计3383个;通道目前共12002条。
12:51
涉区块链公号“区块链第一哥”“王子区块链”“点币成金”已被封,无法登陆。被封公号主页显示“由用户投诉并经平台审核,存在未取得法定许可证件或牌照,发布、传播或从事相关经营活动的行为,账号已经停止使用”。据了解以上三个公号均为币圈行情分析类账号。
12:51
原中国银行副行长王永利今日发文表示,现有的区块链模式存在“去中心、高效能、安全性”难以兼得的“不可能三角关系”,因此,到目前为止,除了各种网络虚拟货币的应用(币圈),并通过网络虚拟货币的ICO和价格操作赚钱外,真正的去中心化商业应用还几乎没有成功案例。
12:51
中国互联网协会理事长邬贺铨表示,区块链技术有助于推进工业互联网发展。区块链技术对于质量的管控、交易资金流、物流的可靠性都是非常有用的。另一方面,区块链也有成本,并非所有企业在现阶段都需运用区块链技术。
12:50
近日,韩国邮政本部的本部长Kang-Seongju,在纽约与即将上任高盛CEO的 David Solomon达成协议,韩国邮政本部将赴香港高盛集团,学习虚拟货币和区块链相关技术。
12:50
据南充晚报报道,中国人民银行南充市中心支行发布关于数字货币的风险提示,近期,个别企业冒用中国人民银行名义,将相关数字产品冠以“中国人民银行授权发行”,或是谎称中国人民银行发行数字货币推广团队,现提示如下:中国人民银行尚未发行法定数字货币, 也未授权任何机构和企业发行法定数字货币,无推广团队。目前市场上所谓“数字货币”均为非法定数字货币。
12:50
根据Bitfinex交易平台数据显示,BTC最新成交价格 6,498.52 美元,最高价达 6,544.00 美元,最低价格 6,303.00 美元,成交量 2.77 万,涨幅 1.09 %;ETH最新成交价格 230.03 美元,最高价达 234.56 美元,最低价格 220.10 美元,成交量 31.04 万,涨幅 1.62 %;EOS最新成交价格 5.25 美元,最高价达 5.33 美元,最低价格 4.90 美元,成交量 906.95 万,涨幅 3.36 %。
12:49
据币客BKEX官网公告,将于9月7日20:00开放LTC充值;9月8日12:00开放LTC/USDT、LTC/ETH交易,并同时开放提现功能。