区块链基础 - 比特币中的密码学
♣️

区块链基础 - 比特币中的密码学

Tags
Block Chain
Published
January 15, 2024
Author
chaodit

1.背景

比特币是一种加密货币,但其中的“加密”概念和传统的加密概念并不相同。
传统密码学的加密主要分为对称加密非对称加密,两种加密的方式以密钥的不同来作为区分。对称加密加解密方使用相同的密钥进行加解密,常见的加密算法有DES、AES等。非对称加密加解密方使用公私密钥对进行加解密。公钥用于加密,私钥用于解密,常见的算法有RSA、DSA、ECC。
而比特币中的加密主要是使用了密码学中的哈希和签名这两个概念。

2. 比特币中的密码学

2.1 哈希

哈希算法的概念是,将任意长度的输入数据转换为固定人长度的输出(哈希值)。可以理解为一个函数: ,n为任意长度,c为一个固定值。
这样的函数有一些特点:
  1. 固定长度输出:无论输入的数据有多大,哈希算法生成的哈希值是固定的
  1. 不可逆性:通过哈希值,几乎不可能找到输入值
  1. 唯一性:不同的输入数据经过哈希计算后的值应该是唯一的。
在比特币中的哈希函数,应该是加密哈希函数(cryptographic hash function), 这就要求哈希函数必须具有以下的几种性质:
  1. Collision resistance(哈希碰撞)
    1. 哈希碰撞抗性:一个哈希函数如果具有哈希碰撞抗性,那么给定x,y,x≠y, 不能轻易实现H(x) = H(y)。
      不能轻易实现并不是指不能实现,因为哈希函数的输入空间是无限大的,而输出空间是有限的,那么就有可能会有两个不同的输入得到一个相同的输出。
      目前并没有人为制造哈希碰撞的算法,但也没有哈希算法能被证明是Collision Resistance。例如,MD5算法就已经被发现可以人为制造哈希碰撞。
      我们理想的哈希算法就是:想要目前想要制造哈希碰撞,只有使用穷举的方法。同时如果我们hash函数的输出空间足够大,那么使用穷举方法也是几乎不可能制造出哈希碰撞。
      在指定哈希输出空间时,2^256的输出空间,往往穷举2^130 次就能很大概率制造哈希碰撞,这个现象叫做生日悖论(birthday paradox)
      哈希碰撞的用途:消息摘要 Message Digest
  1. Hiding
    1. 给出哈希值y = H(x),没有有效的方法能够推断出x的值是多少。
      要满足这个特性,需要x属于一个非常宽泛的集合,才能够不被穷举法试出结果。但是我们可以通过使用一个秘密值(secrect value)r来让函数满足这个特性。此时,哈希函数变成了H(r||x),
      r是取自一个随机数集合,这个集合需要满足最小墒min-entropy特性。
      最小墒:最小墒是衡量一个随机函数的可预测性。越高的最小墒可以创建出更广泛的随机分布
      Hiding特性的应用
      digital commitment:专家预测股票结果,预测影响结果,使用sealed envelope用来防止这种影响
      选择一个随机数nonce,nonce是一个256bit的随机值
      利用到hiding的特性,给出H(nonce||msg),不能够找到msg是什么,因此不能篡改msg信息;同时,利用hash函数的collision resistance特性,不能找到msg‘和nonce’,得出和H(nonce||msg)相同的哈希值,因此也不能伪造信息。
  1. puzzle friendly (加密货币中特有性质)