加密算法

Posted by BY on March 11, 2018

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

根据加解密过程中所使用的密钥是否相同,算法可以分为对称加密(symmetric cryptography,又称公共密钥加密,common-key cryptography)和非对称加密(asymmetric cryptography,又称公钥加密,public-key cryptography)。两种模式适用于不同的需求,恰好形成互补。某些时候可以组合使用,形成混合加密机制。

算法类型 特点 优势 缺陷 代表算法
对称加密 加密和解密的密钥相同 计算效率高 需提前共享密钥(易泄露) DES、3DES、AES
非对称加密 加密和解密的密钥不同 不需提前共享密钥 效率低,可能存在中间人攻击 RSA、ELGamal、ECC系列

对称加密算法

对称加密算法,顾名思义,加密和解密过程的密钥是相同的。该类算法优点是加解密效率(速度快,空间占用小)和加密强度都很高。缺点是参与方都需要提前持有密钥,一旦有人泄露则安全性被破坏;另外如何在不安全通道中提前分发密钥也是个问题,需要借助Diffie–Hellman协议或非对称加密方式来实现。

对称密码从实现原理上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为基本加密单位,应用最为广泛。后者则每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。

分组对称加密代表算法包括DES、3DES、AES

  • DES(Data Encryption Standard):经典的分组加密算法,将64位明文加密为64位的密文,其密钥长度为64位(包含8位校验位)。现在已经很容易被暴力破解。

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

  • AES(Advanced Encryption Standard):AES也是分组算法,分组长度为128、192、256位三种。AES的优势在于处理速度快,整个过程可以用数学描述,目前尚未有有效的破解手段.

序列密码,又称流密码。要实现绝对安全的完善保密性(perfect secrecy),可以通过“一次性密码本”的对称加密处理。即通信双方每次使用跟明文等长的随机密钥串对明文进行加密处理。序列密码采用了类似的思想,每次通过伪随机数生成器来生成伪随机密钥串。代表算法包括RC4等

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

分组加密每次只能处理固定长度的明文,因此对于过长的内容需要采用一定模式进行分割处理,《实用密码学》一书中推荐使用密文分组链(Cipher Block Chain,CBC)、计数器(Counter,CTR)等模式。

非对称加密算法

非对称加密可以很好地解决对称加密中提前分发密钥的问题。

顾名思义,非对称加密算法中,加密密钥和解密密钥是不同的,分别称为公钥(public key)和私钥(private key)。私钥一般需要通过随机数算法生成,公钥可以根据私钥生成。公钥一般是公开的,他人可获取的;私钥一般是个人持有,他人不能获取。

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

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

代表算法包括:RSAElGamal、椭圆曲线(Elliptic Curve Crytosystems,ECC)、SM等系列算法。

  • RSA:经典的公钥算法,算法利用了对大数进行质因子分解困难的特性,但目前还没有数学证明两者难度等价,或许存在未知算法在不进行大数分解的前提下解密;

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

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

  • 椭圆曲线算法(Elliptic Curve CryptographyECC):基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。ECC系列算法一般被认为具备较高的安全性,但加解密计算过程往往比较费时;

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

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

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

选择明文攻击

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

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

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

混合加密机制

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

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

典型的应用案例是现在大家常用的HTTPS协议。HTTPS在传统的HTTP层和TCP层之间通过引入Transport Layer Security/Secure Socket Layer(TLS/SSL)加密层来实现可靠的传输。

离散对数与Diffie–Hellman密钥交换协议

Diffie–Hellman(DH)密钥交换协议是一个经典的协议。使用该协议可以在不安全信道完成对称密钥的协商,以便后续通信采用对称加密。

DH协议的设计基于离散对数问题(Discrete Logarithm Problem,DLP)。离散对数问题是指对于一个很大的素数p,已知g为p的模循环群的原根,给定任意x,求解X=g^x mod p是可以很快获取的。但在已知p、g和X的前提下,逆向求解x目前没有多项式时间实现的算法。该问题同时也是ECC类加密算法的基础。

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

  1. Alice和Bob两个人协商密钥,先公开商定p,g;
  2. Alice自行选取私密的整数x,计算X=g^x mod p,发送X给Bob;
  3. Bob自行选取私密的整数y,计算Y=g^y mod p,发送Y给A;
  4. Alice根据x和Y,求解共同密钥Z_A=Y^x mod p;
  5. 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。