待更新北京大学肖臻老师《区块链技术与应用》公开课笔记 02-BTC-密码学原理
Posted 如何科学杀正能量的猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了待更新北京大学肖臻老师《区块链技术与应用》公开课笔记 02-BTC-密码学原理相关的知识,希望对你有一定的参考价值。
北大肖臻老师《区块链技术与应用》课程链接:点击这里
全系列文章链接:点击这里
主要参考的书籍文献及图片来源:《区块链:技术驱动金融》
该系列文章如中有任何侵权内容,或者有链接无法打开、图片加载上传失败等情况,请及时与我个人联系删除或修改。
比特币又名加密货币,顾名思义,加密货币着力采用密码技术。
加密数字货币系统构建主要用到密码学中的哈希算法(Hash)和数字签名(digital signature)技术。
一、哈希函数
哈希函数是一个数学函数,其具有以下三个特性:
(1)其输入可为任意大小的字符串;(2)它产生固定大小的输出;(3)它能进行有效计算。
这些特性定义了一般哈希函数,以这个函数为基础,我们可以创建数据结构,例如哈希表。
但要使哈希函数达到密码安全,则要求其具有以下三个附加特性:
(1)碰撞阻力(collision-resistance);(2)隐秘性(hiding);(3)谜题友好(puzzle-friendliness)。
(1)碰撞阻力(collision-resistance)
首先,这里的碰撞是指,对于两个不同的输入,产生相同的输出。可表达为:x≠y,H(x)=H(y)。
而碰撞阻力,即指无法找到两个值x和y,x≠y,而H(x)=H(y)。
哈希碰撞存在的原因,是由于其输入空间包含所有长度的任意字符串,但输出空间则只包含特定固定长度的字符串,在输入空间比输出空间大的情况下(输入空间是无限的,而输出空间是有限的),一定会有输入字符串映射到相同的输出字符串。
对于加密的哈希函数,我们虽然说应该找不到碰撞,但有些方法是能保证找到碰撞的。
假设,有一个256位输出大小的哈希函数,最坏的算法是进行+1次哈希函数计算,我们在检验第+1个输入之前便很可能找到碰撞,但这个检测算法的耗时是一个天文数字,蛮力求解不可行。
之前的MD5哈希函数,在多年的努力之后最终找到了碰撞,导致该函数在实践中被逐渐淘汰,最终被弃用。
碰撞阻力的应用:信息摘要(message digest)。
已知哈希函数具有碰撞阻力。假设x和y是两个不同的输入,那么可以假设它们的哈希函数H(x)和H(y)也不同。如果已知x和y不同,但哈希值H相同,那么H具有碰撞阻力的假设就不成立。
这个论证使我们可以将哈希输出作为信息摘要(message digest)。
哈希函数对于一个信息生成固定长度的摘要,或生成了简明总结,这为我们提供了一种记住之前所见事物,并在今后认出这些事物的有效方法。虽然整个文件可能非常大,但其哈希值的长度固定。假设哈希函数为256位。这样极大地降低存储要求。
(2)隐秘性(hiding)
即,通过哈希函数的输出y=H(x),我们没有可行的办法算出输入值x。
但是,如果我们要反解的 x 的取值,就像猜一枚硬币的正反面,或者第二天股市是否涨停一样,只有两种可能,那么还是能将函数对应的哈希值计算出来,这时hiding是不成立的。
上面表述若要成立,则必须使输入值x的取值来自一个非常广泛的集合。这里可以引入“高阶最小熵”的概念。
当其输入 r 选自一个高阶最小熵(high min-entroy)的概率分布,在给定H(r‖x)条件下,来确定x是不可行的。
在信息论中,最小熵是用于测试结果可预测性的手段,而高阶最小熵这个概念比较直观描述了分布(如随机变量)的分散程度。具体来说,在从这样分布中取样时,我们将无法判定取样的倾向。举个具体的例子,如果 r 是从长度为256位的字符串中随意选出的,那么任意特定字符串被选中的概率为,这是一个小到几乎可以忽略的取值。
hiding的应用:承诺(commitment)。
(论证过程太长了,我直接放书截图了... ... 不是懒,希望宁能懂~~)
(截图均来自参考书籍《区块链:技术驱动金融》)
(3)谜题友好(puzzle-friendliness)
如果对于任意n位输出值y,假定k选自高阶最小熵分布,如果无法找到一个可行的方法,在比2n小很多时间内找到x,保证H(k‖x)=y成立,那么我们称哈希函数H为谜题友好。
应用:搜索谜题
比特币挖矿过程就是一种搜索谜题,挖矿就是找到一个nonce.
挖矿过程没有捷径,nonce作为header的一部分,只能通过大量试验各种随机数nonce,才能使H(block header)≤ target,这个过程才能作为工作量证明proof of work.
即,difficult to solve, but easy to verify. 我们设计搜索谜题时应当注意这个性质,该谜题是一个需要对庞大空间进行搜索,才能找到解决办法的数学问题。
比特币中用的哈希函数为:SHA-256(Secure Hash Algorithm). 上述3个附加特性SHA-256均满足。
二、签名
要将签名,先将比特币账户管理。
比特币是去中心化的,它没有银行之类的机构,而是在本地创立一个(public key, private key)对儿,就能完成开户。
公钥:银行账户
私钥:银行密码
以上是关于待更新北京大学肖臻老师《区块链技术与应用》公开课笔记 02-BTC-密码学原理的主要内容,如果未能解决你的问题,请参考以下文章