王程-沈阳佳禾3星评价
2020-10-30 13:58:12
私钥本质上是随机数,我们所说的比特币私钥的是密码学上面安全的,并不是说不可能出现重复的私钥,而是说不可能通过遍历的方式找到某一个特定的私钥,或者通过其它的方式找,而不通过私钥就能花费地址上面的比特币,私钥的安全性是由数学上保证的。
私钥的总数量很大,但是私钥的生成是依赖随机数的,真正的随机是很难做到的,大部分私钥的生成都是依赖于伪随机算法(PRNG)。伪随机是用函数生成随机数。它并不真正是随机的。只是一个比较近似真随机的随机数。椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟
椭圆曲线加密法(ECC)是一种公私钥加密技术:
ECC以椭圆曲线理论为基础,利用椭圆曲线等式的性质来产生密钥,而不是采用传统的方法利用大质数的积来产生,其特点是:密钥长度小,安全性能高,整个数字签名耗时小。
DSA(DigitalSignature Standard)数字签名技术:
在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。显示出的公钥一般把byte数组是经过hex(16进制)的处理之后显示,不经过Base58的原因是: 公钥是用来验证私钥的签名,一般我们很少会看到公钥,使用私钥签名交易之后,会把自己的公钥一起和交易发送出去,这样对于一个完整的交易开说,他就使用交易里包含的公钥验证私钥的签名是否正确。
私钥和公钥是成对出现的,一个私钥签名的数据,只有对应的公钥才能对其进行验证,而地址也是从公钥生成的,这样就可以验证花费的交易是不是属于这个地址了!
有很多方法可以生成私钥。它们的简单性和安全性不同。生成私钥只是第一步。下一步是提取可用于接收付款的公钥和钱包地址。
一根有信仰的韭菜10星评价
2020-08-14 16:40:59
如何生成私钥(private key)
本质上私钥就是一串随机选出的 256 个 bit 的 01 数字(32 字节 * 8 = 256 bits),但是这串数字却控制着你的比特币账号的所有权,因此这串数字相当重要,要具有足够的随机性,一般采用密码学安全的伪随机数生成器(CSPNG),并且需要有一个来自具有足够熵值的源的种子(seed)。
比特币客户端软件使用 Secp256k1ECDSA 标准生成椭圆曲线,使用椭圆生成一个私钥,然后再从私钥中生成对应的公钥。
如果自行选取简单的123456密码,最终生成的账户可是“公交车账户”了哈哈。
选择 32 个字节的原因是因为 Bitcoin 使用的是 ECDSA 算法,并且使用的是 secp256k1 曲线。
如何生成公钥(public key)
Bitcoin 的公钥是通过 椭圆曲线密码学算法(K = k * G)来生成,其中公式中的:
K:公钥;
k:私钥,为上一段生成的 32 字节的字节数组(16 进制串表示);
G:为一个生成点;
Bitcoin 使用了 secp256k1 标准定义的一种特殊的椭圆曲线和一系列的数学常量。
如上公式,以私钥 k 为起点,与预定的生成点 G 相乘来生成公钥 K,并且因为所有 Bitcoin 用户的生成点 G 都是相同的(常量),所以由一个确定的私钥 k 生成一个确定的公钥 K,并且是单向的。