区块链技术架构分析(5)-加密算法
加密就是通过一种算法将原始信息进行转换,接收者能够通过密钥对密文进行解密还原成原文的过程。加密算法的典型组件有加解密算法、加密密钥和解密密钥。其中加解密算法是固定不变和公开可见的;密钥则不固定而且需要保护起来,一般来说,对同一种算法,密钥长度越长,则加密强度越大。
加密过程即通过加密算法和加密密钥,对明文进行加密,获得密文。
解密过程即通过解密算法和解密密钥,对密文进行解密,获得明文。
根据加解密的密钥是否相同,算法可以分为对称加密(symmetric cryptography,又称公共密钥加密,common-key cryptography)和非对称加密(asymmetric cryptography,又称公钥加密,public-key cryptography)。两种模式适用于不同的需求,恰好形成互补,很多时候也可以组合使用,形成混合加密机制。
并非所有加密算法的强度都可以从数学上进行证明。公认的高强度加密算法是在经过长时间各方面实践论证后,被大家所认可,不代表其不存在漏洞。但任何时候,自行发明加密算法都是一种不太明智的行为。
A、对称加密
用相同的密钥来加密和解密,对称加密的优点是加解密效率高(速度快,空间占用小),加密强度高。缺点是参与多方都需要持有密钥,一旦有人泄露则安全性被破坏,如何在不安全通道下分发密钥是关键问题。
加密过程:原文+密钥=》密文;解密过程:密文-密钥=》原文。
image对称密码从实现原理上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为加密单位,应用最为广泛。后者则只对一个字节进行加密,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。
代表算法包括:
l DES(Data Encryption Standard):经典的分组加密算法,1977年由美国联邦信息处理标准(FIPS)所采用FIPS-46-3,将64位明文加密为64位的密文,其密钥长度为56位+8位校验。现在已经很容易被暴力破解。
l 3DES:三重DES操作:加密解密加密,处理过程和加密强度优于DES,但现在也被认为不够安全。
l AES(Advanced Encryption Standard):美国国家标准研究所(NIST)采用取代DES成为对称加密实现的标准,1997~2000年NIST从15个候选算法中评选Rijndael算法(由比利时密码学家Joan Daemon和Vicent Rijmen发明)作为AES,标准为FIPS-197。AES也是分组算法,分组长度为128、192、256位三种。AES的优势在于处理速度快,整个过程可以数学化描述,目前尚未有有效的破解手段。
适用于大量数据的加解密;不能用于签名场景;需要提前分发密钥。其中分组加密每次只能处理固定长度的明文,因此过长的内容需要采用一定模式进行加密,《使用密码学》中推荐使用密文分组链接(Cipher Block Chain,CBC)、计数器(Counter,CTR)模式。
B、非对称加密
非对称加密是现代密码学历史上最为伟大的发明,可以很好的解决对称加密需要的提前分发密钥问题。加密密钥和解密密钥是不同的,分别称为公钥和私钥。公钥一般是公开的,人人可获取的,私钥一般是个人自己持有,不能被他人获取。公钥用于加密,私钥用于解密。公钥由私钥生成,私钥可以推导出公钥,从公钥无法推导出私钥。
image它的优点是公私钥分开,不安全通道也可以使用。缺点是加解密速度慢,一般比对称加解密算法慢2到3个数量级;同时加密强度相比对称加密要差。
加密过程:原文+接收方公钥=》密文;解密过程:密文+接收方私钥=》原文
image非对称加密算法的安全性往往需要基于数学问题来保障,目前主要有基于大数质因子分解、离散对数、椭圆曲线等几种思路。
代表算法包括:
l RSA:经典的公钥算法,1978年提出。算法利用了对大数进行质因子分解困难的特性,但目前还没有数学证明两者难度等价,或许存在未知算法在不进行大数分解的前提下解密。
l Diffie-Hellman密钥交换:基于离散对数无法快速求解,可以在不安全的通道上,双方协商一个公共密钥。
l ElGamal:利用了模运算下求离散对数困难的特性。被应用在PGP等安全工具中。
l 椭圆曲线算法(Elliptic curve cryptography,ECC):现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。最早在1985年提出。ECC系列算法一般被认为具备较高的安全性,但加解密计算过程往往比较费时。
一般适用于签名场景或密钥协商,不适于大量数据的加解密。 其中RSA算法等已被认为不够安全,一般推荐采用椭圆曲线系列算法。
C、混合加密机制
这种方式将加密过程分为两个阶段,阶段一使用非对称加密进行秘钥的分发使得对方安全地得到对称加密的秘钥,阶段二使用对称加密对原文进行加解密,如下图所示。
image典型的场景是现在大家常用的HTTPS机制。
建立安全连接具体步骤如下:
l 客户端浏览器发送信息到服务器,包括随机数R1,支持的加密算法类型、协议版本、压缩算法等。注意该过程为明文。
l 服务端返回信息,包括随机数R2、选定加密算法类型、协议版本,以及服务器证书。注意该过程为明文。
l 浏览器检查带有该网站公钥的证书。该证书需要由第三方CA来签发,浏览器和操作系统会预置权威CA的根证书。如果证书被篡改作假(中间人攻击),很容易通过CA的证书验证出来。
l 如果证书没问题,则用证书中公钥加密随机数R3,发送给服务器。此时,只有客户端和服务器都拥有R1、R2和R3信息,基于R1、R2和R3,生成对称的会话密钥(如AES算法)。后续通信都通过对称加密进行保护。
D、常见加密算法的对比
imageE、比特币中加密算法的使用
比特币系统中使用的就是一种非常典型的非对称加密算法——椭圆曲线加密算法(ECC)。比特币系统一般从操作系统底层的一个密码学安全的随机源中取出一个256位随机数作为私钥,私钥总数为2256 个,所以很难通过遍历所有可能的私钥得出与公钥的对应的私钥。用户使用的私钥还会通过SHA256和Base58转换成易书写和识别的50位长度的私钥,公钥则首先由私钥和Secp256k1椭圆曲线算法生成65字节长度的随机数。
image区块链资源汇总
区块链学习资源大汇总
http://www.nextblockchain.top/topics/6
区块链常用数据BoltDB数据库源码解析
http://www.nextblockchain.top/categories/boltdb