常用加解密那些事之非对称加密

非对称加密体制的思想:

公开密钥加密(public-key cryptography),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。维基:公开密钥加密

利用非对称加密方案进行通信的过程是:发送方A先查找接收方B的公钥,因为公开公钥并不影响通信的保密性,B可以将自己的公钥公布在公共数据中。然后,A采用公钥加密算法用B的公钥对原始信息进行加密,并通过非安全信道将密文发送给B,当B接收到密文后。通过自己持有的私钥对密文进行解密而还原出明文。在这种情况下有:

E(K1。M)=C
D(1(2,C)=M
D[K2,E(KI,M)]=M
其中,K1为加密密钥,K2为解密密钥,C为密文,M为明文。E为加密算法,D为解密算法。

常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

RSA算法

RSA算法是当前最著名、应用最广泛的公钥系统,1978年由美国麻省理工学院的Ron Rivest、 Adi Shamir 和Leonard Adleman在论文《获得数字签名和公开钥密码系统的方法》中提出的。这是一个基于数论的非对称(公开钥)密码体制,采用分组加密方式。其名称来自于三个发明者的姓名首字母。它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的著名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。RSA系统是公钥系统的最具有典型意义的方法,大多数使用公钥密码进行加密和数字签名的产品和标准使用的都是RSA算法。


常用加解密那些事之非对称加密_第1张图片
RSA加解密过程图解

1、RSA算法的工作原理如下:


常用加解密那些事之非对称加密_第2张图片
RSA的公钥、私钥的组成,以及加密、解密的公式
1. 任意选取两个不同的大质数p和q,计算乘积r=p*q。
2. 任意选取一个大整数e,e与(p-1)*(q-1)互质,整数e用做加密密钥。注意:e的选取是很容易的,所有大于p和q的质数都可用。
3. 确定解密密钥d: d * e = 1 mod(p - 1)*(q - 1)根据e、p和q可以容易地计算出d。
4. 公开整数r和e,但是不公开d。
5. 将明文P(P是一个小于r的整数)加密为密文C,计算方法为C = P^e  mod r 。
6. 将密文C解密为明文P,计算方法为: P = C^d modulo r 。

然而只根据r和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。

RSA优缺点介绍:
RSA算法解决了大量网络用户密钥管理的难题,这是公钥密码系统相对于对称密码系统最突出的优点。但是它同时也存在一定的缺点:
1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
2)安全性。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。目前,人们已能分解140多个十进制位的大素数,这就要求使用更长的密钥,速度更慢;另外,目前人们正在积极寻找攻击RSA的方法,如选择密文攻击,一般攻击者是将某信息伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构: ( XM )d = Xd *Md mod n。前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征:每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash Function对文档作HASH处理,或同时使用不同的签名算法。除了利用公共模数,人们还尝试一些利用解密指数或φ(n)等攻击。
3)速度慢。由于RSA 的分组长度太大,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议要求CA采用2048比特的密钥,其他实体使用1024比特的密钥。为了速度问题,目前人们广泛采取单、公钥密码结合使用的方法,优缺点互补:单钥密码加密速度快,人们用它来加密较长的文件,然后用RSA给文件密钥加密,极好地解决了单钥密码的密钥分发问题。

RSA相关的数学问题及详细算法参见RSA加密算法详解和RSA加密算法原理详解

DSA算法

DSA算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换。

DSA与RSA的生成方式不同,RSA是使用openssl提供的指令一次性的生成密钥(包括公钥),而通常情况下,DSA是先生成DSA的密钥参数,然后根据密钥参数生成DSA密钥(包括公钥),密钥参数决定了DSA密钥的长度,而且一个密钥参数可以生成多对DSA密钥对。

DSA生成的密钥参数是p、q和g,如果要使用一个DSA密钥,需要首先共享其密钥参数。

DSA的秘钥生成

第一步生成参数:

1. 选取Hash Function。
2. 确定秘钥长度(L,N)。FIPS 186-3的标准是 (1024,160), (2048,224), (2048,256), and (3072,256)。
3. 选取N位的素数q。
4. 选取L位的素数p,满足(p-1) mod q=0
5. 选取g,使得g^q≡1 mod p,一般选取g=h^((p-1)/q),接着试着取不同的h(1

第二步生成每个用户的秘钥:

1. 选取x,0

签名:以H是哈希函数,m为信息为例。

1. 产生信息随机数k,0

验证:

 1. 如果0

DSA详细问题参见:openssl 非对称加密算法DSA命令详解

参考:非对称加密原理解析

你可能感兴趣的:(常用加解密那些事之非对称加密)