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

      

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


私钥

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

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. 私钥生成公钥是成对出现,公钥可以生成对应的唯一地址,这样就能确认了该地址发送的交易是否使用了对应的私钥

收藏
微信
微博
相关新闻
编辑
总篇数
681
粉丝
1565
2018.01.08
10:02:47
20:01
币管家bgj.io今日起提升了自愿锁仓BC的投资者奖励额度:除周一至周六每日享受平台手续费利润80%的分红及每周日手续费利润75%的分红外,每单次锁仓资产每月增值5%,一个周期90天增值15%。管家币BC现价$0.133,涨幅4.53%.自愿增值锁仓期截止6.30日,限额3000万枚,目前已锁1278.44万。官网地址:https://bgj.io
18:04
今日,易得(Expread.io)宣布领先OKEX落地开放式交易所新模式,已落地持牌交易所三家,下月于马耳他、直布罗陀、南非、印度、英国等地上线20家交易所。 易得免费向所有合作伙伴提供交易所云技术服务,现向全球招募易得伙伴,合作伙伴只需准备域名和公司实体,即可三天内获得独立自主的云架构交易所产品。易得体系内的交易所均共享交易深度和流动池。
09:59
HLWchain合作影视项目受邀参加,HLWChain采用了影片中的人物形象研发了区块链游戏HLW.GO,该游戏集合了诞生、成长、比赛、拍卖和赠送等玩法,游戏中主要的交易货币为ETH。 据官方消息,6月22日特推出注册送币活动,前100名注册玩家随机赠送游戏角色,前300名注册玩家赠送50HLW币。游戏最高奖励玛莎拉蒂总裁一台。6月27日到28日期间,将开放游戏交易系统,游戏正式运营。 官网链接:go.hlwchain.com
21:12
据NULS团队消息,NULS项目将于7月12日在北京召开发布会,宣布主网正式上线以及新的全球战略计划。据了解NULS主网在今年4月27日开始公测,在经历了近三个月的打磨测试后,终于将正式上线,这标志着NULS这个可定制的区块链基础设施的主体架构正式形成;据消息称,NULS还将在发布会公布全新的项目发展规划、全球社区招募计划以及更细致的Roadmap。
17:29
陈敏涛作为万向区块链股份国内投资的首批区块链企业魔橙网络的创始人兼CEO,JRRCrypto的全球合伙人,行业级应用公链 Dimension的孵化者和生态技术顾问,在保险、公益、信托、公证等领域拥有多个区块链项目落地实施经验。建立了分布式流量及运营平台-星柚。现正为JRR下一代区块链基础新公链担任技术顾问。 JRR Crypto总部位于瑞士,是全球领先的布局于区块链产业生态及加密数字货币的区块链产业集团,集团业务覆盖八大板块:区块链孵化器与产业园、商业咨询、区块链媒体、投资银行、区块链产业基金、数字货币交易平台、数字货币二级市场交易和数字资产管理。在每一块都有独特的投资策略及发展规划。
15:19
今晚19:00,在BiYong社群“币管家bgj.io官方交流群”中,币管家将进行连续六场的第五场红包雨活动。此外,19日的每日交易费的80%分红资金已于今日10:00发放,而被邀请人可每日分享手续费的30%。据币管家行情显示,BC现价每枚0.165USDT(约1.07CNY),今日涨幅20%。官网地址:https://bgj.io
15:38
据NULS团队消息,NULS将在新加坡时间2018年6月19日17:00推出NULS测试网(v0.9.10)版本 ,此版本将会上线区块浏览器、红牌惩罚机制、钱包在线升级等重要功能。据悉,在NULS主网发布前,预计将陆续更新2-3个测试版本,以测试主网的一些重要功能,保证NULS网络的运行稳定性和良好的用户体验。值得注意的是,v0.9.10之后的版本均可在线升级。
14:11
行情软件金塔Quintar继GBLS峰会成功举办后再次发力,联合新加坡知名海外基金共同孵化数字资产交易平台ExNow。ExNow交易平台将致力于服务更多的优质项目,为更多的技术型新项目提供市值流通和投融资服务。
16:14
据币管家bgj.io官方消息,其平台全功能分红积分管家币BC距离每日分红仅剩4天,受普遍投资者看好,现价为0.185USDT(约1.245CNY)今日大涨21.49%。官网地址:https://bgj.io
17:42
Coni将于6月18日正式上线,上线后,根据Coni持有情况,平台将每日100%交易手续费进行分红。此外,“交易即挖矿”也包含在新方案内,具体规则为将用户所产生的交易手续费再次100%折算成Coni以交易挖矿机制分红,一期挖矿Coni总量为5000万。此外,平台后期还将建立福利金机制,参与更多分红。另据CoinBene满币场外交易群了解到,目前Coni场外价格为3元人民币。
17:46
刚刚,NULS团队发布公告,公布了NULS主网映射的流程及注意事项。在NULS主网上线后,即可进行映射操作,映射周期为3个月,Binance、Bit-Z、Chaoex、coinbene、coinspot等交易平台将支持NULS自动映射。ETH钱包用户可以尽早将ERC20代币转到支持自动映射的交易平台,也可以根据操作流程自行完成映射操作。NULS主网发布在即,值得期待。
09:02
全球创业者的首席增长官Merculet正式对外公布,获得知名投资机构JRR Crypto投资。JRR Crypto是全球领先的区块链产业生态及加密数字货币产业集团,投资案例超过40余家,如Binance(币安)、 Quarkchain、柑趣网络、TokenGazer等。本次投资意味着Merculet将成为JRR Crypto区块链生态布局的重要一环,而JRR Crypto的支持也将加速Merculet实现整个互联网流量结构的重构,传送数百万互联网企业、数十亿互联网用户以及其数千亿美元预算,进入基于区块链技术所构建的价值互联网时代,真正把区块链的高效互信和价值流通“复制”到全球每一位创业者的增长之上。
17:29
据NULS官方Twitter消息,NULS与来自新加坡的金融科技公司MC Payment达成战略合作,NULS联合发起人冉小波与MC Payment首席运营官Joseph Christopher Koh 在2018年6月8日共同签署了合作协议。MC Payment计划在NULS主网上搭建子链,NULS将在区块链技术应用落地、项目投资与孵化等领域与MC Payment展开合作。
09:04
币快报BKBT项目(已上线火币Hadax(https://www.hadax.com/))正式宣布获2000万美金的A轮融资,本轮估值2亿美金,此次融资为全球区块链媒体史上最大单笔金额A轮融资。投资方为JRR Crypto旗下的产业基金JRR Capital。JRR Crypto是全球领先的布局于区块链产业生态及加密数字货币的区块链产业集团,投资案例包括但不限于Binance(币安)、QuarkChain(夸克链)、TokenGazer、大师钱包、柑趣网络、WAX、PCHAIN、DxChain、ORS、MSC、Merculet等。
18:05
分布式数字资产金融服务平台LendChain宣布完成数千万人民币融资。参与本次投资的机构包括公信宝、PreAngel、裂变资本、边界资本、比特派和公信资本。值得注意的是,公信宝不仅是项目投资机构,更与LendChain达成了深度的战略合作:坐拥160万数字居民的公信宝布洛克城,将会为LendChain导流,让更多垂直用户能够方便地了解和使用LendChain平台。作为全球化的基于区块链技术的分布式数字资产金融服务平台,LendChain能够为数字资产的持有者提供融资、投资、保险、理财等各类金融服务。目前LendChain开发平台已顺利内测,并即将开展公测。
11:06
据NULS 团队消息,NULS测试网(V0.9.9)Win+Linux版已于新加坡时间2018年6月11日上午11点推出,该版本进一步提高了NULS钱包的运行稳定性和用户体验。现在到NULS官网(nuls.io)下载新版钱包,并在新版钱包内导入私钥即可体验。注:MAC版本将尽快上线
23:01
scaneos.io于6月10日21点与主网同期上线,致力于成为EOS生态专业的数据服务平台。scaneos.io由中国最大的安卓开发者社区eoe创始人、中国最大IT在线教育平台极客学院创始人靳岩发起,靳岩认为,用户只需要一款EOS浏览器,scanEOS则会全面向全球用户做最好用的区块链浏览器。
17:33
据币管家bgj.io官网数据显示,其平台分红积分BC目前时价0.1579 USDT(约1.02CNY)随着6月20日的分红日临近,用户量激增,备受投资者看好,BC总发行量2亿枚且永不增发,平台锁仓1亿枚持续1至3年,目前市场流通量为6750万枚。官网地址:https://bgj.io
16:18
数字货币交易所UEX(www.uex.com)2018年6月7号上线MANA,支持 MANA/ETH交易对,并于6月9日正式开启MANA百万交易大赛、EXIM幸运大放送交易赛。交易费打折活动同步进行中,低至一折,最低万分之一交易费率。 UEX核心团队拥有广泛的互金行业国际化背景,其交易所主要定位就是锁定全球优质项目。
11:48
分红币标杆平台FXB今天开盘挖矿2小时不到就熔断了,可喜可贺。 FXB是目前市场上唯一一个双分红模式平台,发行量少,价值很高。明天早上八点正式交易!