查看原文
其他

比特币史话·90 | 随机(4): 香农熵

刘教链 刘教链 2023-01-30

(克劳德·香农,信息论创始人。图片来源于网络)
前情回顾:
比特币史话·85 | 压缩(3): 植树造林
比特币史话·86 | 压缩(4): 布隆过滤器
比特币史话·87 | 随机(1): 真伪随机数
比特币史话·88 | 随机(2): 脑钱包
比特币史话·89 | 随机(3): 破解索尼

正文:

1865年,德国物理学家鲁道夫·克劳修斯(Rudolf Clausius, 1822-1888)提出了“熵”(entropy)这一概念。这个词来源于希腊语,原意是“转变”(transformation)[1]。克劳修斯用这个词是因为他认为一个做功的热力学系统一定会发生某种“变化”(change),而“熵”就是对这种“变化”的数学解释。这种变化,简单地讲就是变得更混乱,微观状态数更多了。所以热力学熵的计算方法非常简单,就是系统的微观状态数的自然对数,再乘以玻尔兹曼常数。当然,这只是对于孤立封闭系统,熵是单调增加的。而对于开放系统,其内部可以出现熵减的现象,但是它一定向外部宇宙排出更多的熵。这种开放系统,被1977年诺奖得主普利高津称为“耗散结构”(dissipative structure)。

熵的大小取决于系统的随机微观状态数量,因而熵值和确定系统的物理状态所需补充的信息量直接相关。因此,熵表示了系统的混乱程度,随机性(randomness),或者信息缺失程度。这使得熵的概念在信息论中扮演了核心角色。

1948年,美国数学家、电气工程师、密码学家克劳德·香农(Claude Shannon, 1916-2001)在其标志性的论文《通信的数学理论》(A Mathematical Theory of Communication)中奠基了“信息论”(information theory)[2],为今天整个IT、互联网产业的诞生与繁荣开启了基础理论研究的大门。

信息论的一个关键量度就是熵。熵量化了随机变量的取值或者随机过程的输出值中所包含的不确定性的量。我们把它称为香农熵或者信息熵[3]。把随机变量所有可能取值的概率和以2为底的该概率的倒数的对数之积逐一加和,即为该随机变量的信息熵值。信息熵越大,说明该随机变量的不确定性越大,明确它所需要获得的信息量也就越大。[4]

比如之前讲到的扔硬币获得比特币私钥的方法,每次扔硬币都会得到一个独立的随机数,要么是0,要么是1,概率对半都是50%,那么扔一次硬币的信息熵就是1比特。

如果是掷骰子,那么掷一次骰子的信息熵是大约2.585比特。

热力学熵,只是信息熵的一种特例而已,是分子在空间所处位置不确定性的度量。把分子在空间位置分布的信息熵乘以一个常数就得到了热力学熵。

中本聪在2010年2月23日论坛回复中分析了比特币地址发生随机数冲突的概率问题[5],他这样写道:

“每个比特币地址都有一个单独的公/私密钥对。你没有一个可以解锁所有东西的私钥。比特币地址是公钥的160比特哈希,系统中的所有其他东西都是256比特。”

“如果发生碰撞,碰撞者可以花掉发到该地址的任何一笔钱。钱只是发到了那个地址,而不是整个钱包。”

“如果你有意尝试进行碰撞,则当前生成冲突的比特币地址所需的时间比生成区块所需的时间长2^126倍。通过生成区块,你本可以赚很多钱。”

中本聪的意思是,挖矿比尝试攻破他人的地址可以更轻松地赚到比特币。他继续写道:

“随机种子非常彻底。在Windows上,它使用所有性能监视器数据,这些数据可测量自计算机启动以来磁盘性能,网卡指标,cpu时间,页面调度等每一个方面。Linux具有内置的熵收集器。除此之外,每当您在比特币窗口中移动鼠标时,都会产生熵,并且熵是从磁盘操作的时序中捕获的。”

事实上,打开比特币的开源代码的src/random.h文件,就能够读到比特币系统中的随机数生成器和熵源的总体设计和实现。代码注释中如此写道,“我们维护了一个单一全局的256比特币随机数生成器状态以产生高质量的随机性”[6]。在比特币的这一实现的源代码中,不仅确实如中本聪所说的那样,广泛使用了栈指针、高精度时间戳、硬件随机数生成器、硬件熵、动态的系统环境数据,等等,而且每隔100毫秒就使用SHA-512哈希函数对上一次取得的熵进行一次“强化”。

【未完待续】(公众号:刘教链)

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存