密码学
比特币中使用的密码学主要包括:Hash 和 签名
1. Hash
Cryptographic hash function:密码学中使用的 hash 函数。
SHA-256(Secure Hash Algorithm):BTC 使用的 hash 函数。满足以下几个特性。
1.1 Collision Resistance
Hash Collision:hash 碰撞
由于 hash 函数可以将无限的数据集映射到有限的数据集中,因此必然存在不同的输入会映射到同一个输出结果,称为 hash 碰撞
Collision Resistance:指很难通过人为的方式找出到两个输入,使得它们的 hash 值一样。
目前无法通过数学的方法证明某一个 hash 函数是满足 collision resistance 的特性,只能依靠实践中的不断检验。
花边:md5 hash 函数已经被找到人为制造 hash 碰撞的方法。
1.2 Hiding
Hiding:指 hash 函数的计算过程是单向的、不可逆的。给定一个输入 X 可以计算出它的 hash 值 Y,但是由 Y 是没有办法反推出 X,即 Y 不会泄漏 X 的信息。
前提条件:输入的空间足够大且输入的分布要求比较均匀。否则的话,可以暴力的尝试输入值得出结果。
最佳实践:实际中一般可以给输入值之后拼接一个随机数(nonce),使得输入空间足够大,足够均匀
1.3 Puzzle Friendly
Puzzle Friendly:指 hash 值的计算事先是很难预测的。如果想要使得计算出来的 hash 值落在指定的范围,只能一个个尝试输入,没有捷径可走。
使用场景:「BTC 工作量证明」,比特币要求获得记账权的节点,计算出来的 Hash 值满足一定的条件(比如前面 N 位为 0)。根据这个特性,挖矿的节点只能一遍又一遍地尝试 nonce 值,没有它方。
注:后续内容将介绍「BTC 挖矿的内容」
2. 签名
非对称加密
对称加密:通信双方协定一个密钥,发送方先用密钥加密,接收方收到信息后,再用密钥解密。注意:知道密钥的人,就能解密。
对称加密的痛:密钥的分发是一个最大的痛点,不是很方便,如果密钥在网络上分发,很有可能泄漏。
非对称加密:引入公私钥对。发送方 使用对方的公钥(可以在网上公布)加密,接收方收到信息后,再用自己的私钥解密。注意:同上,只要知道密钥的人,就能解密,但是非对称加密就不存在密钥(私钥)分发的问题。
BTC 账户
BTC 的账户创建:只需要在本地创建一对公私钥对(来源于非对称加密)
疑问:在自己本地产生的公私钥对,会不会和别人产生的一样。这样就可以利用这个私钥把区块链上另一个同名账户的钱转走?
答:实际中不可行,如果是 256 位的 hash 值,产生相同公私钥对的概率是微乎其微的,比地球爆炸的概率还低。前提是,产生公私钥对,需要一个好的随机源。BTC 使用的签名算法,要求生成公私钥对的时候有好的随机源,同时之后每一次签名的时候,也需要有好的随机源。
BTC 账户账号:公钥,相当于银行账号
BTC 账户密码:私钥,相当于银行密码