1. 密码学原理¶
约 1501 个字 预计阅读时间 8 分钟 共被读过 次
crypto - currency(加密货币),作为一种基于密码学技术的数字货币形式,其背后依托了多种复杂且精妙的密码学原理,确保了交易的安全性、不可篡改性以及去中心化特性。
cryptographic hash function(加密哈希函数)¶
加密哈希函数在区块链领域有着举足轻重的地位,它具备以下关键特性:
1. collision resistance(抗碰撞性):¶
- 含义:理想情况下,对于不同的输入数据,哈希函数应产生不同的哈希值。很难找到两个不同的输入 x 和 y,使得 H (x) = H (y)。例如,md5 曾是广泛使用的哈希算法,但后来被发现存在碰撞漏洞,即能找到不同数据产生相同 md5 值的情况,这在对安全性要求极高的区块链等场景中是不可接受的。尽管它曾因计算效率高而被大量使用,但因其抗碰撞性不足,逐渐被弃用。
2. hiding(隐匿性,单向不可逆):¶
-
原理:从哈希值几乎无法反向推导出原始输入数据。并且要求输入空间足够大,数据分布均匀。如果输入空间小或分布不均匀,攻击者就有可能通过蛮力求得能产生特定哈希值的输入。
-
应用:
-
digital commitment/digital equivalent of a sealed envelop(数字承诺 / 密封信封的数字等价物):例如在预测类场景中,预测结果不能提前公开。可以先对预测结果进行哈希运算,将哈希值公开,之后再公开原始预测结果,其他人通过对原始结果进行哈希计算并与之前公开的哈希值对比,就能验证结果的一致性和未被篡改。
-
数字签名:把预测结果作为输入,通过特定的哈希运算得到哈希值,再用私钥对该哈希值进行签名。签名后的信息可用于验证数据来源及完整性。
-
H(x||nonce):在结果后拼接一个随机值 nonce。这常用于区块链挖矿等场景,通过改变 nonce 值,使哈希运算结果满足特定条件。例如在比特币挖矿中,通过不断调整 nonce 来使区块头的哈希值满足一定难度要求。
3. puzzle friendly(谜题友好性):¶
-
特性:哈希值事先不可预测。对于任意给定的哈希值,在不知道输入的情况下,无法通过特定方法快速找到能产生该哈希值的输入数据。
-
应用:
-
挖矿:以比特币挖矿为例,矿工需要找 nonce,使得 H (block header) <= target(目标值)。这个过程没有捷径,只能大量地去尝试不同的 nonce 值,这就是所谓的 proof of work(工作量证明)。通过这种方式,保证了区块链系统中新区块生成的公平性和安全性。
-
difficult to solve, but easy to vertify(求解困难,但验证容易):矿工找到满足条件的 nonce 和哈希值后,其他节点可以很容易地通过重新计算哈希值并与目标值对比来验证其正确性。
-
SHA - 256——secure hash algorithm(安全哈希算法):是比特币等区块链项目广泛使用的哈希算法,具有较高的安全性和计算效率,能有效保证区块链中数据的完整性和哈希计算的安全性。
签名¶
在区块链的去中心化环境中,签名机制是确保交易安全和身份认证的关键环节:
-
去中心化特性:签名机制不依赖于任何中心化的机构来验证身份或授权交易,而是通过密码学原理在网络节点间实现自我验证。
-
(public key,private key)(公钥,私钥):这是基于非对称加密算法产生的一对密钥。
-
asymmetric encryption algorithm(非对称加密算法):使用一对密钥,即公钥和私钥。与对称加密算法不同,对称加密算法加密和解密使用相同的密钥,而在非对称加密中,加密用公钥,解密用私钥。
-
优势:公钥不用保密,可以广泛公开传播,私钥只要保存在本地,极大地解决了密钥分发不方便的问题。例如在区块链网络中,每个节点都可以将自己的公钥公开给其他节点,用于接收加密信息或验证签名。
-
类比:公钥相当于银行卡账号,可公开示人用于接收资金等操作;私钥相当于密码,必须严格保密,只有拥有私钥的人才能对相关资产进行操作。
-
签名与验证:签名是用私钥对数据(通常是数据的哈希值)进行处理,生成一个签名信息。验证时则是用公钥对签名信息进行验证,以确认数据是否由对应的私钥持有者发出且未被篡改。例如在比特币交易中,交易发起者用自己的私钥对交易信息进行签名,其他节点收到交易后,用发起者的公钥验证签名,从而确定交易的真实性和有效性。
-
a good source of randomness(良好的随机数来源):私钥的生成通常基于随机数,这些随机数为签名过程提供了不可预测性,进一步增强了签名的安全性。
比特币一般是对 message 先哈希,然后再签名。这是因为哈希值具有固定长度且能唯一代表原始消息的特征,对哈希值签名比对原始消息直接签名更高效且能保证消息完整性。如果原始消息被篡改,其哈希值会发生变化,而基于原哈希值的签名将无法通过验证。