接着前面的内容,继续介绍密码学之非对称加密算法
非对称加密也叫公钥密码。
1976年Diffie和Hellman首次提出了一种全新的加密思想,公钥密码体制思想。在当时几乎所有的密码体制都是对称密码体制,原理都是基于替换和置换这些较简单方法。公钥密码体制完全与之不同,它是非对称的,有两个不同的密钥,分别是公钥和私钥,加密的原理也不是之前的简单置换或替换,而是一些复杂的数学函数。这些数学函数都是基于数学难题。其所依据的难题一般分为三类:大整数分解问题类、离散对数问题类、椭圆曲线类。有时也把椭圆曲线类归为离散对数类。公钥密码体制是一次革命性的变革,突破了原有的密码体制模式,它解决了传统密码体制的两个大难题:密钥分配和数字签名。
1 非对称加密的概述
传统密码体制用的都是一个密钥,发送方传输密钥给接收方成本很高,而且风险很大。接收方收到的密文如果在传输过程中被修改,接收方无法判断密文的真伪性。公钥体制完美地解决了上述问题。它有一对密钥,一个是公钥,完全公开,任何人都可以收到该密钥;另一个是私钥,自己保存,不需要告诉任何人。通过公开的公钥是无法计算出私钥的,所以私钥是安全的。发送方A用公钥对明文进行加密,接收方B用对应的私钥进行解密。为保证传输密文的完整性和消息来源的准确性,需要对密文进行数字签名。A对密文用自己的私钥进行再次加密,此过程叫数字签名;B接收到密文用该私钥对应的公钥进行解密,此过程叫验签。
所以公钥密码体制可以分为两个模型:加密解密模型和签名验签模型。两个模型可以独立使用,也可以一起混用。具体按照自己的应用场景使用,一般情况下发送的密文都是需要进行数字签名的,发送的内容包括密文和签名两部分。接受者先进行验签,验签通过后,再进行解密。
非对称加密的方式有很多,以下讲解RSA,DSA,ECDSA这三种加密方式。
2 公钥密码体制的要求
公钥密码体制要想实现必须满足以下要求:
-
1.产生一对密钥对,即公私钥对,在计算上是容易的;
-
2.通过公钥对明文进行加密,在计算上是容易的;
-
3.通过私钥对密文进行解密,在计算上是容易的;
-
4.已知公钥,无法计算出私钥;
-
5.已知公钥和密文,无法计算出明文;
-
6.加密和解密的顺序可以交换。
目前满足以上要求,建立公钥密码体制基于的困难问题有较多,我只分析以下两种常用的:
1.大整数分解问题
若已知两个大素数p和q,求n=pq是很容易的,但是已知n,求p和q是几乎不可能的,这就是大整数分解问题。
2.离散对数问题
先了解两个概念,阶和原根。
设m > 1 且 (a, m) = 1, 则使得a^t ≡ 1 mod m成立的最小的正整数t称为a对模m的阶, 记为δm(a)。
原根,是一个数学符号。设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。里面提到的φ(m)是m质因数的个数。
给定一个公式a^t mod b ≡ c,其中a是b的原根,b是一个超大的素数,c是小于b大于0的正整数。问题是已知a,t,b求c很容易,但是已知a,b,c求t非常困难。这就是离散对数问题。
举个例子(b取个小值):根据给定的t求 3^t mod 17很容易。t=1时,得3;t=2时,得9;t=3时,得10,等等最终的结果都是在小于17大于0的正整数。但是现在3^t mod 17≡12,求t。求解过程非常困难,而且满足条件的t不计其数。这里用的是17,如果换成很大的数,那几乎没有可能求解出来真正的t。
RSA
RSA是目前使用最广泛的公钥密码体制之一。它是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA算法的安全性基于RSA问题的困难性,也就是基于大整数因子分解的困难性上。但是RSA问题不会比因子分解问题更加困难,也就是说,在没有解决因子分解问题的情况下可能解决RSA问题,因此RSA算法并不是完全基于大整数因子分解的困难性上的。
DSA
DSA(Digital Signature Algorithm)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。
DSA加密算法主要依赖于整数有限域离散对数难题,素数P必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig &Hellman算法的攻击。M一般都应采用信息的HASH值。DSA加密算法的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。其安全性与RSA相比差不多。
DSA 一般用于数字签名和认证。在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验证签名的真实性。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多.
ECC
椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。
ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全。
椭圆曲线密码学的许多形式有稍微的不同,所有的都依赖于被广泛承认的解决椭圆曲线离散对数问题的困难性上.
不管是RSA还是ECC或者其它,公钥加密算法都是依赖于某个正向计算很简单(多项式时间复杂度),而逆向计算很难(指数级时间复杂度)的数学问题。
椭圆曲线依赖的数学难题是:
k为正整数,G是椭圆曲线上的点(称为基点), k*G=Q , 已知G和Q,很难计算出k
关于密码学的更多内容,这里给出了一个思维导图,如果觉得不够清晰可以关注文末公众号【code_cayden】,并回复内容【密码学】即可获取源文件
下面的是我的公众号二维码图片,欢迎扫码关注!
image
网友评论