区块链安全 4.2 数据层信息安全(未完)

密码学(Cryptography)是现代IT信息技术的安全基石。

密码学领域十分繁杂,本章节将介绍密码学领域中的一些基础知识,包括对称加密、非对称加密、数字签名、数字信封、数字证书等类,并重点介绍在区块链系统中广泛使用的椭圆曲线算法、哈希算法、哈希指针、哈希树(Merkle Tree)等。

区块链系统中大量使用了密码学技术,如:

  • 通过使用非对称加密的椭圆曲线数字签名算法,确保交易的身份验证和不可抵赖。
  • 通过使用各种哈希算法来实现PoW共识机制。
  • 通过哈希算法对交易和区块内容进行计算而产生的哈希指针,一方面通过哈希指针将多个交易记录组成哈希树,作为区块的主体内容;另一方面通过哈希指针将多个区块头组成一个链条,形成区块链。采用这样的结构,可以防止交易和区块信息的被篡改,同时能实现交易的快速验证。

在下一章节,还将进一步介绍用于数据隐私保护相关的高级密码学技术,包括盲签名、环签名、同态加密、零知识证明等。

4.2.1 密码学概述

密码学(cryptology)是研究编制密码和破译密码的技术科学:研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学。编码学和破译学统称 **密码学 ** 。

密码学可分为古典密码学和现代密码学。古典密码学主要关注信息的保密书写和传递,以及与其相对应的破译方法。而现代密码学不只关注信息保密问题,还同时涉及信息完整性验证、信息发布的不可抵赖性、以及在分布式计算中产生的来源于内部和外部的攻击的所有信息安全问题。
1949年Shannon提出了 的概念为密码学奠定了理论基础,将密码学变为一门科学。Shannon之后的很多年里陆续出现和研究的密码系统都是对称密码体制,它们的安全性基于密钥的保密。
1976年,Diffie和 Hellman发表的 “New Direction in Cryptography”一文中,首次提出了公开密钥体制的思想,使得在开放的环境中确保信息的保密性、完整性、认证性和不可否认性成为可能,是现代密码学的开端。

加解密是密码学的核心。

  • 加密 是将明文用算法和密钥加密成密文;
  • 解密 是将密文用算法和密钥还原成明文。

为了抵抗密码分析,通常要求加密算法比较固定,但是密钥经常改变,因此衍生出密码学上的 柯克霍夫原则(Kerckhoffs's principle),该原则由奥古斯特·柯克霍夫(Auguste Kerckhoffs)在19世纪提出,数据的安全基于密钥而不是算法的保密。换句话说,系统的安全性取决于密钥,对密钥保密,对算法公开。

1.即使非数学上不可破解,系统也应在实质(实用)程度上无法破解。
2.系统内不应含任何机密物,即使落入敌人手中也不会造成困扰。
3.密匙必须易于沟通和记忆,而不须写下;且双方可以容易的改变密匙。
4.系统应可以用于电讯。
5.系统应可以携带,不应需要两个人或以上才能使用(应只要一个人就能使用)。
6.系统应容易使用,不致让使用者的脑力过份操劳,也无需记得长串的规则。
——柯克霍夫原则(Kerckhoffs's principle)

信息论的发明者 克劳德•艾尔伍德•香农(Claude Shannon)将其总结为:

敌人了解系统(The enemy knows the system.)
——香农箴言

它和传统上使用隐密的设计、实现、或其他等等来提供加密的 隐晦式安全(Security through obscurity)想法相对,是一种 透明式安全(security through transparency),是现代密码学设计的基本原则。

从密码体系上来讲,通常可以分为:

  • 对称加密体系:对信息进行明文/密文变换时,加解和解密使用相同密钥的密码体系。对称密码体制,运算量小、加解密快速,但是密钥管理不便,使其应用场合受到限制。
  • 非对称加密体系:又称 公开密钥加密体系,指在加密和解密时,使用不相同的密钥。在非对称加密体系中,每个用户都具有一对密钥:一个是可以公开的公钥;一个需要保密的私钥。用私钥可以计算出公钥,而用公钥则无法计算出私钥信息。当用公钥加密时,只能用对应的私钥来解密。反之,用私钥加密,只能用对应的公钥来解密 。非对称加密体系可以方便的实现密钥分配和管理等功能,但是其运算效率较低。

两种加密体系在加密性能和加密强度上各有优缺点,因而在实际运用中,通常将对称加密、非对称加密,与 单向散列函数(哈希算法,Hash) 等技术结合起来使用:一方面可以支持更多的应用场景;另一方面可以在保持较高安全强调的基础上,提高性能。

典型的混合加密场景,有数字签名和数字信封。

数字签名 综合使用了单向散列函数和非对称加密技术,可以保证接收者能够核实发送者对报文的签名,发送者事后不抵赖报文的签名,接收者不能篡改报文内容和伪造对报文的签名。在公钥密码体制中,用户的密钥是由公钥和私钥组成的密钥对,私钥秘密保存,公钥公开。由于从公钥不能推出私钥,所以公开公钥不会损害私钥的安全。数字签名就是签名方用自己的私钥对某消息进行加密,验证方如果能够用签名方的公钥正确解密,就肯定该消息是签名方签署的,这就是数字签名的基本原理。

数字信封 综合使用了对称加密和非对称加密技术,实现了对大块明文数据的高效加密。由于对称加解密速度远高于非对称加解密,采用数字信封后,一方面,用对称密钥CEK(加密内容的密钥)去加密原始明文数据,提高加密速度。另一方面,用非对称密钥(B的公钥)去加密保护CEK,提高了安全性。由于CEK是随机生成的,只有拥有B私钥的才能解密并获取原始的CEK,最终才能通过CEK完成对密文的解密,最终获取明文。

结合数字签名和数字信封,既可以确保数据隐私性,又可以确保的数据的完整性和不可抵赖性。其完整的流程如下图所示。

区块链安全 4.2 数据层信息安全(未完)_第1张图片
图4-2.一个完整的数字签名和数字信封流程

在非对称加密体系中,公钥通常需要公开给其他人使用。而公钥本身只是一个长数字串,并不方便识别和使用,因而业界又提出了 数字证书(Certificate)”的概念。

数字证书 是一种由权威公正的第三方信任机构——CA(Certificate Authority)认证中心——基于 公开密钥基础设施(PKI,Public Key Infrastructure)来签发的电子文档,其中包含有用户公钥和用户身份等信息,广泛用于涉及需要身份认证和数据安全的领域。常见的数字证书有服务器TLS/SSL证书、电子邮件证书、客户端证书等。

对称加密的安全性依赖于密码的保密性,对理想的对称加密算法,只能穷举所有密码来解密。
常用的对称密钥加密算法有 :

  • DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
  • 3DES(Triple DES):是基于 DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
  • AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。

公开密钥密码学本质上是基于一些历史悠久的数学难题,如背包问题、离散对数问题、因子分解问题。每个公钥都是一道数学难题,攻击者只有设法解出了这道难题,才能得到私钥,完成解密 。
常用的非对称加密算法有:

  • DSA(Digital Signature Algorithm)算法:基于ElGamal演变而来的数字签名算法,其安全性基于计算有限域上离散对数这一难题。一般只能用于数字签名,而不能用于加密。
  • RSA:由RSA公司发明,其安全性基于数论中大素数乘积的因子分解难题。RSA算法既可用于数字签名,可以用于加密。
  • ECC(Elliptic Curves Cryptography):基于椭圆曲线的离散对数问题(ECDLP)的密码学,通过利用有限域上椭圆曲线的点构成的群,实现了离散对数密码算法。它既可以用于签名,也可用于加密。

下面,将重点介绍与区块链相关的安全算法和技术。

4.2.2 椭圆曲线算法

椭圆曲线密码学ECC(Elliptic Curves Cryptography),基于椭圆曲线离散对数问题(ECDLP)的密码学,通过利用有限域上椭圆曲线的点构成的群,实现了离散对数密码算法。它既可以用于签名,也可用于加密。
椭圆曲线理论是代数几何、数论等多个数学分支的一个交叉点,一直被认为是纯理论学科。近年来,由于公钥密码学的产生与发展,该学科也找到了它的应用领域。在RSA密码体制的基础性问题—大整数分解和素性检测的研究方面,椭圆曲线是一个强有力的工具。特别地,以椭圆曲线上的有理点构成的Abel群为背景结构,实现各种密码体制已是公钥密码学领域的一个重要课题。

椭圆曲线就是三次平滑代数平面曲线,用代数几何的语言说就是亏格为1的代数曲线。域F上的椭圆曲线E就是满足下列非奇异的Weierstrass方程的所有点( x,y) 的集合: ![](http://latex.codecogs.com/svg.latex?\textstyle{y^2+a_1xy+a_3y = x^3 + a_2 x^2 + a_4x + a_6})
当域的特征不为 2,3 时,Weierstrass方程可以转化为下面短的形式:
![](http://latex.codecogs.com/svg.latex?{y^2 = x^3 + a_2 x^2 + a_4x + a_6})
其中要求判别式:![](http://latex.codecogs.com/svg.latex?\textstyle\Delta ={4a3+27b2 \neq 0})
参考:椭圆曲线在密码中的应用-过去,现在,将来

椭圆曲线在密码中最早的应用是荷兰数学家Hendrik Lenstra在1984年提出的利用椭圆曲线性质分解整数的精妙算法。学术界把Lenstra的分解算法称为ECM ( elliptic curve method)。ECM 的基本想法: 假定要分解整数n = pq,首先把某一椭圆曲线E定义在( mod n)上,即环 Zn上。找到 E 的某个点P,选定一正整数k,利用点加和倍点公式计算 kP,该计算可以在 O( log k)时间内完成。当 kP = O时,也就是在计算kP时出现了模n的不可逆元素,即点加或倍点公式中μ的分子与n不互素,从而可以分解n。当 kP = O时,意味着k整除该椭圆曲线定义在 Fp上的群的阶或定义在Fq上的群的阶。所以可以通过随机选曲线和点,使得该曲线在模p或q时的点数是一些小素数乘积,然后取k = B! ( B 是某一预先设定的界),计算 kP。
椭圆曲线素性检测方法( ECPP)是1986年由Shafi Goldwasser和Joe Kilian提出的一个想法,并由Oliver Atkin在同年转化成一个算法。之后该算法被许多研究者改进,最有名的是liver Atkin和 Francois M orain在1993的改进。ECPP是一个概率检测算法,但它是一种零错误概率算法。改进的 Atkin-M orain算法的计算时间复杂度是O( log 4n),这使得它成为首选的素性检测方法。
1985年,华盛顿大学的Neal Koblitz和IBM的Victor Miller分别独立地提出了利用有限域上椭圆曲线群来设计公钥加密方案,即椭圆曲线公钥密码( elliptic curve cryptography,ECC)。在椭圆曲线加密(ECC)中,利用了某种特殊形式的椭圆曲线,即定义在有限域上的椭圆曲线。其方程如下:

这里p是素数,a和b为两个小于p的非负整数,它们满足:

其中,x,y,a,b∈Fp,(x,y)和一个无穷点O就组成了椭圆曲线E。
椭圆曲线离散对数问题ECDLP定义如下:给定素数p和椭圆曲线E,对 Q=kP,在已知P,Q的情况下求出小于p的正整数k。可以证明,已知k和P计算Q比较容易,而由Q和P计算k则比较困难,至今没有有效的方法来解决这个问题,这就是椭圆曲线ECC加密算法原理之所在。
相比RSA算法所依赖的“大素数乘积分解难题”,ECC算法所依赖的“椭圆曲线离散对数问题(ECDLP)”,其解答难度更高。因此,在同等安全强度下 ECC 可以用较小的开销和时延实现较高的安全性 。
表4-1通过三类算法所用的密钥长度和被攻破时间的对应关系,来反映出他们的安全性[4-2] 。可以看出,使用较短密钥长度的ECC可以达到较长密钥长度的RSA/DSA相同的安全效果。同时,随着抗攻击强度的增加,ECC密钥长度的增长速度远低于RSA/DSA密钥长度的增长速度。
大致而言,1024位RSA、1024位DSA和160位基于GF(p)的ECC具有相同的安全性。表4-2是在此相同安全性条件下三种算法计算开销的实验数据,以及所需要的系统参数长度、公钥长度、私钥长度的对比。在同等计算机资源下,算法的计算开销越大,意味着计算时间会越长,计算速度越慢。总的来说,ECC在签名和验证方面都比DSA要快,在密钥生成、签名(解密)方面较RSA快,但在验证(加密)方面较RSA慢[4-3] 。

。。。


你可能感兴趣的:(区块链安全 4.2 数据层信息安全(未完))