概述
转载。作者: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位或者更高。
最后
以上就是可耐飞鸟为你收集整理的(七)私钥会被破解码?私钥、公钥和地址的关系的全部内容,希望文章能够帮你解决(七)私钥会被破解码?私钥、公钥和地址的关系所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复