文档介绍:比特币:原理,安全与未来今年初我偶然跟一个朋友讨论到比特币这个话题, 这个朋友没有接触过密码学也没有任何技术背景, 所以认为比特币的制造跟随便印钱一样可以超发, 仿佛会无中生有, 其实大部分人平常所接触的虚拟货币类似 Q 币之类的,由某个运营商或平台发型作为交换服务的凭证, 而该虚拟货币的发行完全就被该公司控制, 现实世界中由政府发行的货币实际上跟这些传统虚拟货币一样, 超发与否、价值涨跌完全由该平台运行者或政府完全控制。现在我们通过各种解读知道了比特币并不会无缘无故地超发, 那么到底是什么保证了它与“普通”虚拟货币不同的特性呢? 答案就是——数学。散列首先从散列讲起, 散列又叫“杂凑”, 国内也有根据其英文( Hashing ) 译为哈希, 其实从名字的“零散地列出来”、“杂乱地凑起来”来看就知道, 这是一种信息摘要算法, 而摘要的意思和小学语文的把一段文章的中心大意提取出来类似。在计算机中, 散列通常是经过某些特定的手段( 例如经过一系列复杂的位运算) 提取出某段数据的特征、该特征用来校验(比如验证从网络上下载的一个很大的文件的正确性) 。语文课上的概括中心大意是根据概括的内容, 你能还原出这段讲的内容是什么, 而密码学级别的散列则恰恰相反, 它使得你提取出来的表示数据特征的代码绝不能还原(或轻易还原)为原来的数据。举例, 现在流行的一种散列函数叫 SHA-1 , 当你提交一个字符串:“ The quick brown fox jumps over the lazy dog ”作为 SHA-1 的参数时,得到如下摘要信息: 2fd4e1c6 7a2d28fc ed849ee1 bb76e739 1b93eb12 但是哪怕你修改了一个字符: “ The quick brown fox jumps over the lazy cog ”得到的结果也会发生翻天覆地的变化: de9f2c7f d25e1b3a fad3e85a 0bd17d9b 100db4b3 散列函数的这些特性保证了它不会轻易地通过小的修改和获得摘要的差别分析出算法的漏洞,以保证原始数据的安全。那么散列函数该怎么用呢?它通常以“证明”的工具用。比如说 Alice 有一个字符串:“ The quick brown fox jumps over the lazy dog ” Bob 说我也有那么一个字符串和 Alice 一样,但是 Bob 并不信任 Alice , 万一 Alice 是伪装那就会把自己真实的字符串泄漏给假 Alice ; 同时 Alic e 也不信任 Bob , 因为如果 Bob 是冒牌的自己一样会把真实的字符串泄漏给假 Bob ; 更可怕的是旁边站着一个间谍 Eve 时刻监听着 Alic e和 Bo b 进行字符串交换的过程并且获得该字符串。那么如何让 Alice 和 Bob 两人互相相信对方不是冒牌货呢?简单的方法是两人将自己的字符串进行散列运算, 然后比对即可。这样就算有人监听或者对方是冒牌货也不会泄漏原始数据。这些类似 SHA-1 的散列函数是怎么来的呢?是经过美国国家安全局( NSA ) 设计美国国家标准技术研究院( NIST ) 发布的。而一个著名的散列标准( 包括其他的加密标准) 公开招标的过程是完全公开的, 所有提交的算法和标准都会经过来自全世界无数顶级的