RSA加密设计的一些巧思

RSA加密设计是理论应用生活的典范,其中的巧思不比发现和证明一个数学定理少。

先看其结果,从本体、关系、过程、性状角度来分析。

核心对象有7个,明文 M、密文 C、公钥 e、私钥 d、大整数 N、素因子 p 和素因子 q。

数量关系,以2048位为例,大致如下:

公钥 e (17位) < 素因子p、素因子q(各1024位) < 私钥 d、明文 M、密文 C(大约2048位) < 大整数 N(2048位)

数量关系,严格如下:

  • 大整数 N 是两个素因子的积:\(N = p \cdot q\)
  • 公钥 e 和私钥 d 模 φ(N) 互逆:\(e \cdot d \equiv 1 \mod{\phi(N)}\)
  • 明文和密文都只是幂函数模 N 的余数:\(M^e \equiv C \mod{N} \)、\(C^d \equiv M \mod{N} \)
  • 明文和密文是被构建在一个阶为 φ(N) 的循环群中的两个数:\(M^{e \cdot d} \equiv M^{1 + k \phi{(N)}} \equiv M \mod{N}\)

过程有三个,加密、解密和密钥对生成,详细来说:

  • 从严格数量关系看,加密和解密都是个幂函数模 N 求余数的过程
  • 加密是以明文 M 为底,公钥为指数,求幂模 N 取余的结果就是密文 C
  • 解密是以密文 C 为底,私钥为指数,求幂模 N 取余的结果就是明文 M
  • 密钥对生成是两大步,第一步是生成 N,第二步是生成 e 和 d
  • 生成 N 要先生成两个素因子 p 和 q
  • 生成 e 和 d,可以随机生成 e,再求逆算 d

性状重点看安全性和性能,先看安全性:

  • 密文 C、公钥 e、大整数 N公开
  • 明文 M、私钥 d、素因子p和q私密
  • 加解密钥匙的非对称性,只公开公钥,避免了私钥传输造成泄漏
  • 大整数 N 的素因子分解没有高效的算法,非量子计算不可行,量子计算现实的比特规模远远不够

再看性能:

  • 加密过程因为公钥 e 比较小,求幂模 N,计算较快,每次不到 1 毫秒
  • 解密过程利用中国剩余定理把模 N 的运算,转换为模 p 和模 q 的两个运算,再利用扩展的欧几里得算法求同余方程,恢复模 N 的结果,每次计算也在 10 毫秒内
  • 生成大整数 N 和密钥对的过程,涉及到欧几里得算法、大整数的素性测试,耗时最多,一般在几十毫秒到一百多毫秒

从需求的满足上看:

生成一般都是离线过程,需求次数少,生成密钥对和 N 都在重用。加密和解密是个在线过程,发生频繁,明文密文也通常很长,都是切割后进行。

以上的结果分析,基本能覆盖四因说中的三个,形式因、质料因和目的因,可一个事物诞生还需要动力因。

推动 RSA 诞生的动力,可以从宏观和微观、外部和内部两个视角来看。

宏观上,以密码学领域内为内部。20 世纪 70 年代,外部网络、计算技术快速规模化发展,信息加密后被逆向攻破、密钥泄漏、内容篡改等问题形成了领域内的挑战。Diffie 和 Hellman 提出了公钥密码体系的构想来解决密钥分发和数字签名的问题,RSA的三位设计者实现了这个构想中的关键,单向陷门函数,掌握了秘密信息(陷门)的情况下,单向计算容易,但缺乏秘密信息,逆向计算困难。

微观上,这是计算效率、传输效率、传输便捷性与隐私保护、信息安全的矛盾与博弈。Diffie 和 Hellman 的构想源自于一种理念,即便你知道了完整的设计,缺乏少量关键信息的情况下,你也无法获取原始的信息。Diffie 还强烈反对依赖政府和大型机构这样的中心化权威来分发密钥,他认为加密的目的应该是减少需要被信任的第三方。RSA 提出的直接动机是为了给电子邮件提供隐私和签名。