私钥长度及地址问题

1、私钥是不是可以是0—2(256)次方的任意一个值,那么转换出来的16进制理论上可以是0到64位长的一个字符串吗?但是实际通过工具产生出来的基本都是63、64位长的,请问这个是有什么限制吗?
2、地址是公钥进行哈希运算取后面20字节,那有没有可能一个地址实际有两个公钥可以对应上,这样两把私钥都可以操作这个账户呢?只是因为认为这个概率极小而不管呢
3、既然已经对公钥做了sha3/sm3运算得到摘要,为什么不直接用这个作为地址呢,取后面20字节是因为会更安全吗,为什么?

@rink1969 能否帮忙解答一下,多谢

  1. 私钥就是一个u256的数字n,对应的公钥是椭圆曲线上的原点G的n次方。理论上当然可以取1,2,3之类的数字。但是这个就像弱密码一样,安全程度会降低。这里面是很有讲究的,一般是对应的密码学算法里面会提供生成私钥的随机数的函数,不是让用户随便设置的。
  2. 是的,hash是多对一的映射函数,理论上是肯定会有冲突的情况。忽略的原因也正如你所说,这个概率实在太低了,比地球爆炸的概率还低。
  3. 地址取20字节这个应该算是沿袭旧制。比特币是把公钥先sha256,然后又用RIPEMD-160哈希了。看名字就知道,后面这个hash算法的输出就是20字节,所以比特币的地址是20字节。至于中本聪当时为什么这么设计,已经没地问了。后人有很多解读,有人认为hash两次能某种程度上抗量子计算机,有人认为就是为了省点空间(这个有兴趣可以去搜索看看,还挺有意思的)。以太坊可能觉得只是省点空间,那直接截一段就可以了,没必要哈希两次。CITA是沿袭了以太坊的做法。
1赞

帮你点赞