密码学和哈希函数的简单介绍

提到区块链的不可篡改性和去中心化,相信许多人会和我产生一样的疑惑:没有第三方、不须仲介代办的去中心化应用,的确可以省去很多时间成本,可是那要怎么确保不经手第三方的资料没被动过手脚?没有银行,一笔交易的真伪如何认证?

如果去中心化不能解决以上认证、防伪的问题,那区块链的不可篡改性也只不过是一堆不可篡改,但是也无凭无据的交易。

所以Cryptography (密码学)和Hash Function哈希值)就诞生了!是这两个重要的技术赋予区块链的不可篡改性和去中心化意义。

Cryptography密码学

在资讯发达的现在,密码学其实隐藏在我们日常生活中的每一处,像是登入邮件、社群…等等都需要输入一个专属于自己的密码一样,而久远以前罗马人说的Kryptosgraphia(密码学) 也就是Kryptos (hidde) + Graphia (message) 隐藏的讯息,是不是很有趣呢?

而区块链使用的密码学技术是Public Key Cryptography (公钥密码学),又称Asymmetric Cryptography (非对称式密码学)。从Public Key (公钥)可以知道必定也有Private Key (私钥)的存在,公私钥的区别就在私钥不可以给别人看,要自己保管好;而公钥则是一个可以公布给所有人知道的资讯。

公私钥匙都可以进行encryption (加密)或decryption (解密),并且两两配对(故称非对称式密码学),一个私钥产生一个公钥,且只有成对的公私钥可以互相解密。

当公钥加密成为锁,私钥就是他的解,反之亦然,形成两种不同的资安用途:

  1. 公钥加密,私钥解密:保护被传送的讯息本身,证明只有私钥拥有者可以阅读。

例如:Alice 要传送银行资料给Jack,她用Jack的公钥加密,而Jack公钥的解锁就是Jack的私钥,代表说这项银行资讯只有Jack有办法解密阅读。

2. 私钥加密,公钥解密:保护公钥持有者,证明发布人(私钥拥有者)的正当性。

例如:Digital Signing (数字签名 )。Jack是一家公司老板,今天他想以他的名义发布讯息给大众,要如何确保是Jack老板本尊发布的呢?只要Jack用他的私钥加密,接下来知道Jack公钥的大众便可以解密得到资讯。

注意:这里使用公私钥的目的就和第一种保护机密讯息不同,而是为了要确保发布人的资讯没有在传送途中被窜改,因为要是被窜改,大众用Jack公钥时便会解密失败。

更简而言之来说,使用公钥加密时有如我们的邮筒,让任何人都可以寄送想保密的资料给我们,只有拥有邮筒钥匙的我们可以看到讯息; 另一方面,用私钥加密目的在确保发布人身份,功用如同digital signature (数字签名)。

现下常见的Public Key Cryptography公钥密码学

  • RSA加密演算法:Rivest Shamir Adelman (RSA) Algorithm
  • ECC加密演算法:Eliptic Curve Cryptography (ECC),目前比特币和以太坊采用的公钥密码学,较受青睐的原因是ECC较RSA处理上更有效率。

关键笔记:Public Key Cryptography 公钥密码学

  • 公钥密码学解释了,为什么在区块链上使用钱包、转换货币安全,同时也解释了做到身份认证的机制。
  • 只有产出公钥的当事人会拥有私钥,而且产生公钥是不可逆的过程,在别人知道你的公钥后,并不可能逆推回去原本的私钥。(需要大到不可能发生的电脑运算能力)
  • 经过加密的讯息有如乱码,需要对应的钥匙(一把公钥配一把私钥or一把私钥配一把公钥)解密才能把乱码打回原形。

Hash Function 哈希函数

什么是区块链的哈希函数?请看下图秒理解。

没错,区块链的哈希函数就是一个可以接收各种档案形式(数字、文字、图像、影片、电子书、合约…等等)、档案大小,并且经过杂数方程式运算,压缩后,丢出一串固定大小的数字。

「咦,数字?我怎么还有看到英文。」

因为哈希函数是以十六进位为基础,不同于我们生活中每天在用的十进位,十六进位在1~9之后代表的数字10~15,就是ABCDEF。

哈希函数其实就像是杂数方程式,跟数学方程式一样有多到数不清种样子,可能是x+y=?最简单的加法,当然也可能如此复杂。

哈希函数也有非常多种,随便举几个例子MD5 (128-bit) 、 SHA-256 (256-bit) 、 SHA-512 (512-bit) 。括弧中的几bit代表档案压缩后,产出那串数字的大小,而bit越大代表可能产生的数字越多种,区块链也就越安全。试想要是今天档案压缩后只有2²=4种可能,跟另一个256 bits的哈希函数大约有2²⁵⁶=1.15 x 100000000000000000000000000000000000000000000000000000000000000000000000000000 (没错,有77个0这么多)种可能相比,哪个更安全,更不容易被骇客破解呢?

哈希函数除了可以把各种档案压缩成一串串大小相同的数字外,他还有几样特色:1. 产出非常迅速,好奇的朋友可以亲自玩玩看SHA-256哈希函数; 2. 即使只是相差一个字,出来的数字相差十万八千里(试着输入dog和dog3,看看会发生什么事!)所以如果智能合约里有一个标点符号、一个英文单字、或是一个数字被改变,都会立刻被发现 ;

3.最后也是最重要的一点,真的很重要,区块链使用的哈希函数是一种one-way(单向)方程式,也就是说没有人可以从产出的那串密码回推原始档案,有没有觉得好像似曾相似?没错,前面提到私钥产出公钥的过程,就是利用哈希函数运算的结果,所以不需要在公开公钥给大众后,担心自己的私钥会有被破解的一天。在这里真的要向想出应用这个运算法则在区块链上的聪明工程师们致敬。

关键笔记:Hash Function哈希函数

  • 哈希看起来跟一堆没有意义的乱码长相有七八分相似。
  • 哈希函数目的在压缩档案,并让各式各样档案可以被量化。
  • 哈希函数有产出迅速、不易重复性(因为仅差一字就完全不同)、和单向的特性。
  • 经由哈希函数加持过的密码,被骇的机率微乎其微; 经由哈希函数加持过的资料,也不可能被窜改。

结语:

区块链有了公私钥确认身份,又有杂数方程式迅速产生单向的加密数字,让没有第三方的区块链也能真正做到交易认证和防伪。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。