美文网首页代码人生大数据&云计算
常用加解密那些事之非对称加密

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

作者: 木夜溯 | 来源:发表于2016-04-22 14:25 被阅读429次

    非对称加密体制的思想:

    公开密钥加密(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算法。


    RSA加解密过程图解

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


    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<h<p-1),然后对p取余,
    6. 如果结果为1,再试一个h。一般情况下h=2会被采用。
    以上就生成了(p,q,g),系统的多用户可以共享。
    

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

    1. 选取x,0<x<q。
    2. 计算 y = g^x mod p。
    3. 公钥是(p,q,g,y),私钥是x。
    

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

    1. 产生信息随机数k,0<k<q
    2. 计算 r=g^k mod p mod q
    3. 如果r=0,返回第1步重来
    4. 计算 s=k^(-1)(H(m)+xr) mod q
    5. 如果s=0,返回第1步重来
    6. 签名是(r,s)
    

    验证:

     1. 如果0<r<q或者0<s<q不成立,失败
    2. w = s^(-1) mod q
    3. u1 = H(m)*(w mod q)
    4. u2 = r * (w mod q)
    5. v = ((g^u1*y^u2) mod p) mod q
    6. v == r
    

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

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

    相关文章

      网友评论

        本文标题:常用加解密那些事之非对称加密

        本文链接:https://www.haomeiwen.com/subject/ecitrttx.html