非对称加密系统 | 量子系列番外二
唠唠闲话
当今互联网传输中,处处可见公钥密码系统的身影,比如 https 协议中, s
代表便是基于公钥系统的 SSL/TLS 协议。
对称加密
对称加密是密码学的一类加密演算法,这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。
-
比如轮盘加密
-
对称加密的高级应用:二战时期德国的恩尼格玛密码机(Enigma machine)。受当时算力限制,经其加密的文件很难破译。而盟军能够破译恩尼格玛是因为德国军队犯了一些大的错误,比如没有每月更新密码、机器,使用步骤和密码本被缴获等等。当然,在1944年后英国开发出原始电脑后,即使每月更新也无济于事。
-
对称加密有两个缺点:
- 当密钥被重复使用时,可以用频率分析破解密钥
- 假设 Alice 要传信息给 Bob,Alice 需事先和 Bob 交换密钥。在互联网中,相隔万里的两人需要先碰面才能传输信息,显然很不方便
-
尽管存在诸多限制,但对称加密有个很大的优点:通过一次一密(one-time pad OTP) 能做到“不可破解”。顾名思义,一次一密指密码本用一次就丢弃,比如前边例子中,任意包含5个字母的单词被加密成
brqlg
的概率相同,因而不可能破译原信息。 -
假设 Alice 对传输安全性要求很高,她可以先与 Bob 碰面交换长为 N 的随机密钥本,只要密钥本没有泄露,Alice 一共可以给 Bob 发送长为 N 的与密码本等长的数据,在不知道密码本的情况下,窃听者不可能破解这段数据。
对称加密常与非对称加密结合使用,后者解决了密钥交换的问题。
非对称加密
非对称加密基于困难的数论问题,更具体地,可以用单向函数(One-way function)来描述这种加密。
本节用单向函数抽象地讨论加解密过程,这种讨论方式不涉及具体性质,也更容易理解过程以及加密思想,具体加密系统放在下一节介绍。
方便起见,我们将多项式时间内的计算称为容易计算。
单向函数
-
等概念
- P 问题:能在在多项式时间内解决的判断问题
- NP 问题:能在多项式时间内验证的判断问题
- NP-Hard:所有 NP 问题可以用多项式时间转化为该问题(未必 NP)
- NP-Complete:NP-Hard 问题与 NP 问题的交集
-
单向函数是具有以下性质的单射 :对任意输入值 ,容易计算函数值 ;但对随机的函数值 ,很难计算其原像。
-
比如哈希函数,在没有哈希冲突的情况下,可以认为是单向函数。
-
容易发现,单向函数的存在隐含了 。因为 还是开问题,单向函数的存在性也是开问题。尽管如此,密码学家倾向于认为 ,许多加密算法均基于某类单向函数。
数据加密
-
用非对称加密系统加密数据,安全性基于以下性质:
- 容易生成单向函数 及其逆函数(未必是单向函数) ,使得
- 将 称为公钥, 称为私钥
-
假设 Alice 要传输信息 给 Bob,加密过程如下
- Bob 生成公钥 和私钥
- Bob 将公钥在公开信道(可能不安全)上传递给 Alice
- Alice 计算
- Alice 在公开信道(可能不安全)上传递 给 Bob
- Bob 通过 解密原始信息
- 整个过程中, 为安全信息, 为不安全信息
-
假设 Eve 为窃听者(eavesdropper)
- Eve 在公开信道上窃取到来自 Bob 的公钥 以及来自 Alice 的信息
- 由于 为单射,理论上 Eve 总能从 反解出原像
- 但由于 为单向函数,反推过程会很困难,可能需要指数时间甚至更高复杂度的时间才能求解原像
-
非对称加密的缺点是不能识别中间人攻击:
- 假设 Bob 生成了密钥对 ,而 Eve 也生成了一对密钥
- Eve 在窃听时,偷偷将 Bob 的公钥换成了
- 现 Alice 在公开信道上获取了 并传输 给 Bob
- Eve 拦截到 并通过 获取原文信息
- 获取原文后,Eve 再将 传输给 Bob
- Bob 用 正常解码信息,但不知晓中间已被窃听
密钥交换
非对称加密有一个缺点:加密和解密过程的计算复杂度通常较大,尽管时间仍在可执行范围。所以非对称加密一般与对称加密配合使用,用于密钥交换。
-
在密钥交换方面,除了上一小节的传输方式,还可以直接生成(伪)随机密码本,安全性基于以下性质:
- 容易构造函数集合 ,其中函数两两交换
- 通过 ,计算 很容易
- 通过 反解出 很困难
- 上一步困难性是为了确保由 求解 很难
-
此处隐含的单向函数为
这个映射不一定要是单射,但必须确保求原像很困难
-
假设 Alice 要和 Bob 共享一段密码本:
- Alice 和 Bob 在公开信道上约定函数集 以及随机数字
- Alice 随机选取 ,并在公开信道上将 发送给 Bob
- Bob 随机选取 ,并在公开信道上将 传递给 Alice
- Alice 手上有私钥 和信息 ,计算得到密码本
- Bob 手上有私钥 和信息 ,计算得到密码本
- 由于 的交换性,Alice 和 Bob 得到了同一个密码本
- 整个过程中, 为不安全信息, 为安全信息
-
假设 Eve 窃听了这个过程:
- Eve 在公开信道上窃听得到 和
- 根据假设性质,Eve 很难由这些信息解出密钥本
两类加密系统的核心都是单向函数,但只有单向性通常是不够的。比如第一类在生成加密映射 时,还要求能一并生成解密映射 ;第二类则要求了函数 的交换性。
一般地,在数论和代数领域更容易碰到这类问题,下边列举几个经典的例子。
常见公钥系统
本节介绍几个常用公钥系统。加密数据方面,介绍基于线性码纠错的 McEliece 加密系统以及基于大整数分解的 RSA 加密系统;密钥交换方面,介绍基于离散对数算法的 Diffie–Hellman 密钥交换以及基于群论的椭圆曲线密钥交换。
McEliece 加密
在密码学中,McEliece 密码系统是由 Robert McEliece 于 1978 年开发的一种非对称加密算法。这是第一个在加密过程中使用随机化的方案,该算法从未在密码学界获得太多认可,但它是“后量子密码学”的候选者,因为它不受使用 Shor 算法的攻击,或者更一般地,不受量子傅里叶采样的影响。
-
McEliece 密码系统的安全性基于解码一般线性码的困难性(已知为 NP-Hard)
-
假设 Alice 要传输信息 给 Bob
- Bob 生成一个 线性分组码,以 为生成元矩阵,最大纠错数目 ,且具有高效的纠错解码算法
- Bob 随机生成 阶可逆矩阵 与 阶置换矩阵 ,使得以 为生成元矩阵的线性码没有高效解码算法
- Bob 将公钥 在公开信道上发送给 Alice
- Alice 将 加密为 ,其中 为随机生成的权重为 的扰动(非0元素个数为 )
- Alice 将 在公开信道上发送给 Bob
- Bob 收到 后,如下进行解码
- 由于 为置换矩阵, 仍然为权重 的向量,根据编码的纠错能力,Bob 能使用高效算法从 中纠错得到数据 ,进而得到原始信息
- 整个过程中, 为安全信息, 为不安全信息
-
现假设 Eve 窃听了这一过程:
- Eve 窃听得到了
- 由于以 为生成元矩阵的线性码没有高效算法,Eve 很难从带有错误的 中还原
-
由线性代数知识易知,编码 与编码 具有相同的编码距离,理论上总能从 中纠错得到原数据 ,只是这个过程的计算开销可能极大,约等于不可能。
RSA 加密
RSA(Rivest-Shamir-Adleman) 是一种广泛用于安全数据传输的公钥密码系统。它也是最古老的之一。首字母缩写词 “RSA” 来自 Ron Rivest、Adi Shamir 和 Leonard Adleman 的姓氏,他们在 1977 年公开描述了该算法。实际上,早在 1973 年,英国数学家 Clifford Cocks 便在 GCHQ(英国信号情报机构)秘密开发了一个等效系统,该系统直到 1997 年解密。
概述
-
RSA 的安全性依赖于分解两个大素数乘积的困难性,即“分解问题”。破解 RSA 加密被称为 RSA 问题。实际上,破解 RSA 是否一定必须经过整数分解也仍然是个悬而未决的问题。当密钥足够大时,目前还没有公开的方法能破解编码。
-
RSA 是一种相对较慢的算法,正因为如此,它不常用来直接加密用户数据。更多时候,RSA 用于传输对称密钥加密的共享密钥,然后用于批量加密-解密。
-
P 与 NP 相关
- 大整数分解属于 NP 问题,假设大整数 ,给出 很快就能验证 ;相反,已知 求 会很困难
- 大整数分解问题没有被证明是 NPC 问题,所以仍有可能是 P 问题
- 虽然不清楚整数分解是否是 P 问题,但素性检验已被证明是 P 问题(2002),即 AKS 素性检验,算法复杂度为 。也就是说,给定一个大整数 ,我们能高效地判断它是否有真因子,但却不能高效的求出来
- 一般讨论的算法复杂度都是基于经典计算,如果考虑量子计算,由于 shor 算法的出现,大整数分解已被证明是 BQP(Bounded-error Quantum Polynomial time) 问题。即:用量子计算机可在多项式时间内解决,所有实例的错误概率最多为 1/3
- 为了抵抗量子计算,密码学也在发展后量子密码系统。但在当前,RSA 仍是广泛使用且安全的一种加密
有空打算把大整数分解的常用算法也整理一下(比如和 shor 算法一块介绍)
加密过程
-
假设 Alice 需要传输信息给 Bob
-
Bob 执行以下操作
- 随机生成两个不同的大素数 ,并计算乘积
- 计算 的卡迈克尔函数(Carmichael function)
Bob 也可以直接计算欧拉函数 ,但由于 ,后续解码开销可能会更大
- 选取整数 使得
e 通常取素数
- Bob 通过 计算私钥
具体地,由 的互素性,Bob 通过辗转相除法,容易得到 使得
此时取
-
Bob 将大整数 以及整数 作为公钥,在公开信道上发送给 Alice
-
现假设 Alice 需要传输信息 给 Bob,其中 ,Alice 将信息 加密为 ,并将 传递给 Bob
-
Bob 收到加密信息 后,使用私钥 进行解密
式子还原为 是基于欧拉定理(如果这里取了 ),或者基于群论的拉格朗日定理: 的乘法群为 阶群
-
整个过程中, 为不安全信息; 为安全信息。
-
假设 Eve 窃听了这一过程:
- Eve 窃听得到
- Eve 需要求解下边方程才能得到信息
然而函数 具有单向性,当 非常大时,Eve 几乎不可能通过 反解
离散对数算法
【待补充】
Discrete logarithm
迪菲-赫尔曼密钥交换
Diffie–Hellman key exchange
椭圆曲线算法
【待补充】