早知这样,何必恐慌?

640?wx_fmt=jpeg


“一旦黎曼猜想被证明,区块链也即将湮灭”,就在前些天,加密世界充斥着这样的谣言,着实令人心慌,一时业内专家纷纷自发站出来辟谣。


如果那时,你熟知加密算法,就不会有那样的恐慌了吧!


那么什么是非对称加密?什么是RSA加密算法?小编四处搜刮资源,研究了相关的加密算法,收获颇多,受益匪浅,在此分享出来,希望对你有所帮助!



以下内容节选自《区块链网络构建和应用:基于超级账本Fabric的商业实践》,福利!文末送书哟!


加解密算法是密码学的核心技术,从设计理念上可以分为对称加密非对称加密两大基本类型。

      640?wx_fmt=png

加解密算法的类型


1、加解密系统基本组成


现代加解密系统的基本组成一般包括:加解密算法、加密密钥、解密密钥


其中,加解密算法自身是固定不变的,并且一般是公开可见的;密钥则是最关键的信息,需要安全地保存起来,甚至通过特殊硬件进行保护。


一般来说,对同一种算法,密钥需要按照特定算法在每次加密前随机生成,长度越长,加密强度越大。


加解密的基本过程如下图所示。

 640?wx_fmt=png加解密的基本过程


加密过程中,通过加密算法和加密密钥,对明文进行加密,获得密文。解密过程中,通过解密算法和解密密钥,对密文进行解密,获得明文。


根据加解密过程中所使用的密钥是否相同,算法可以分为对称加密(symmetric cryptography,又称公共密钥加密,common-key cryptography)和非对称加密(asymmetric cryptography,又称公钥加密,public-key cryptography)。


两种模式适用于不同的需求,恰好形成互补。某些时候可以组合使用,形成混合加密机制。


并非所有加密算法的安全性都可以从数学上得到证明。公认的高强度的加密算法和实现往往需要经过长时间各方面充分实践论证后,才被大家所认可,但也不代表其绝对不存在漏洞。


因此,使用自行设计和发明的、未经过大规模验证的加密算法是一种不太明智的行为。


即便不公开算法加密过程,也很容易被攻破,在安全性上无法得到保障。


实际上,密码学实现的安全往往是通过算法所依赖的数学问题来提供的,而并非通过对算法的实现过程进行保密。


2、对称加密算法


对称加密算法,顾名思义,加密和解密过程的密钥是相同的。


该类算法的优点是加解密效率(速度快,空间占用小)和加密强度都很高。


缺点是参与方都需要提前持有密钥,一旦有人泄露则安全性被破坏;另外如何在不安全通道中提前分发密钥也是个问题,需要借助Diffie-Hellman协议或非对称加密方式来实现。


对称密码从实现原理上可以分为两种:分组密码和序列密码。


前者将明文切分为定长数据块作为基本加密单位,应用最为广泛。


后者则每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。


分组对称加密的代表算法有DES、3DES、AES、IDEA等。


  • DES(Data Encryption Standard):是一种经典的分组加密算法。1977年,美国联邦信息处理标准(FIPS)采用FIPS-46-3,将64位明文加密为64位的密文,其密钥长度为64位(包含8位校验位)。现在已经很容易被暴力破解。


  • 3DES:采取三重DES操作,加密→解密→加密,处理过程和加密强度优于DES。但现在也被认为不够安全。


  • AES(Advanced Encryption Standard):由美国国家标准研究所(NIST)采用,取代DES成为对称加密实现的标准。1997年~2000年NIST从15个候选算法中评选Rijndael算法(由比利时密码学家Joan Daemon和Vincent Rijmen发明)作为AES,标准为FIPS-197。AES也是分组算法,分组长度有128、192、256位三种。AES的优势在于处理速度快,整个过程可以用数学描述。目前尚无有效的破解手段。


  • IDEA(International Data Encryption Algorithm):是1991年由密码学家James Massey与来学嘉联合提出的。其设计类似于3DES,密钥长度增加到128位,具有更好的加密强度。


序列密码,又称流密码。1949年,Claude Elwood Shannon(信息论创始人)首次证明,要实现绝对安全的完善保密性(perfect secrecy),可以通过“一次性密码本”的对称加密处理,即通信双方每次使用与明文等长的随机密钥串对明文进行加密处理。


序列密码采用了类似的思想,每次通过伪随机数生成器来生成伪随机密钥串。代表算法有RC4等。


对称加密算法适用于大量数据的加解密过程,但不能用于签名场景,并且往往需要提前分发好密钥。


3、非对称加密算法


非对称加密是现代密码学历史上一项伟大的发明,可以很好地解决对称加密算法中提前分发密钥的问题。


顾名思义,非对称加密算法中,加密密钥和解密密钥是不同的,分别称为公钥(public key)和私钥(private key)。


私钥一般需要通过随机数算法生成,公钥可以根据私钥生成。


公钥一般是公开的,他人可获取的;私钥一般是个人持有,他人不能获取。


非对称加密算法的优点是公私钥分开,在不安全通道中也可使用。缺点是处理速度(特别是生成密钥和解密过程)往往比较慢,一般比对称加解密算法慢2~3个数量级,同时加密强度也往往不如对称加密算法。


非对称加密算法的安全性需要基于数学问题来保障,目前主要有基于大数质因子分解、离散对数、椭圆曲线等经典数学难题进行保护。


代表算法包括:RSA、ElGamal、椭圆曲线、SM2等。


  • RSA:是经典的公钥算法,1978年由Ron Rivest、Adi Shamir、Leonard Adleman共同提出,他们于2002年因此获得图灵奖。算法利用了对大数进行质因子分解困难的特性,但目前还没有数学证明两者难度等价,或许存在未知算法可在不进行大数分解的前提下解密。


  • Diffie-Hellman密钥交换:基于离散对数无法快速求解的特性,可以在不安全的通道上,由双方协商一个公共密钥。


  • ElGamal:由Taher ElGamal设计,利用了模运算下求离散对数困难的特性。被应用在PGP等安全工具中。


  • 椭圆曲线算法:是现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。最早在1985年由Neal Koblitz和Victor Miller分别独立提出。ECC系列算法一般被认为具备较高的安全性,但加解密计算过程往往比较费时。


  • SM2(ShangMi 2):是我国商用密码算法,由国家密码管理局于2010年12月17日发布。它同样基于椭圆曲线算法,加密强度优于RSA系列算法。


非对称加密算法一般适用于签名场景或密钥协商,但不适于大量数据的加解密。


目前普遍认为,RSA类算法可能在不远的将来被破解,一般推荐采用安全强度更高的椭圆曲线系列算法。


4、选择明文攻击


在非对称加密中,由于公钥是可以公开获取的,因此任何人都可以给定明文,获取对应的密文,这就带来选择明文攻击的风险。


为了避免这种风险,现有的非对称加密算法(如RSA、ECC)都引入了一定的保护机制。对同样的明文使用同样密钥进行多次加密,得到的结果完全不同。这就避免了选择明文攻击的破坏。


在实现上可以有多种思路。一种是对明文先进行变形,添加随机的字符串或标记,再对添加后结果进行处理。另外一种是先用随机生成的临时密钥对明文进行对称加密,然后再进行对称密钥的加密,即混合利用多种加密机制。


5、混合加密机制


混合加密机制同时结合了对称加密和非对称加密的优点。


先用计算复杂度高的非对称加密协商出一个临时的对称加密密钥(也称为会话密钥,一般相对所加密内容来说要短得多),然后双方再通过对称加密算法对传递的大量数据进行快速的加解密处理。


典型的应用案例是现在大家常用的HTTPS协议。HTTPS协议正在取代传统的不安全的HTTP协议,成为最普遍的Web通信协议。


HTTPS在传统的HTTP层和TCP层之间通过引入Transport Layer Security/Secure Socket Layer(TLS/SSL)加密层来实现可靠的传输。


SSL协议最早是Netscape于1994年设计出来的、实现早期HTTPS的方案,SSL 3.0及之前版本存在漏洞,被认为不够安全。TLS协议是IETF基于SSL协议提出的安全标准,目前最新的版本为1.2(2008年发布)。推荐使用的版本号至少为TLS 1.0,对应于SSL 3.1版本。除了Web服务外,TLS协议也广泛应用于E-mail、实时消息、音视频通话等领域。


采用HTTPS建立安全连接(TLS握手协商过程)的基本步骤如下。


  • 客户端浏览器发送信息到服务器,包括随机数R1、支持的加密算法类型、协议版本、压缩算法等。注意,该过程为明文。


  • 服务端返回信息,包括随机数R2、选定加密算法类型、协议版本以及服务器证书。注意,该过程为明文。


  • 浏览器检查带有该网站公钥的证书。该证书需要由第三方CA来签发,浏览器和操作系统会预置权威CA的根证书。如果证书被篡改或作假(中间人攻击),很容易通过CA的证书验证出来。


  • 如果证书没问题,则客户端用服务端证书中的公钥加密随机数R3(又叫Pre-MasterSecret),发送给服务器。此时,只有客户端和服务器都拥有R1、R2和R3信息,基于随机数R1、R2和R3,双方才能通过伪随机数函数来生成共同的对称会话密钥MasterSecret。


  • 后续客户端和服务端的通信都通过对称加密算法(如AES)进行保护


       640?wx_fmt=png

TLS握手协商过程


可以看出,该过程的主要功能是在防止中间人窃听和篡改的前提下完成会话密钥的协商。为了保障前向安全性(perfect forward secrecy),TLS对每个会话连接都可以生成不同的密钥,避免某次会话密钥泄露之后影响其他会话连接的安全性。


需要注意,TLS协商过程支持的加密算法方案较多,要合理地选择安全强度高的算法,如DHE-RSA、ECDHE-RSA和ECDHE-ECDSA。


6、离散对数与DH密钥交换协议


对称密钥的协商过程采用了RSA非对称加密算法,实践中也可以通过Diffie-Hellman协议来完成。


DH(Diffie-Hellman)密钥交换协议是一个经典的协议,最早发表于1976年,应用十分广泛。使用该协议可以在不安全信道完成对称密钥的协商,以便后续通信采用对称加密。

DH协议的设计基于离散对数问题(Discrete Logarithm Problem,DLP)。离散对数问题是指对于一个很大的素数p,已知g为p的模循环群的原根,给定任意x,求解X = g^x mod p是可以很快获取的。


但在已知p、g和X的前提下,逆向求解x目前没有多项式时间实现的算法。该问题同时也是ECC类加密算法的基础。


DH协议的基本交换过程如下:


  • Alice和Bob两个人协商密钥,先公开商定p和g;


  • Alice自行选取私密的整数x,计算X = g^x mod p,发送X给Bob;


  • Bob自行选取私密的整数y,计算Y = g^y mod p,发送Y给Alice;


  • Alice根据x和Y,求解共同密钥Z_A = Y^x mod p;


  • Bob根据X和y,求解共同密钥Z_B = X^y mod p。


实际上,Alice和Bob计算出来的结果将完全相同,因为在mod p的前提下,Y^x = (g^y)^ x = g^(xy) = (g^x)^y = X^y。而信道监听者即便在已知p、g、X、Y的前提下,也无法求得Z。


7、区块链加密技术


数字加密技术是区块链技术应用和开发的关键。一旦加密方法遭到破解,区块链的数据安全将受到挑战,区块链的不可篡改性将不复存在。


区块链主要应用非对称加密算法,非对称加密技术在区块链的应用场景主要包括信息加密、数字签名和登录认证等。


  • 信息加密场景主要是由信息发送者(记为A)使用接收者(记为B)的公钥对信息加密后再发送给B,B利用自己的私钥对信息解密。比特币交易的加密即属于此场景。


  • 数字签名场景则是由发送者A采用自己的私钥加密信息后发送给B,B使用A的公钥对信息解密、从而可确保信息是由A发送的。


  • 登录认证场景则是由客户端使用私钥加密登录信息后发送给服务器,后者接收后采用该客户端的公钥解密并认证登录信息。


注意,上述3种场景加密的不同之处:


信息加密是公钥加密、私钥解密,确保信息的安全性;数字签名是私钥加密、公钥解密,确保数字签名的归属性;登录认证是私钥加密、公钥解密。


以比特币系统为例,其非对称加密机制如下图所示。


       640?wx_fmt=png比特币非对称加密机制


比特币系统一般通过调用操作系统底层的随机数生成器来生成256位随机数作为私钥。比特币私钥的总量大,很难通过遍历全部私钥空间来获得存有比特币的私钥,因而在密码学上是安全的。


为便于识别,256位二进制形式的比特币私钥将通过SHA-256哈希算法Base-58转换,形成50字符长度易识别和书写私钥提供给用户。


比特币的公钥是由私钥首先经过Secp256k1椭圆曲线算法生成65字节长度的随机数,该公钥可用于产生比特币交易时使用的地址。


其生成过程是:首先将公钥进行SHA-256和RIPEMD160双哈希运算,生成20字节长度的摘要结果(即Hash160的结果),再经过SHA-256哈希算法和Base-58转换形成33字符长度的比特币地址。


公钥生成过程是不可逆的,即不能通过公钥反推出私钥。


比特币的公钥和私钥通常保存在比特币钱包文件中,其中私钥最为重要,丢失私钥就意味着丢失了对应地址的全部比特币资产。


现有的比特币和区块链系统中,根据实际应用需求已经衍生出多私钥加密技术,以满足多重签名等更为灵活和复杂的场景


下面介绍一下区块链项目fabric的加密算法。fabric的加密算法由BCCSP(Blockchain crypto provider,区块链加密服务提供商)提供,用于定义选择使用的密码学实现库。负责摘要生成、非对称密钥的签名与验证、根据证书查找私钥等


该模块提供了一系列的接口,这些接口定义了摘要的生成方法、签名、验证、加密、解密等。所有自定义的密码学实现库都需要实现这些接口,以达到密码学算法的可插拔。目前fabric BCCSP模块的接口有3种实现类,如下图。

     640?wx_fmt=pngfabric BCCSP模块接口的3种实现类


  • SW(software based)实现方式是直接调用golang提供的库文件来进行加密解密、哈希算法、签名验签等。


  • PKCS11是调用ECDSA来进行加密、解密、哈希算法、签名验签等,而ecdsa是通过调用动态运行库来完成以上功能。


  • GM国密算法实现方式与PKCS11一致。中间层提供SM2进行签名与验签,用SM3进行哈希算法,用SM4实现加密。


ECDSA:全名是Elliptic Curve DSA,即椭圆曲线DSA。它是数字签名算法应用了椭圆曲线加密算法的变种。椭圆曲线算法的原理很复杂,但是具有很好的公开密钥算法特性,通过公钥无法逆向获得私钥。


PKCS:是由RSA实验室与本行业、学术界和政府的代表一起合作开发出的一套称为公共密钥加密标准(Public-Key Cryptography Standards)的规范。


附:黎曼猜想相关文章



编者按:公私钥密码算法是区块链系统的基石。在比特币大类的代码中,基本上使用的都是ECDSA。ECDSA是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC(椭圆曲线函数)。


从技术上看,先从生成私钥开始,再从私钥生成公钥,最后从公钥生成地址。以上每一步都是不可逆的过程,也就是说无法从地址推导出公钥,也无法从公钥推导出私钥。


密码学相关的安全技术在区块链乃至整个信息技术领域的重要地位无须多言。如果没有现代密码学和信息安全的研究成果,人类社会根本无法进入信息时代。区块链技术大量依赖了密码学和安全技术的研究成果。


--【完】--

     640?wx_fmt=png

本书籍由机械工业出版社华章公司赞助


赠书啦!!!

留言告诉本营小姐姐你想获得这本书的理由,获点赞前3名就可获得本书。


开奖截止时间9月30日(本周日)中午12点!

每周五晚上8点,小姐姐准时送书哟!

猜你喜欢

转载自blog.csdn.net/Blockchain_lemon/article/details/82892159