zoukankan      html  css  js  c++  java
  • 对称加密和非对称加密

    上一篇文章中我们写了https的安全性,里面涉及到对称加密和非对称加密等。

    这一章节我们就来简单了解一下:

    1、对称加密算法:

    加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。如AES算法;

    2、非对称加密算法:

    加密和解密用的密钥是不同的,这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便。常见的非对称加密算法为RSA、ECC和EIGamal。

    非对称加密算法的加密模式:

    (1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。

    (2)甲方获取乙方的公钥,然后用它对信息加密。

    (3)乙方得到加密后的信息,用私钥解密。

    3、AES加密算法:

    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。

    对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:

     注释:

    • 明文P:没有经过加密的数据。
    • 秘钥K:用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。
    • AES加密函数:设加密函数为E,密文为C,则C=E(K, P);
    • 密文C:加密后的数据;
    • AES解密函数:设解密函数为D,则P=D(K, C);

    4、RSA算法

    强烈推荐看阮老师的博客讲解:RSA算法原理(二)

    文章深入浅出,通俗易懂。并且举了一个小李子。

    我在这里摘录部分如下:

    假设Bob要与Alice进行加密通信,在这里Bob可以看做是客户端,Alice可以看做是服务器。那么我们知道服务器自己要生成私钥和公钥,那么它是如何生成的呢?

     秘钥生成步骤:(虽然看不懂,但还是要学习嘛)

    第一步,Alice(服务器)随机选择两个不相等的质数p和q。

    第二步,计算p和q的乘积n。

    第三步,计算n的欧拉函数φ(n)。

    第四步,随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。

    第五步,计算e对于φ(n)的模反元素d。

    第六步,将n和e封装成公钥,n和d封装成私钥。

    在这个Bob与Alice的通信例子中,我们假设n=3233,e=17,d=2753,

    那么公钥就是 (3233,17),私钥就是(3233, 2753);

    实际应用中,公钥和私钥的数据都采用ASN.1格式表达。

    4.1、RSA的可靠性

    回顾上面的密钥生成步骤,一共出现六个数字:

       p,q,n,φ(n),e,d 

    这六个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的。

    其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏

    推论步骤我在这里就不说了,我只放结论:如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。

    wiki百科这样说:

    "对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。
    
    假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA密钥才可能被暴力破解。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。
    
    只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。"

    4.2、加密和解密

    加密要用公钥 (n,e)

    假设鲍勃要向爱丽丝发送加密信息m,他就要用爱丽丝的公钥 (n,e) 对m进行加密;

    解密要用私钥(n,d)

    爱丽丝拿到鲍勃发来的密文以后,就用自己的私钥(n, d) 进行解密;

    我们可以看到,如果不知道d,就没有办法从c求出m。而前面已经说过,要知道d就必须分解n,这是极难做到的,所以RSA算法保证了通信安全。

     RSA三位大佬镇楼(Rivest、Shamir 和 Adleman)

    Over.......

  • 相关阅读:
    数据库的三大范式以及五大约束
    解析PHP面向对象的三大特征
    php中的数组遍历的几种方式
    PHP中的函数声明与使用
    使用mui框架打开页面的几种不同方式
    JS中精选this关键字的指向规律你记住了吗
    同一功能三种不同实现方式你选哪个
    转!!NPM报错 Error: EPERM: operation not permitted, unlink......解决办法和清除缓存。
    转!!关于http请求 浏览器 中文编码
    CentOS6.5下Apache防止目录遍历
  • 原文地址:https://www.cnblogs.com/gjmhome/p/14385054.html
Copyright © 2011-2022 走看看