# BTC 密码学原理

By [阮小萤](https://paragraph.com/@0x6d022e3c5f76f14f99aab13ebf4afb7343075d41) · 2022-06-07

---

加密货币
----

比特币系统中一般先对 message 取 hash，再对 hash 结果进行签名

### 哈希

*   cryptographic hash function 密码哈希函数。性质：
    
    *   collision resistance 难以快速找到产生哈希碰撞的输入（该性质无法通过数据进行证明，只能人为从经验中进行总结，一旦找到可以快速制造哈希碰撞的方法，则说明该加密非 collision resistance）
        
        *   使用场景：digest 数字摘要
            
    *   hiding 函数计算过程单向 & 不可逆
        
        *   使用场景：digital commitment（digital equivalent of sealed envelope）
            
        *   先公布哈希值，由于 hidding 的特性结果三方不可见；再公开输入，由于 collision resistance 的特性，保证了输入之前公布的哈希值的输入。
            
        *   hiding 的前提是输入空间足够大&分布均匀（增加暴力破解难度）。当输入空间不够大时，一般会在尾部追加随机值 nonce 来进行该前提的保证。
            
    *   puzzle friendly（比特币场景中特有特性）哈希值事先不可预测 difficult to solve, but easy to verify
        
        *   使用场景：nonce 的计算没有捷径，所以才能用它来代表工作量 proof of work
            

### 签名

*   账户：公钥私钥对（public key & private key）
    
*   asymmetric encryption algorithm 非对称加密
    
    *   对称加密使用同一个秘钥进行加解密，这需要保障有一个绝对可靠的秘钥传输途径，网络是不可靠的传输途径，秘钥分发不方便。
        
    *   非对称加密私钥个人持有无需传输，公钥可公开，无需保密，更适用于网络场景。
        
*   比特币场景：交易验证。发起交易方用个人私钥加密，其他人可以用公钥解密来进行验证。
    
*   公私钥对需要基于 a good source of randomness，保证大家生成的公私钥对独立。
    
*   比特币的签名算法要求生成公私钥对以及之后签名都需要好的随机源。
    

**加密的目的是为了解密，所以加密算法要保证加密后信息的完整性，信息不可丢失。而取哈希值的过程是允许信息丢失的。**

---

*Originally published on [阮小萤](https://paragraph.com/@0x6d022e3c5f76f14f99aab13ebf4afb7343075d41/btc)*
