我是靠谱客的博主 可耐飞鸟,最近开发中收集的这篇文章主要介绍(七)私钥会被破解码?私钥、公钥和地址的关系,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转载。作者:Alphabet_666
https://www.jianshu.com/p/94ceb0e9cb86

  • 私钥是一个256位的随机数,介于0到2²⁵⁶-1之间。除了随机生成外,也可以采用特定算法由一个的输入得出32字节输出。如采用SHA256的一种实现:privateKey
    = SHA256(input)。比如你可以将你的生日加上名字作为输入。这种方式可以防止私钥丢失,只要记住输入就可以得到私钥。但是因为输入集合太小,易被构造常见组合的彩虹表暴力破解。

  • 公钥是私钥通过SECP256K1椭圆曲线算法生成,目前公钥无法反推出私钥。公钥分压缩格式和非压缩格式。早期比特币均使用非压缩公钥,后来大家发现其实公钥的左右两个32字节是有关联的,左侧(X)可以推出右侧(Y)的平方值,有左侧(X)就可以了。现大部分客户端已默认使用压缩公钥。两种公钥的首个字节为标识位,压缩为33字节,非压缩为65字节。以0x04开头为非压缩,0x02/0x03开头为压缩公钥,0x02/0x03的选取由右侧Y开方后的奇偶决定。压缩形式可以减小交易和区块的体积,每个交易输入(交易输入解锁脚本里有公钥)减少32字节。

  • 比特币地址

比特币地址为什么不直接使用公钥呢?
有人认为是公钥太长了,转换之后可以有效减少长度。但更重要的原因是未来量子计算机可以破解椭圆曲线数字签名算法(也就是说,给定一个公钥,量子计算机可以相当快速的找到对应的私钥),但它很难逆转哈希算法,也就很难由比特币地址逆运算出公钥。因此一旦量子计算机出现,至少未花费过的地址上的比特币是安全的。
比如我给小明转账。因为在交易输入中的解锁脚本里是包含我的公钥的,因此这笔交易后我这个地址上面的比特币就不安全了。
所以我会选择一个新的地址作为找零地址,剩余的比特币将会被转移到新的地址上了。而找零地址和小明的地址所对应的公钥都是没有暴露的,所以还是安全的。

生成地址

首先对公钥进行SHA256和RIPEMD160运算得到公钥哈希,再对把版本号和公钥哈希放在一起做两次SHA256,取其前4个字节做为校验码,然后将版本号、公钥哈希和校验码放在一起做Base58编码生成比特币地址,(可以理解为58进制,使地址更短,相对于Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+“和”/"符号,因为这些符号肉眼不容易辨别。)

  • 私钥能被破解码
  • 暴力破解
    私钥共有2^256 个,大概是10^77 ,
    这个数字有多大呢?到目前为止,人类可观测的宇宙中的原子数约为10^80个,通过遍历的方式来暴力破解私钥基本上是不可能的,所以私钥在密码学上安全的。但事实上有些钱包在生成私钥时随机程度有限,从而大大降低了私钥的安全性。
  • 量子计算机
    量子计算机可以由公钥推出私钥,那么一旦公钥暴露,私钥就面临着被破解的危险。所以目前最好的方式是每次支付时,将支付余额转到一个新的地址,废弃旧地址。因为新地址的公钥是没有暴露的。当然也不要太过担心,首先量子计算机依然遥遥无期,其次比特币也会做出相应的改变以应对量子计算机,比如将私钥的位数增加到512位、1024位或者更高。

最后

以上就是可耐飞鸟为你收集整理的(七)私钥会被破解码?私钥、公钥和地址的关系的全部内容,希望文章能够帮你解决(七)私钥会被破解码?私钥、公钥和地址的关系所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部