学习视频链接: 肖臻-区块链技术与应用-Chapter2-密码学原理
原理一: 哈希函数
密码学原理 | 英文名称 | 性质 | 功能 |
---|---|---|---|
哈希函数 SHA-256 | Cryptographic hash function | collision resistance (抗碰撞性): 人为地减少碰撞, 但理论上不能避免碰撞 hiding (隐藏性): 无法从H(X)反推出X内容 (空间足够大且均匀, 则暴力破解的代价非常大) digital commitment (数字承诺): 在前两个性质的基础下产生 puzzle friendly (难题友好): 事先无法得知怎么样的X, 可以得到特定结构的Hash值. (比如: 前100位为0的Hash值) | 生成唯一的Hash值, 如果被修改则Hash不同, 通过检测可以防止篡改 |
数字承诺的解释: H(X)通过第三方机构, 将信息公布, 由于hiding性质无法得到X内容, 同时collision resistance性质保证内容不会被篡改, 即X可以通过验证证明其真实性.
实际操作的细节:
- 输出空间不够大时: 在X后续加上随机数,
H(x|random)
, 保证随机和均匀.
puzzle friendly and mining(挖矿)
puzzle friendly与mining的关系:
- Nonce(Number only used Once): 仅使用一次的数字, 在Pov中指改变Hash值的变量
- 挖矿: 不断地尝试Nonce, 直到满足下列条件
- puzzle friendly: 在挖矿的过程没有捷径, 只能尝试大量的Nonce才能找到解.
- 所以挖矿过程才能称为工作量证明(Proof of work)
- 验证过程: 验证Proof of work也非常简单, 计算
H(block header) <= target
即可
H(Nonce + 区块头中的其他信息) <= target
原理二: 签名
密码学原理 | 英文名称 | 构成 | 功能 |
---|---|---|---|
签名 | digital Signature | (public key, private key) | 证明交易的合法性 |
Account (账户)
BlockChain账户创建: 本地创建公私钥对(public key, private key)
- public key: 相当于账号, 外界只需要知道账号, 就可以与该账号交易
- private key: 相当于密码
基础公式:
- c: 公钥,d: 私钥
- 加密: d(c(x))=x
- 签名: c(d(x))=x
公钥体系的两个功能:
- 加密传输
- 发送方Alice, 接收方Bob
- Alice发送消息给Bob, 使用Bob的public key加密
- Bob接收密文, 使用Bob自己的private key解密
- 签名
- Alice发布财经报告M
- 发送者Alice计算H(M), 利用私钥签名: S = d(H(M))
- Alice发布(M, S)
- 接受者Bob计算H(M), 利用公钥解密: H(M) = c(S)
- 比较解密得到的H(M)与文件本身的Hash, 从而验证财经报告确实是Alice发布的.
key collision attack
- 大量制造账户, 恰好产生与目标用户相同的(public key, private key)
- 利用private key生成假签名, 盗走用户的Bitcoin
注意: 这种攻击的理论不可实现.