时间:2018年10月18日
讲师:Ulord技術團隊/优得学院 杨博士
主题:区块链与密码学
一、区块链和密码学的关系
在《中国区块链技术和应用发展白皮书2016》中关于区块链的定义,“通过密码学的机制来确保交易无法被抵押和破坏,并尽量保护用户信息和记录的隐私性。”也就是说密码学的功能在区块链领域中体现在以下三个方面:
1、怎么防止交易记录被篡改?
2、怎么证明交易双方的身份?
3、怎么保护交易双方的隐私?
简单的说,就是如何确保交易信息的「完整性」、「真实性」和「隐私性」。
现代密码学的发展为解决以上几个问题提供了不少手段,包括了哈希函数,加解密算法,数字证书与数字签名,公钥体系,Merkle树等,在这一讲中,我们一一解说密码学的相关知识,为后续学习奠定好基础!
二、哈希函数
什么是哈希函数?哈希函数是密码学的一个重要分支,是一个非常基础,也非常重要的计算机算法。哈希函数是一种将「任意长度的输入」转换为「固定长度的输出」,而且是不可逆的单向密码机制。
例如下面的例子,以哈希函数计算下列绿色颜色标出的一段话,将會得出一段固定长度字符串的哈希值。
哈希函数的主要用途非常的广泛,常见的一个是在数字签名,另外一类是消息认证。数字签名指的是验证信息来源的真实性,消息验证是验证消息的完整性,在区块链中,有两个常用的密码学哈希函数,一个是SHA256,另一个是RIPEMD160。
(一)RIPEMD160、SHA256主要用于生成钱包地址,用这两个哈希函数生成两个钱包地址主要是用来识别不同的用户;
(二)SHA256是区块链技術中的主要使用的哈希函数,包括区块的头部信息及交易数据,用來确保数据的完整性;
(三)SHA256的另一个主要用途是提供共识算法的计算,典型的共识算法,例如工作量证明(POW;proof of work)的计算。
进行共识算法的计算就是我们俗称的「挖矿」。一个好的哈希函数,应该具有以下四个特点:
第一个特点是正向快速:指的是给定一明文和哈希算法,在有限的时间和有限的资源内,能够快速的计算出哈希值。
第二个特点是逆向困难:指的是给定若干哈希值,在有限的时间和有限的资源内,在现有的算力内基本上不可能反推出明文。
第三个特点是输入敏感:指的是只要在原始输入信息中修改一点点,将会产生不同且差异极大的哈希值。
第四个特点是冲突避免:如果两个内容不同的明文,产生出一样的哈希值,称作发生冲突或碰撞。冲突避免又称为「抗碰撞性」,分成两类,一类是抗弱碰撞性,指如果给定一个明文的前提下,无法找到碰撞的另一个的明文;另外一类抗强碰撞性,是指无法找到任意的两个明文发生碰撞,也就是不发生两个明文的哈希值一致的情况。
再者,哈希函数另外一个非常重要的用途:数字摘要(又称作指纹)。它是指对数字内容进行哈希运算,获取唯一的摘要值,来代表原始的数字内容。数字摘要可以利用哈希函数的抗碰撞性特点,來确保内容沒有被篡改过。例如在网络上面下载一个软件或文件时,有些网站同时会提供一个数字摘要值,我们将下载的原始文件,以哈希函数进行计算后得到它的摘要值,再与网站提供的摘要值进行比对。如果一致,就可以确认这个内容没有被修改过;如果不一致,表示在下载文件的过程中间有被篡改的可能。
三、加解密算法
加解密算法是密码学的核心技术,分为两大基本类型:(一)对称加密、(二)非对称加密。区分「对称加密」和「非对称加密」重要的区分点,在於加解密秘钥是否相同。
以下依据加解密算法的特点,优势,缺陷和代表算法对两类加解密算法进行对比:
现代加解密系统,包括三个典型组建:(一)加解密算法、(二)加密密钥、(三)解密密钥。
其中加解密算法是固定不变的,并且是公开可见。但是密钥则是最关键的信息,需要安全的保存起来,甚至通过一些特殊的硬件来进行保护。
一般来说,在同一种算法下,密钥在每次加密前随机生成,长度越长,则加密强度越大。在加密的过程中,通过加密算法和加密密钥对明文进行加密获得密文;在解密的过程中,通过解密算法和解密密钥对密文进行解密获取明文。
根据加解密过程中间所使用的密钥是否相同,区分为对称加密算法和非对称加密算法两种。这两种模式适用不同的需求,可以形成一个互补,也可以组合使用,形成一种混合的加密机制。
(一)对称加密算法
是指加密密钥和解密密钥是相同的,也就是在加密的过程中间使用的加密密钥,跟在解密的过程中使用的解密密钥是同一个密钥。
对称加密的优点是加解密的速度很快、空间占用小、保密强度很高。但缺点是参与的多方需要持有密钥,容易泄露,安全性易破坏。如同谍战片中,持有密码本(就是密钥)的情报人员,一旦被抓获的话,是一个非常危险的事情。另外一个缺点是,密钥如何分发跟如何传递是一个大的难题。对称加密算法主要适用于大量数据的加解密,但不太能应用于签名场景。
(二)非对称加密算法
1976年,美国学者Diffie和Hellman发表了著名论文《密码学的新方向》,提出了非对称密码算法的思想,也就是「公开密钥密码体制」。
1978年,Rivest、Shamir和Adleman提出的RSA算法,也就是以他们三个人的名字的首字母命名的算法,这个算法体现了公钥算法思想,并具有实用性。
公钥密码体制是密码学史上最大也是唯一真正的革命,在信息安全的应用中,广泛的应用公钥密码技术,可以说「没有公钥密码体制,就没有现代密码学」。
公钥密码体制,也就是非对称加密算法,公钥和私钥是不同的,公钥一般是公开的,每个人都可以获取,私钥是个人自己持有不能被他人获取。非对称加密算法的优点是公钥私钥兩者是分开的,容易管理,并且容易完成密钥的分发,因为公钥可以分发出去,只要自己管理好私钥就可。但缺点就在於,它的加解密速度比较慢。
因此,非对称加密算法适用于签名场景,或者密钥协商。所谓密钥协商,就是在对称加密中如何去传递密钥。非对称加密算法有效的解决密钥传输和密钥管理的问题 。但是,公认的高强度的加密算法和实现往往都是要经过长时间充分的实践认证以后才被大家所认可,同時,也不代表其绝对不存在漏洞。因此自行设计和发明未经过大规模验证的加密算法,是一种不太明智的行为,因為即便不公开算法的加密过程也很容易被攻破 ,而無法在安全性上得到保障。
四、数字签名和数字证书
(一)数字签名
数字签名类似于在纸质合同上面来确认合同的内容,它是用来证实某数字内容的完整性和来源。 签名过程就是签名者首先对这消息进行处理,生成一无法被伪造的数字串,同时此数字串也是对消息的真实性的有效证明。因此,利用数字签名技术,能够确保消息传输的完整性,发送者的身份认证,以及防止交易中的抵赖发生。
例如:A要发送给B一个文件
1.首先,A先利用哈希函数先对原始文件生成一个数字摘要,然后用自己的私钥对这个摘要进行加密,再将文件和加密串一起都发给B。
2.B收到原始文件和加密串,先用A的公钥来解密加密串,得到原始的数字摘要。 然后再利用哈希函数对原始文件得到摘要,再把解密后的摘要和这个摘要进行比对,如果一致,说明该文件确实是A发过来的,并且内容没有被修改过。
数字签名是一个非常重要的应用,在比特币系统里面,比特币的拥有者就是利用私钥给交易消息签名,来证明消息的发布者就是相应比特币地址的所有者。
图示如下:
Step1. 原始文件通过哈希函数得到一个摘要。
Step2. 利用私钥對摘要进行加密,得到一个加密串。
Step3.原始文件和加密串一起打包传递给接收者
Step4.接收者利用发送者的公钥对加密串进行解密,得到解密后的字符串。再利用同样的哈希函数對对原始文件获取摘要,对两者进行一个比对。如果兩者一致,表示这个消息确实是由正确的发送者发送过来的,同时内容在传输的过程中没有被篡改,这就是数字签名的过程。
数字签名包括单签名、多重签名、群签名和环签名。重点介绍多重签名,所謂多重签名就是多个用戶對同一個訊息進行簽名。以比特币交易为例,就是多个密钥来授权一個比特币的交易,它通常用来界定對加密货币的所有权。
在传统的比特币账户中,用户的比特币地址中,每一个地址都有一个对应的私钥,这一类称为单签名交易。 因为转账只需要一个比特币地址相关的私钥拥有者签名就可以,因此安全性比較低。所以實務上经常会采用多重签名,比如用三个相关的私钥,通常需要其中的两个以上才能完成一筆转账,由于需要通过多方的地址确认,这就需要这多方同时合作,这种参与方可以是人,机构或者程序脚本。
(二)数字证书
在数字签名的过程中,必須以用户的公钥来解密它用私钥加密的密文,数字证书机制就是用來确保該公钥确实是原始公钥,也就是说数字证书是用来证明某个公钥是谁的。公钥的分发是很重要的,因為一旦公钥被人替换,则整个安全体系将會被破坏掉。
数字证书是用來证明信息的准确性和合法性,是由证书的认证机构(Certification Authority;CA)来签发。在整个密码体制中,CA是一个非常重要的环节。数字证书是经过证书的认证机构, 具体上,数字证书内容包括了版本序列号、签名算法类型、签发者的信息、公开密钥、CA的数字签名以及其他信息等等。
其中最重要的两类信息,包括签发的「公开密钥」與「CA数字签名」。因此只要通过此证书就能证明某一个公钥是合法的。因为它带有一个CA的数字签名,相当于CA为这个密钥来背书。
证明CA的签名合法或者不合法的方式,主要是在主流的操作系统或者浏览器里面提前预制一些CA的证书,相当于承认这些证书是合法的,然后所有基于它们认证的签名自然认为是合法的,这样子就确保通过认证机构签名的证书都是合法的。
五、PKI体系(公钥密码体系)
PKI体系,公钥密码体系,是指公钥基础设施。並非指一种技术而是综合多种密码学手段,来实现安全可靠传递消息、身份确认的框架和规范,包括如何登记、审核,签发、销毁证书的一系列组建和规范。
一般包含几个组建:
(一)证书的认证机构(Certification Authority;CA):负责证书的颁发和作废,同时接收登记机构(RA)的请求。
(二)登记机构(RA):對对用户身份进行验证、校验数据的合法性、负责登记,审核后就发给CA。
(三)证书数据库:主要是存放证书,一般采用LDAP目录服务,标准格式采用X.500系列。
以上三个组建里,CA是最核心的组建,主要完成对公钥的管理。
用户基于PKI体系,申请一个证书,一般有两种方式:
(一)由CA来生成证书和私钥;
(二)由用户生成公钥和私钥,然后由CA公钥對和私钥进行背书签发。
六、Merkle Tree(默克爾樹)
Merkle Tree(默克爾樹),通常也被稱作Hash Tree(哈希树),顧名思義,就是存儲哈希值(Hash)的一棵樹,大多數是二叉樹,也可以多叉樹。是由一个根节点、一组中间节点和一组叶节点所组成。最下面的叶节点包含了存储数据或其哈希值,每個中间节点是由两个子节点内容的哈希值所组成,根节点也是由两个子节点内容的哈希值来组成,进一步Merkle树可以推广到多叉树的型態。
从默克爾樹的构成中,可以发现一個很重要的特点,就是底层数据的任何变动,例如叶子节点或者中间节点有任何的变动都会向上传递,一直传递到根节点。这一个特点產生了很多应用。例如:
七、回顧及反思
最后总结本課主要内容,由区块链的定义出发,引出了密码学是确保区块链交易信息机密性,完整性,认证性,不可抵赖性的重要手段。包括了哈希算法、加解密算法(包含对称加密和非对称加密)、数字签名和数字证书、公钥密码体系(即PKI体系),以及默克爾樹(Merkle Tree)。