酸饼博客
关注区块链技术应用与数字货币

区块链入门100问(3):如何理解区块链中的密码学技术及其应用?

比特币和它的一众小弟、后辈,被称为“加密数字货币”。加密数字货币其实并不加密,交易是公开的;但它们都用到了密码学技术,这是它们被称为加密数字货币的主要原因。

在比特币系统里用到的两个主要密码学技术分别是哈希函数和签名。

哈希函数是一类数学函数,可以在有限合理的时间内,将任意长度的消息压缩为固定长度的二进制串,其输出值为哈希值,也称为散列值。这个定义有点拗口,下面用一个简单的公式说明一下:
H(x) = y

对于任意长度的x,用某种哈希函数计算,可以得出定长的值。比如比特币系统中用到的SHA-256算法,对任意长度的输入x进行计算,得到256固定长度的y。

哈希函数有三个主要的性质:
(一)collision resistance:抗碰撞性。

所谓抗碰撞性就是指很难找到两个不同的输入x,用同一个哈希函数H进行技术,得出相同的输出y。由于输出空间是有限的,而输入空间是无限的,从理论上是存在碰撞的可能,但在计算上是不可行的。

哈希函数的抗碰撞性常用来进行完整性验证。比如,我们下载一些软件的时候,软件提供商往往会把该软件安装程序的哈希值发布出来,这样我们下载了软件之后,对该文件用相同的哈希函数得出哈希值,通过比较,就知道这个软件有没有经过篡改。

在比特币系统中,利用这个特性,能够很好地防止对历史交易数据进行篡改。前面的一个区块的哈希指针写在后一个区块的区块头里面,如果对前面的一个区块进行篡改,其哈希值就发生了变化,跟后面的区块对不上,无法通过验证。

(二)hiding:隐蔽性。
隐蔽性是指,设H(x)=y,知道输入值,很容易通过哈希函数计算出哈希值y;但知道输出值y,却没有办法计算出原来的输入值x。这种性质,也称为“原像不可逆”。

在比特币系统,进行挖矿的时候,实际上是要找出一个随机数跟区块的其他数据一起作为输入值,计算出一个满足条件的目标值。目标输出值的范围已知,但由于哈希函数的隐蔽性,无法通过输出值反推出输入值。

(三)puzzle friendly:难题好友性。
难题好友性这个翻译,感觉挺别扭的,也有点难以理解。它实际指的是,没有便捷的方法去产生满足指定条件的哈希值。以比特币的挖矿过程为例,上面说到,哈希函数有隐蔽性,我们无法直接反推计算出满足条件的目标值;也没有快捷的办法去找出能够产生这个目标值的输入值,只能用暴力求解的方式,用一个个可能的输入值去计算不同的输出值,并用这些输出值和目标输出值进行比较。这种通过哈希运算得出符合特定要求的哈希值的过程,可以作为比特币系统中共识算法中的工作量证明(proof of work)。

正因为哈希函数具有抗碰撞性、隐蔽性、难题好友性,所以在区块链系统里,哈希函数是很重要的密码学技术,主要用来保证存储于区块链中的信息的安全和完整,以及用于设计基于工作量证明的共识算法。

下面接着签名。
比特币系统中用非对称加密技术实现签名。。
非对称加密算法,英文全称是asymmetric cryptographic algorithm。
在说“非对称加密”算法之前,先说说对称加密算法。对称加密算法,加密和解密用的是相同的密钥。对称加密的优势是计算量小、计算速度块,但缺点是密钥在传输过程中容易泄露。

非对称算法,需要两个密钥:公钥、私钥。公钥和私钥是一对。如果用公钥对数据加密,只能用对应的私钥才能进行解密;同样,如果用私钥对数据加密,也只能用对应的公钥才能解密。

在比特币系统中,实际上是没有银行系统那样的“账户”的。比特币系统的账户,实际上是一对密钥:公钥和私钥。公钥用来识别不同的用户,以及构造用户的比特币地址。

在比特币系统里进行转账的时候,需要用自己的私钥进行签名,矿工收到信息后用对应的公钥来对签名进行验证,以确认该交易是这个用户发起的,防止账户里面的比特币被盗。

哈希函数和签名是区块链系统中用到的两个密码学技术,这两个功能常常是结合起来用的。在比特币系统当中,一般是对信息取哈希,然后再对哈希值进行签名。

未经允许不得转载:酸饼 » 区块链入门100问(3):如何理解区块链中的密码学技术及其应用?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

留言联系关于酸饼