一些理论

这一节主要说明非对称加密的一些算法和 OpenPGP 为提高速度所使用的一些方法。

非对称加密

非对称加密与传统的对称加密有很大的不同,对称加密算法加密密钥就是解密密钥,所以密钥的传递就会有很大的困难, 对称加密算法较常用的是 AES 算法。 而非对称加密算法会有两个密钥,一个是公钥,一个是私钥,这两个密钥在数学上是等价的,只是人为的根据是否公开而 分为公钥和私钥,信息由其中的一个密钥加密后,能且只能由另一个密钥解密,非对称加密算法中较常用的就是 RSA 算法。

提高非对称加密的速度

非对称加密和对称加密相比,最大的不足就是速度,据说,使用 RSA 加密一个1 GiB 的文件需要大约1小时。 在对称加密中,密钥的传递是最主要的问题,所以 OpenPGP 使用对称加密算法加密信息,然后再用非对称加密算法加密对称加密的密钥; 解密时,先使用私钥解密对称加密的密钥,然后再使用解密出的密钥解密使用对称加密算法加密的信息。这样就可以大大提高加密解密的速度。

数字签名

散列函数

散列函数可以从一段信息中生成一段固定长度的信息,如果源信息发生改变,那么生成的散列信息通常情况下会很大的发生改变。 虽然两组不同的信息是可能生成相同的散列值,但对于一个良好的散列函数来说,这种可能性可以忽略不计, 所以可以认为从一段信息中生成的散列值是独一无二的。

签名过程

  1. 对明文信息通过散列函数生成散列值。

  2. 通过私钥对散列值进行加密,加密后的信息就是生成的签名。

签名验证过程

  1. 对明文信息通过散列函数生成散列值。

  2. 通过公钥解密加密后的散列值。

  3. 对比两组散列值,如果一致,则签名有效,信息未被篡改,否则说明信息已被篡改。