密码~scheme 使用 encryptor
本文参考(更准确地说,照抄)了 课程教科书 中的内容,且绝大部分内容写于正式上课之前,因此完全不代表我校授课水平。
本文涵盖了 2025 春季密码学基础一课期末考试的全部大知识点,但不保证全面,可能会有小知识点的遗漏。存在一些在课本给出证明,但是在课上没有完全展开的内容,因此如果你看不懂任何证明,不用惊慌:对本文感兴趣的读者都看不懂的证明,上课是不讲的。存在一些不在课程范围内的小知识点。
本文并没有(?)涵盖任何考纲外但授课范围内的大知识点,如 FHE、ZKP、IP 和 LWE,不建议作为授课的代餐。
不建议把本文当作唯一参考资料,因为据本人所知,这门课每年的授课范围会有小范围的震荡。
I. Introduction
I.I. Classical Cryptography: Hidden Writing
AB 想要发送信息 plaintext。但是有监听者 adversary E。如何对敌?
答曰:如果 AB 能事先商量一个私钥 \(k\),A 用 \(k\) 加密 incrypt 一段文字,把密文 ciphertext 发送给 B,然后 B 再用 \(k\) 解密 decrypt 即可。
\((\t{Gen,Enc,Dec})\) 三元组描述了一个私钥加密系统 private-key encryption scheme。其中:
- \(\t{Gen}\) 是私钥的概率密度分布。
- \(\t{Enc}_k\) 对于明文给出对应的密文。
- \(\t{Dec}_k\) 对于密文给出对应的明文。
- 对于所有明文 \(m\),需要保证 \(\Pr[k\gets\t{Gen}:\t{Dec}_k(\t{Enc}_k(m))=m]=1\)
I.II. Modern Cryptography: Provable Security
安全双方计算 secure two-party computation 对于两个私有输入 \(a,b\) 在不公开二者的前提下,对于公开函数 \(f\) 计算 \(f(a,b)\)。同理有安全多方计算 secure multi-party computation。
例:一个与门可以被如下构建:
有一个
0。如果 \(a\) 是 \(1\),在其左侧放置10,否则放置01;如果 \(b\) 是 \(1\),右侧置01反之10。之后双方各自随机 rotate 整个串,然后 check 有无连续三个0。只要双方有一个人执行了纯随机的 rotate 操作,那么最终呈现的结果就是纯随机的。
I.III. Shannon's Treatment of Provable Secrecy
Shannon 安全性 Shannon Secrecy:对于一些先验的明文信息,监听者不能通过阅读密文来得知额外的明文信息。即,对于明文空间上的分布 \(D\),应保证对于一切明文 \(m'\) 和密文 \(c\),都满足
即,知道密文并不能帮助确定明文。
完美安全性 Perfect Secrecy:对于一切 \(m_1,m_2\),都满足
即,在不知道密钥时,一切明文加密后的概率分布都一致。
定理:Shannon 安全性与完美安全性等价。
为方便,定义 \(\Pr_k,\Pr_m,\Pr_{k,m}\) 表示显然的含义。
\(\impliedby\):
\[\Pr_{k,m}[m=m'\mid\t{Enc}_k(m)=c] \\=\dfrac{\Pr_{k,m}[m=m'\land\t{Enc}_k(m')=c]}{\Pr_{k,m}[\t{Enc}_k(m)=c]} \\=\dfrac{\Pr_k[\t{Enc}_k(m')]\Pr_m[m=m']}{\Pr_{k,m}[\t{Enc}_k(m)=c]} \]我们需要证明
\[\Pr_k[\t{Enc}_k(m')=c]=\Pr_{k,m}[\t{Enc}_k(m)=c] \]这是因为由定义,有
\[\Pr_{k,m}[\t{Enc}_k(m)=c] \\=\sum_{m''}\Pr_m[m=m'']\Pr_k[\t{Enc}_k(m'')=c] \]而因为完美安全性,其等于 \(\sum_{m''}\Pr_m[m=m'']\Pr_k[\t{Enc}_k(m')=c]\),而这正好等于 \(\Pr_k[\t{Enc}_k(m')=c]\)。
于是我们得到
\[\Pr_{k,m}[m=m'\mid\t{Enc}_k(m)=c]=\Pr_m[m=m'] \]即为 Shannon 安全性定义。
反过来证明也类似,取 \(m\) 的分布 \(D\) 为 \(\{m_1,m_2\}\) 上的均匀分布即可。
一次性密码本 One Time Pad 是一种 Shannon 安全的加密。其明文与密钥同是长度为 \(n\) 的零一串,加密解密方法同为用文本异或密钥。易知其满足需求。
这个加密方法似乎不是很牛,因为密钥和明文一样长。事实上,Shannon 定理 表明,Shannon 安全的加密必须保证密钥集合 \(\c K\) 大小不小于文本集合 \(\c M\) 大小。
对于 \(m_1\in\c M,k\in\c K\),令 \(c\gets\t{Enc}_k(m_1)\),令 \(\b{Dec}(c)=\{\t{Dec}_{k'}(c)\mid k'\in\c K\}\),即所有可能解读方案。如果 \(|\c K|<|\c M|\),则存在不能从 \(c\) 解读得到的 \(m_2\),此时它们的加密集合不一致。于是其不可能 Shannon 安全。
Shannon 定理表明,一切 \(|\c K|<|\c M|\) 的加密系统都存在攻击 attack。假如存在以上的 \(m_1,m_2\),则攻击者可以通过密文来以大于 \(1/2\) 的概率区分 \(m_1,m_2\),即对于密文 \(c\),判定 \(m_2\) 是否属于 \(\b{Dec}(c)\),是则随机返回,否则只返回 \(m_1\)。
虽然存在攻击,但是注意到判定 \(m_2\) 是否属于 \(\b{Dec}(c)\) 的过程,如果没有更好的算法,是需要 \(|\c K|\) 的时间复杂度的。但是注意到 \(|\c K|\) 常常是指数范围的,因此实际应用的效果是可行的。
II. Computational Hardness
II.I. Efficient Computation and Efficient Adversaries
算法 algorithm:输入输出都为 01 串的 Turing 机。
运行时间是多项式级别的算法就被认为是高效 efficient 的。易知:这个定义在一切 Turing 完备机上等效。
Time-Hierarchy 定理:存在 \(t(n)\) 能解决但 \(t(n)/\log t(n)\) 不能解决的问题。推论是,存在指数能解决但多项式不能解决的问题。
随机多项式算法 Probablistic Polynomial Time (PPT) 在 Turing 机上的描述是,普通 Turing 机多了一条所有位置均纯随机的纸带作为输入。等价描述是,可以调用一个抛硬币方法的 Turing 机。
一个 PPT 的运行时间被定义为:\(T(n)\) 满足对于一切 01 串 \(x\) 和随机纸带,PPT 在 \(T(|x|)\) 时间内终止。PPT 输出一个函数 \(f:\{0,1\}^*\to\{0,1\}^*\),如果对于所有输入 \(x\),对于所有随机纸带,输出 \(f(x)\) 的概率均为 \(1\)。这意味着,我们不能容忍那些小概率失败的算法,因此条件很强。但是我们为方便,假定 随机算法总是输出正确答案。
这些算法被称作概率多项式 Turing 机 probablistic polynomial-time Turing machine (p.p.t),或高效随机算法 efficient randomized algorithm。
一个高效私钥加密系统 efficient private-key encryption scheme 是 \((\t{Gen,Enc,Dec})\) 三元组,其中:
- \(\t{Gen}\) 需要一个 \(n\) 作为输入。即,对于每个长度 \(n\),其提供一个私钥采样方案。
- \(\t{Enc}_k(m)\) 是一个 p.p.t 通过给定 \(k\) 和长度恰为 \(n\) 的明文 \(m\) 来给定密文。
- \(\t{Dec}_k(c)\) 同理是 p.p.t。
- 需要保证对于一切 \(n,m\),都有 \(\Pr[k\gets\t{Gen}(1^n):\t{Dec}_k(\t{Enc}_k(m))=m]=1\)。
这里的 \(1^n\) 是有必要提供作为输入的,它的效果是为更长的 \(m\) 提供更安全的加密方法,同时作为 p.p.t 的运行时间参数使用。因此下文不再使用私钥空间 \(\c K\) 和密文空间 \(\c M\),而是默认它们都是相应长度的 01 串。
同理,监听者的算法也可以与输入长度相关,即一个非均匀 PPT non-uniform p.p.t (n.u. p.p.t),为一系列模型 \(A_1,\dots\),满足存在多项式 \(d\) 使得 \(|A_i|\leq d(i)\)。总模型 \(A(x)\) 事实上为 \(A_{|x|}(x)\)。
II.II. One-Way Functions
我们需要一个这样的算法,其从 \(m,k\) 推知 \(c\) 是容易的,但反过来从 \(c\) 推知 \(k,m\) 是困难的。
最坏情况单向函数 worst-case one-way function 是存在正向 p.p.t 但不存在逆向 p.p.t 的 \(\{0,1\}^*\to\{0,1\}^*\) 函数。
- 逆向 p.p.t 的定义为,对于每一个值域中元素,都可以找到某一个对应的定义域中元素。不要求找到所有的原像。
假设 NP 不等于 BPP (存在至少有 \(2/3\) 概率成功的概率 Turing 机),则必然存在这样的单向函数。事实上,NP vs BPP 与存在单向函数二者等价。但是有很多病态单向函数,即虽然绝大多数输入都可逆,但总存在无限多不可逆输入(如果有限则可以特判)的函数。
这样的病态函数确实是 worst-case one-way 的,但是这显然并非一个好的 encryption scheme:它只在 最坏情况 下是单向的,绝大多数场合都非单向。因此,当有人声称他的 scheme 是单向的,因为其求逆等效于解 NP-Hard 问题,承认这一点,但是对该加密方法的稳定性表示怀疑。于是,我们尝试寻找绝大多数输入不可逆的单向函数。
我们定义一个 negligible 的函数 \(\eps(n)\) 是 sub-inv-poly 的,即对于一切 \(c>0\),都满足 \(\eps(n)=o(n^{-c})\)。
那么,一个函数 \(f(x)\) 是强单向函数 strong one-way function,如果对于一切逆向 p.p.t \(A\),均满足
也即,仅对于 negligible 的输入可逆。这个定义远强于 worst-case:后者只要求 存在一个 \((x,y)\) 对,其 有失败的可能。
- 注意,事实上“存在一个”这个说法是不佳的,因为假如有一个 adversary 只在一个地方求逆失败,则可以把这个场合硬编码,造出一个所有地方都成功的 adversary。因此,worst-case 必然保证了,对于一切 adversary 都存在无穷多不可逆处。
称一个函数是 \((t,s,\eps)\)-单向,如果不存在大小不超过 \(s(n)\) 的逆向 \(A\),使得其复杂度不超过 \(t(n)\)、成功概率不超过 \(\eps(n)\)。
弱单向函数 weak one-way function 则是对于 non-negligible 的输入不可逆,即存在多项式级别的 \(q(n)\) 使得上述 negligible 的 \(\eps(n)\) 被换成补集 non-negligible 的 \(1-1/q(n)\)。
II.III. Multiplication, Primes, and Factoring
考虑函数
其逆向函数即对于每个自然数 \(z\),找到其一组(不一定分解为质数,但不能使用 \(1\))的分解。一个满足 non-negligible 的输入不可逆的方式是,\(z\) 是偶数当且仅当 \(x,y\) 有一为偶数。而有一为偶数时,\((x=2,y=z/2)\) 是一组合法的逆。这种求逆方式对于 \(3/4\) 的 \((x,y)\) 输入有效。
无穷集 \(\N^2\) 的 \(3/4\) 是什么意思?事实上,这应该回到关于 \(n\) 的式子中,即
\[\Pr[x\gets\{0,1\}^n;y\gets f(x):f(A(1^n,y))=y]\leq\dfrac34 \]这个式子中带上了 \(n\),因此 \(x\) 是有限集。
因此这种求逆方式对于 non-negligible 的输入失效。
鉴于单向函数的存在依赖于 NP vs BPP,因此存在弱单向函数的命题至今也只能是一个猜想。建立在 NP vs BPP 上,可以得到如下假设:
令 \(\Pi_n\) 为严格小于 \(2^n\) 的全体质数集合,则 质因数分解假设 声称:
对于一切逆向 \(A\),都存在 negligible 的 \(\eps(n)\) 满足
即,不存在有效的能为两个质数乘积找到质因数的方式。
应用这个假设做出一些推理:
-
定理:\(\pi(n)>\dfrac{n}{2\log n}\)。其中 \(\pi(n)\) 为不超过 \(n\) 的质数数目。
首先,令 \(X=\dbinom{2n}n\),则 \(X>2^n\) 并且所有质因数不超过 \(2n\)。对 \(X\) 分解,令 \(v_p(X)\) 为质因数 \(p\) 的次数,则取 \(\ln\) 得到\[\sum_{p\leq 2n}v_p(X)\log p>n \]于是只需要 bound \(v_p(X)\) 即可。因为 \(n!\) 中含 \(p\) 的次数可以写成 \(\sum_{i\geq1}\left\lfloor n/p^i\right\rfloor\),所以有
\[v_p(X)=\sum_{i\geq1}\left\lfloor 2n/p^i\right\rfloor-2\left\lfloor n/p^i\right\rfloor \]因为每一项至多贡献 \(1\),而当 \(p^i>2n\) 时即不再产生贡献,所以得到 \(v_p(X)\leq\log 2n/\log p\)。
代入即得 \(\pi(2n)\log 2n>n\)。于是 \(\pi(n)>\dfrac n{2\log n}\)。 -
定理:如果质因数分解假设成立,那么前述 \(f_\t{mult}\) 是一个弱单向函数。
这是因为,当 \(x,y\) 都是 \(2^n\) 范围(此时输入可以看作长度为 \(2n\) 的零一串)时,质数密度 \(\pi(2^n)/2^n>1/2n\),于是以 non-negligible (准确地说,\(1/4n^2\)) 的概率取到两个质数,而由假设此时任意函数都 negligible 地可以分解。综上,\(f_\t{mult}\) 不可逆的概率 non-negligible,因此其弱单向。
事实上,\(f_\t{mult}\),即 \(\Pi_n\times\Pi_n\),在质因数分解假设下是强单向的;弱单向的是 \([1,n]\times[1,n]\)。
II.IV. Hardness Amplification
一个好消息是,使用弱单向可以构造强单向。假如存在一个弱单向的 \(f\),则存在多项式级别的函数 \(m(n)\),使得对于长度为 \(n\) 的输入,重复 \(m(n)\) 次得到的函数是强单向的。即,若 \(f:\{0,1\}^*\to\{0,1\}^*\) 弱单向,则 \(f':(\{0,1\}^n)^{m(n)}\to(\{0,1\}^*)^{m(n)}\) 强单向。
这个命题的证明使用了一种名叫 安全性规约 security reduction 的方法。即,假设 \(f'\) 非强单向,则存在仅对 negligible 失效的逆 \(A'\)。细节将在之后看到。
一个简单的 security reduction 的例子是,如果 \(f\) 是强单向,那么 \(g(x,y)=(f(x),f(y))\) 必是强单向。这是因为,如果 \(g(x,y)\) 并非强单向,那么存在 \(A'\) 使得
现在,使用 \(A'\) 建立 \(A\)。对于 \(A\) 的输入 \(u\),随机一个 \(y\),然后令 \(v\gets f(y)\),并使用 \((u,v)\) 喂给 \(A'\),然后拿输出的第一项返回 \(A\)。则其成功概率与 \(A'\) 成功概率相同。于是规约成功。
现在,考虑 \(m_n=4n^3\) 个 \(f_\t{mult}\) 的并行,即 \(f':(\{0,1\}^{2n})^{m_n}\to(\{0,1\}^{2n})^{m_n}\)。单个随机时,均为质数的概率至少为 \(1/4n^2\);而 \(m_n\) 次时,所有的对都存在非质数的概率不超过
这意味着,在质因数分解假设下,\(f'\) 是强单向的。
同理,使用弱单向拼强单向的做法也类似。
II.V. Collections of One-Way Functions
单向函数集 collection of OWFs 是一个函数族 \(\c F=\{f_i:\c D_i\to\c R_i\}_{i\in I}\),满足如下条件:
-
可以从中 sample 一个 OWF。即,存在 p.p.t \(\t{Gen}(1^n)\) 给出一个 \(i\in I\) 的下标。
-
对于一个 OWF,存在 p.p.t 从 \(\c D_i\) 中独立均匀随机 sample 元素。
-
存在 p.p.t 计算 \(f_i(x)\)。
-
难以求逆,即对于一切 \(A\) 都有
\[\Pr[i\gets\t{Gen},x\gets\c D_i,y\gets f_i(x):f(A(1^n,i,y))=y]\\\leq\eps(n) \]
存在单向函数集当且仅当存在强单向函数。
反推是容易的,只需要令 \(I=\{0\}\) 即可。这是错误的。应该令 \(I=\N\) 然后 \(\c D_i=\{0,1\}^n,f_i=f\)。原因是因为单个 \(f_i\) 的定义域是无限的。
但是正推呢?其中的某一个具体的 \(f_i\) 不一定是强单向的(因为可以让 \(\t{Gen}\) 随着 \(n\) 变大,某一个 \(f_i\) 的选中概率不断变小)。解决方案是把 \((i,f_i(x))\) 二元组看作整体,定义 \(g(r_1,r_2)\) 是用 \(r_1\) bit 作为 \(\t{Gen}\) 的输入生成 \(i\),用 \(r_2\) bit 从 \(\c D_i\) 中 sample \(x\),然后算 \((i,f_i(x))\),则这个整体的 \(g\) 是强单向的。
II.VI. Basic Computational Number Theory
经典的 exgcd 的执行次数可以被严格 bound:对于 \(0\leq b<a<2^n\),exgcd 执行不超过 \(2n\) 次。
快速幂 \(a^x\pmod n\) 的朴素复杂度是 \(\log x\cdot(\log n)^2\)。
Miller-Rabin:执行 \(t\) 轮检验,以 \(1-2^{-t}\) 的概率判定成功合数。
随机生成 \(n\)-位质数:不断随机串直到其经 MR 验证为质数。因为质数密度,该算法是高效(多项式)的。
当 \(N=pq\),如果我们认为分解 \(N\) 是困难的,那么求 \(\varphi(N)\) 同样是困难的。
II.VII. Factoring-based Collection of OWF
现在,我们可以构建一个好的 OWF collection:令 \(f_i\) 为随机两个 \(i/2\) 位质数,求积即可。显然,sample OWF、独立均匀 sample 元素、求积这几件事都可以实现,分解又是困难的。
II.VIII. Discrete Logarithm-based Collection
离散对数:对于一个循环群,对其中的某个元素求逆。
离散对数假设:对于所有 adversary,其成功概率均不超过 \(\eps(n)\)。
在此基础上,可以建立 DL collection,即
II.IX. RSA Collection
RSA 假设:对于满足 \(N=pq\mid p,q\in\Pi_n\)、\(\gcd(e,\varphi(N))=1\)、\(y\in\Z_N^*\) 的三元组 \((N,e,y)\),求出 \(x^e\equiv y\pmod N\) 的 adversary 是 negligible 的。即,
也即,RSA 断言计算随机元素的 \(e\) 次根是困难的。
RSA collection 中 \(I=\{(N,e)\mid N=p\cdot q\st p,q\in\Pi_n\land e\in\Z^*_{\Phi(N)}\}\),\(\c D_i=\c R_i=\Z_N^*\),\(f_{N,e}(x)=x^e\bmod N\)。
并且,\(f_{N,e}\) 是 \(\Z_N^*\) 上的一个 permutation。
II.X. One-way Permutations
单向函数集 \(\c F\) 是单向排列集 collection of one-way permutations,如果其中所有单向函数都是排列。
RSA 假设强于质因数分解假设。具体而言,假设存在以多项式倒数 \(1/p(n)\) 概率将 \(N=pq\) 分解的 adversary \(A\),则存在 \(A'\) 以 \(1/p(n)\) 概率对 \(f_{N,e}\) 求逆。这是因为,当已知 \(N\) 的分解后,\(\varphi(N)=(p-1)(q-1)\) 是可以求出的,于是 \(e\) 在 \(\Z_{\varphi(N)}^*\) 上的逆 \(e^{-1}\) 可以被求出,即得 \(f_{N,e}\) 的逆排列。
特别地,反向结果目前是未知的,即目前不能确定分解假设是否推出 RSA 假设。
II.XI. Trapdoor Permutations
如果 \(N\) 的分解未知(更准确地说,如果 \(\varphi(N)\) 未知),则对 \(f_{N,e}\) 求逆是困难的;但是,只要知道其分解,求逆即变成易事了。因此,\(N\) 的分解是一个陷门 trapdoor,知道其即可允许 \(f_{N,e}\) 被逆向。
陷门排列集 collection of trapdoor permutations 是 \(\c F=\{f_i:\c D_i\to\c R_i\}_{i\in I}\) 满足:
- \(f_i\) 是排列。
- 容易关于陷门信息采样函数。即,存在 p.p.t \(\t{Gen}\) 满足 \((i,t)\gets\t{Gen}(1^n)\)。其中,\(i\in I\),而 \(t\) 是陷门信息。
- 易于从定义于中采样、易于求值。
- 无陷门时难以求逆,但有陷门时容易求逆(即,给定 \((i,t)\) 和 \(y\in\c R_i\),存在 p.p.t 计算 \(f^{-1}(y)\))。
现在,对 RSA collection 中的 index \((N,e)\),令其对应的陷门信息 \(d\) 是满足 \(e\cdot d\equiv1\pmod{\varphi(N)}\) 的那个 \(d\)(使用 exgcd 求出),则 RSA 是陷门排列集。
事实上,\(f(x)=x^e\pmod N\) 是唯一已知的 trapdoor one-way permutation;有很多 OWF,但是已知 OWP 只有一个。
II.XII. Rabin collection
RSA 的 \(e\) 是随机从 \(\Z_{\varphi(N)}^*\) 中 sample 的;一个类似的场合是令 \(e=2\),即求平方根。但是注意到因为 \(N=pq\) 所以必然有 \(\varphi(N)=(p-1)(q-1)\) 为偶数,因此有 \(e\notin\Z_{\varphi(N)}^*\),因此这与 RSA 有一定不同。
全体二次剩余元素构成一个裙,记作 \(\t{QR}_p=\{x^2\bmod p\mid x\in\Z_p^*\}\)。有 \(\t{QR}_p=(p-1)/2\)。
当 \(p=3+4k\) 时,有 \((\pm y^{k+1})^2\equiv y\)。
若 \(a^2=y\),则 \((y^{k+1})^2=a^{4k+4}=a^2=y\)。
当 \(p=1+4k\) 时,上述方法不太行,因此使用 Cipolla。
寻找 \(b\) 使得 \(b^2-y\) 非二次剩余。定义虚数 \(i^2=b^2-y\),则 \((b+i)^{p+1}=y\),于是 \(y=((b+i)^{(p+1)/2})^2\)。
定理:对于 \(N=pq,x\in\Z_N^*\),令 \(y,z\) 分别为 \(x\bmod p,x\bmod q\),则 \(x\in\t{QR}_N\iff y\in\t{QR}_p\land z\in\t{QR}_q\)。
正向直接取模,反向使用 CRT。
当 \(N\) 为质数时,\(x\mapsto x^2\pmod N\) 是二对一映射;当 \(N=pq\) 时,其则是四对一映射,这是因为 \((\pm y)(\pm z)\) 经过 CRT 回映至四个元素。因此,\(|\t{QR}_N|=|\Z_N^*|/4\)。
现在,已知 \(p,q\),关于 \(N\) 的二次剩余可以被简单计算;但是目前不存在未知 \(p,q\) 直接计算二次剩余的高效方法。
Rabin collection:\(\b R=\{f_i:\c D_i\to\c R_i\}_{i\in I}\),
- \(I=\{N:N=p\cdot q\mid p,q\in\Pi_n\}\)
- \(\c D_i=\Z_N^*\)
- \(\c R_i=\t{QR}_N\)
- \(f_N(x)=x^2\bmod N\)
RSA 假设强于分解假设;但是 rabin collection 与分解假设等效。
假设存在高效求二次剩余的 \(A(x)\),其成功概率至少为 \(1/p(n)\),那么依以下方法构建高效分解的 \(A'(x)\):
- 从 \(\Z_N^*\) 中 sample 一个 \(x\),计算 \(x^2\) 的一个二次剩余 \(z\)。\(A(x)\) 会随机返回四个二次剩余中的某一个。既然 \(x^2\equiv z^2\),这意味着 \((x-z)(x+z)\equiv0\);以 \(1/2\) 的概率,\(z\neq x\) 且 \(z\neq -x\),此时 \(x,z\) 模 \(p,q\) 的结果之一必须相等,这意味着 \(\gcd(x-z,N)\) 会是 \(p,q\) 之一。这个方法的成功概率至少为 \(1/2p(n)\)。
- 注意,这个算法的随机性 并非建立于 \(A(x)\) 的随机性 上,而是建立于有四个 \(x\) 会得到相同的 \(x^2\) 并提供给二次剩余 oracle。只要 oracle 给出的分布只与输入有关,那么不论其返回什么,总是能匹配两个 \(x\) 而干掉两个 \(x\)。因此,其成功概率 建立于 \(x\) 的随机性。
反之,如果能高效分解,那么对两个因子分别 Cipolla 然后用 CRT 合并之即可。
通过一些约束,rabin collection 也是可以是一个陷门排列。具体而言,只保留那些 \(p,q\) 均模 \(4\) 余 \(3\) 的 \(N\),然后令 \(f_i\) 是 \(\t{QR}_N\to\t{QR}_N\),则可以证明其是排列。
II.XIII. A Universal One Way Function
单向函数仅在 NP-BPP 假设下存在。其它假设(例如分解假设或 RSA 假设)保证了具体的单向函数存在。
现在,仅仅假设存在某个未知单向函数(即 NP-BPP),即可得到某个具体的单向函数 \(f_\t{univ}\)。这个 \(f_\t{univ}\) 虽然是弱单向的,但是由前文,只要有弱单向就可以增强为强单向。
主要思想是,正如 circuit-SAT 可以模拟一切 validator 一样,我们希望我们的 \(f_\t{univ}\) 可以模拟一切单向函数。对于一个 Turing 机 \(M\) 和其输入 \(x\) 构成的二元组 \(y=\anp{M,x}\),令 \(f_\t{univ}(y)=M(x)\)。问题在于,\(M(x)\) 不一定能在多项式时间内求解——它甚至不一定会停机。但是这不是什么大问题,因为我们只需要 \(f_\t{univ}\) 是弱单向即可。
我们认为,输入 \(y\) 的前 \(\log(|y|)\) 位铭刻了 Turing 机 \(M\)(假设存在一种可以描述 Turing 机的方式 例如 并且这个方式可以通过 padding 来延伸长度),而剩下的位是 \(M\) 的输入 \(x\)。然后,我们使用 \(x\) 在 \(M\) 上运行 \(|y|^3\) 步;如果 \(M\) 停机,则返回 \(M(x)\) 为 \(f_\t{univ}(y)\);否则返回 \(\varnothing\)。c++ 代码
显然,\(f_\t{univ}(y)\) 可在 \(O(|y|^3)\) 内计算。
假设存在一个强单向函数 \(g\),我们可以构建一个复杂度为 \(O(n^2)\) 的强单向 \(g'\)。构造的方法如下:
假设 \(g\) 可以在 \(n^c\) 内计算。显然,如果 \(c\leq2\) 则 \(g\) 已符合要求。考虑 \(c>2\),则通过强行 padding(令 \(g'\) 的输入 \(x=\anp{a,b}\)【这个符号的意义是 \(a,b\) 两串的拼接】;则令 \(|a|=n^c-n,|b|=n\),令 \(g'\) 输出为 \(\anp{a,g'(b)}\))可以设计 \(g'\),则 \(g'\) 显然是一个能在 \(O(m^2)\) 内计算的函数,且易知其强单向性。
如果 \(f_\t{univ}\) 并非弱单向,则存在 \(A\) 使得其成功概率高于一切多项式 \(q(n)\) 引导的 \(1-1/q(n)\)。特别地,其在 \(q(n)=n^3\) 时成立。令 \(A\) 成功求逆这个事件为 \(\t{Invert}\)。
令 \(M_g\) 为某个描述最短的描述 \(g\) 的机器,则 \(|M_g|\) 可以认为是常数。则一个随机 \(n\)-bit 串 \(y=\anp{M,x}\) 当 \(|M|=\log|y|\geq|M_g|\) 时,其以至少 \(2^{-\log n}=1/n\) 的概率成功描述 \(g\) 及其输入。令成功描述这个事件为 \(\t{PickG}\)。
现在结合二者。则
这就意味着,如果 \(f_\t{univ}\) 并非弱单向,我们可以以 \(1/n^3\) 的概率对一个强单向求逆,而这是不合法的。因此必有 \(f_\t{univ}\) 是弱单向的。
由此,只要强单向函数存在,我们就可以认为 \(f_\t{univ}\) 是单向的。但是显然 \(f_\t{univ}\) 并非一个好的基础假设(正如我们在研究 NPC 性时,不会认为 circuit-SAT 是一个好的基础假设一样)。
如果 \(f_\t{mult}\) 竟是一个基础假设,那会叫人多么惊喜呀!
III. Indistinguishability & Pseudo-Randomness
一次性密码本不是一个很牛的方法,主要是因为私钥要和文本一样长。一个可行的尝试是,从一个短钥 \(k\) 开始,使用一个伪随机生成器 pseudo-random generator \(g\) 把它延长到需要的长度。
显然,通过伪随机生成器不能达到和真随机一样的效果。但是,考虑到 adversary 的算力有限,我们希望能找到一个在有限算力的 adversary 眼中和真随机没啥区别的伪随机生成器。
这个伪随机生成器需要能通过一切基于统计的检验。这需要引入一些概念。
III.I. Computational Indistinguishability
一个概率分布族 ensemble of probability distributions 是 \(\{X_n\}_{n\in\N}\),其中每个 \(X_n\) 均是 \(\{0,1\}^*\) 上的概率分布。除非特殊说明,否则概率分布族的下标都默认是自然数,此时简记为 \(\{X_n\}_n\)。
对于两族概率分布 \(\{X_n\},\{Y_n\}\),二者满足 \(X_n,Y_n\) 都是 \(\{0,1\}^{\l(n)}\) 上的概率分布,其中 \(\l(n)\) 是多项式。此时,称它们是计算不可区分的 computationally indistinguishable(记作 \(\{X_n\}_n\approx\{Y_n\}_n\)),如果对于一切 n.u.p.p.t \(D\)(称作判别器 distinguisher),都存在 negligible 的 \(\eps\) 使得
也即,没有有效判别器能以 non-negligible 的概率区分二者。
称一个判别器以 \(\eps\) 的概率区分某个具体的 \(X_n,Y_n\),如果上述概率 \(>\eps\);称其以 \(\mu(n)\) 的概率区分两族 \(\{X_n\}_n,\{Y_n\}_n\),如果对于所有的 \(n\),上述概率 \(>\mu(n)\)。
如果两族分布 \(\{X_n\},\{Y_n\}\) 不可区分,则对于一切 n.u.p.p.t \(M\),都有 \(\{M(X_n)\},\{M(Y_n)\}\) 不可区分。
如果 \(D(\cdot)\) 区分 \(\cur{M(X_n)}\) 和 \(\cur{M(Y_n)}\),那么 \(D'(\cdot)=D(M(\cdot))\) 区分 \(\cur{X_N},\cur{Y_n}\)。
不可区分性具有传递性——其构成等价类划分 其具有传递性吗?
对的对的。哦不对不对。哦对的对的。对……对吗?
分布族之间是总是具有传递性的,不论传递性中间隔了多少个族,这是因为中继族数目总是有限常数。
然而,单个分布之间是没有传递性的。\(\epsilon\)-区分重复两次至多有可能变成 \(2\eps\)-区分。
(Hybrid Lemma):对于一个概率分布列 \(X_1,\dots,X_m\),若判别器 \(D\) 以 \(\eps\) 区分 \(X_1,X_m\),那么由绝对值的三角不等式,其必然以 \(\eps/m\) 区分某个 \(X_i,X_{i+1}\)。
既然没有区分二者的判别器,那么也应不存在能以 \(1/2+1/\poly(n)\) 预测下一位的预测器。事实上,预测器和判别器是等价的。
prediction lemma:如果存在 \(\mu(n)\) 的判别器 \(D\),则存在 \(1/2+\mu(n)/2\) 的预测器 \(A\)。
不妨假设 \(D\) 在收到 \(X_n^1\) 中元素时,较之收到 \(X_n^0\) 中元素以更高概率输出 \(1\)。即,存在无限多个 \(n\) 满足
\[\Pr[t\gets X_n^1:D(t)=1]-\Pr[t\gets X_n^0:D(t)=1] \\>\mu(n) \]这是因为 \(\Pr[1]>\Pr[0]\) 和 \(\Pr[1]<\Pr[0]\) 的 indice 至少有一个是无穷的,搭配可选的 \(D'=1-D\) 即可。
则 \(D\) 同时也可以被当成一个预测器。具体而言,
\[\Pr[b\gets\{0,1\};t\gets X_n^b:D(t)=b] \\=\dfrac12\left(\Pr[D(X_n^1)=1]+\Pr[D(X_n^0)\neq1]\right) \\=\dfrac12+\dfrac12\left(\Pr[D(X_n^1)=1]-\Pr[D(X_n^0)=1]\right) \\>\dfrac12+\mu(n) \]
III.II. Pseudo-randomness
令 \(U_n\) 表示 \(\cur{0,1}^n\) 上的均匀分布。称一个分布是伪随机 pseudo-random 的,如果它与均匀分布不可区分。
一族概率分布 \(\cur{X_n}_n\)(其中 \(X_n\) 是 \(\cur{0,1}^{\l(n)}\) 上的分布)被称作伪随机的,如果 \(\cur{X_n}_n\approx\{U_{\l(n)}\}_n\)。这个定义等效于其可以通过一切高效的基于统计的测试。
虽然这看上去是难以验证的,但是幸运的是,我们有一些完全 complete 的测试,通过了它就通过了所有测试。
概率分布族 \(\cur{X_n}_n\) 通过了下一位测试 Next-Bit Test,当且仅当存在 negligible 的 \(\eps(n)\) 满足对于一切 \(n\),对于一切 \(i\in\cur{0,1,\dots,\l(n)-1}\),对于一切 n.u.p.p.t Adversary \(A\),都满足
即,对于所有前缀,预测下一位都是困难的。
下一位测试是完全的。
假设存在判别器 \(D\) 使得在无限个 \(n\) 处满足 \(X_n\) 和 \(U_{\l(n)}\) 区别超过 \(1/p(n)\)。现在,定义一个混合分布 hybrid sequence 列是
\[H_n^i=\{x\gets X_n,y\gets U_{\l(n)}:x_{1\sim i}y_{i+1\sim\l(n)}\} \]特别地,有 \(H_n^0=U_{\l(n)},H_n^{\l(n)}=X_n\)。既然 \(D\) 以 \(1/p(n)\) 区分 \(H_n^0\) 与 \(H_n^{\ell(n)}\),由 hybrid lemma,存在 \(H_n^i\) 与 \(H_n^{i+1}\) 被 \(D\) 以 \(1/p(n)\ell(n)\) 区分。既然二者唯一的分别在第 \(i+1\) 位,这意味着 \(D\) 可以在已知前缀 \(x_{1\sim i}\),以 \(1/p(n)\ell(n)\) 的概率区分 \(x_{i+1}\) 和随机 bit;那么,定义
\[\bar H_n^i=\{x\gets X_n,y\gets U_{\l(n)}:x_{1\sim i-1}\ovl{x_i}y_{i+1\sim\l(n)}\} \]则因为 \(H_n^i\) 可以看作以 \(1/2\) 的概率采样 \(H_n^{i+1}\)、以 \(1/2\) 的概率采样 \(\bar H_n^{i+1}\),所以
\[\left|\Pr[D(H_n^{i+1})=1]-\Pr[D(H_n^i)=1]\right| \\=\left|\Pr[D(H_n^{i+1})=1]-\dfrac12\Pr[D(H_n^{i+1},\bar H_n^{i+1})=1]\right| \\=\dfrac12\left|\Pr[D(H_n^{i+1})=1]-\Pr[D(\bar H_n^{i+1})=1]\right| \]即 \(H_n^i\) 与 \(\bar H_n^i\) 可以以 \(2/\ell(n)p(n)\) 的概率区分。由 prediction lemma,存在 \(1/2+1/\ell(n)p(n)\) 的预测器。
III.III. Pseudo-random generators
一个函数 \(G:\{0,1\}^*\to\{0,1\}^*\) 是伪随机生成器 Pseudo-Random Generator (PRG),如果:
- (efficiency):可以使用 p.p.t 计算。
- (expansion):\(|G(x)|>|x|\)。
- 族 \(\cur{x\gets U_n:G(x)}_n\) 是伪随机的。
一个可能的 PRG 构造是,令 \(f\) 是一个单向排列,则令 \(G(s)=f^n(s)+f^{n-1}(s)+\dots+f(s)+s\),其中 \(+\) 意味字符串(每个 \(f^n(s)\) 都是一个 \(n\)-bit 01 串)拼接。一个 idea 是预测下一个数等效于逆向 \(f\),但是问题在于 \(f\) 作为一个整体是不可逆的,不意味着 \(f\) 的每一个 bit 都是不可逆的;这种构造生成了不可预测的数字而非不可预测的 bit。
为什么我们需要单向排列?首先我们需要定义域和值域相同。其次我们需要当 \(x\) 随机分布时,\(f(x)\) 亦随机。
一个预测 \(h(x):\{0,1\}^*\to\cur{0,1}\) 是关于 \(f(x)\) 的难题预测 hard-core predicate,如果它可以高效计算且一切 n.u.p.p.t adversary \(A\) 均有
即,给定 \(f(x)\) 不能帮助计算 \(h(x)\)。
给定 \(N,e\),对于 \(f_\t{RSA}(x)=x^e\bmod N\),其相关的一些难题预测的例子如
- \(\t{LSB}(x)\) 寻求 \(x\) 的最低位。
- \(\t{half}_N(x)\) 寻求判定是否有 \(0\leq x\leq N/2\)。
- 建立在离散对数假设,即 \(f_\t{DL}(x)=g^x\pmod p\),下的 \(\t{half}_{p-1}(x)\)。
难题预测的意义在于其可以协助构建 PRG。这是因为,如果有 OWP 的 \(f(s)\) 和关于 \(f\) 难题的预测 \(h(s)\),则 \(G(s)=f(s)+h(s)\) 会是一个 PRG:首先 \(f(s)\) 会是一个随机的 \(n\)-bit 字符串,因此预测 \(f(s)\) 的下一位是困难的。同理,已知 \(f(s)\) 预测 \(h(s)\) 也由难题预测的定义是困难的。【但是注意,此处的 \(f(s)\) 必须是 OWP 而不能是 OWF,原因显然】
这个 \(G(s)\) 只延长了一位。令 \(X_0=s\),然后对于 \(G(X_i)\),令其前 \(n\) 位构成 \(X_{i+1}\)、最后一位用作 \(b_{i+1}\),则 \(b_{1\sim \ell(n)}\) 是一个 \(\ell(n)\) 位的 PRG。
它的等价描述是
然后 \(G'(x)=G^m(x)\)。现在如果存在 \(D\) 以 \(1/p(n)\) 区分 \(\{U_{m(n)}\}_n\) 和 \(\cur{G'(U_n)}_n\),则仍然考虑混合分布 \(H_n^i=U_{m(n)-i}+G^i(U_n)\),则存在以 \(1/p(n)m(n)\) 被区分的 \(H_n^i\) 和 \(H_n^{i+1}\)。有
构建 nuppt \(M(y)\),其效果如下:令 \(b_\t{prev}\gets U_{m-i-1},b\gets y_1,b_\t{next}\gets G^i(y_{2\sim n+1})\),返回 \(b_\t{prev}+b+b_\t{next}\)。则 \(M(U_{n+1})=H_n^i,M(G(U_n))=H_n^{i+1}\)。由 PRG 性质,有 \(\cur{U_{n+1}}_n\approx\cur{G(U_n)}_n\),因此二者同步作用于 \(M\) 后的 \(\cur{H_n^i}_n,\cur{H_n^{i+1}}_n\) 也不可区分。出现矛盾,则不存在判别器 \(D\)。
在证明两个混合分布的不可区分性时,此处这种构建 nuppt 的方法是可行的策略之一。
因此,令 \(h(x)\) 是单向 \(f(x)\) 对应的难题预测,则 \(G(x)=h(x)+h(f(x))+h(f^2(x))+\dots+h(f^{\ell(n)}(x))\) 会是一个 PRG。
这只需要知道一个 seed \(x^i=f^i(x)\),就可以无限地延长 PRG 生成的伪随机列。同时,如果有的不是单向的 \(f(x)\) 而是单向函数集,则通过维护多个 seed 作为函数集中每个 \(f_i\) 的 seed 也可以构建 PRG。
Blum-Micali PRG:使用 seed 生成 \(p,g,x\),其中 \(p\) 是满足 \(p=2q+1\)(\(q\) 亦为质数)的质数,\(g\) 是 \(p\) 的原根,\(x\in\Z_p^*\)。\(f_\t{DL}(x)=g^x\bmod p\),\(h(x)=\t{half}_{p-1}(x)\)。
RSA PRG:\(N=pq\),\(e\in\Z_{\varphi(N)}^*\);\(f_\t{RSA}(x)=x^e\bmod N\),\(h(x)=\t{LSB}(x)\)。
Blum-Blum-Schub:\(p,q\bmod 4=3,N=pq\),\(x\in\t{QR}_N\);\(f_\t{QR}(x)=x^2\bmod N\),\(h(x)=\t{LSB}(x)\)。
III.IV. Hard-Core Bits from Any OWF
之前介绍的几个单向函数-难题预测对都没有加以证明。如何针对单向函数寻找对应的难题预测?本节将加以阐述。
比如说,证明 DL 假设下,\(\t{half}_{p-1}(x)\) 是 \(f_{p,g}(x)=g^x\bmod p\) 的难题预测。现在假设有能以 \(1/2+1/s(n)\) 概率预测 \(\t{half}_{p-1}(x)\) 的 n.u.p.p.t \(A\),尝试用其实现离散对数。
首先考虑 \(A\) 是严格正确的理想态。需求是对 \((g,p,y)\) 三元组求出 \(g^x\bmod p=y\) 的 \(x\)。令 \(k\gets|p|\)(注意此处的 \(|p|\) 指的是 \(p\) 作为 01 串的长度),然后令 \(k\) 递减(即从最低位向最高位)地确定 \(x\) 的每一位。
- 如果 \(y\) 是二次剩余,那么将 \(x\) 的当前位设成 \(0\),然后将 \(y\) 开根。
- 如果 \(y\) 非二次剩余,那将 \(x\) 的当前位设成 \(1\),然后将 \(y\) 除以 \(p\) 后开根。【再次强调,质数时的二次剩余是 Cipolla 可求的,Rabin collection 是质数乘积时的二次剩余】
- 但是,开根有正负两个根,选择哪一个?使用 \(A\) 给出的 \(\t{half}_{p-1}\) 即可判定使用哪个根。
现在问题在于 \(A\) 并非严格正确。但可以重复实验并取众数,来无限制地提高其成功概率,即得离散对数的强单向逆。
这个例子使用了 OWF 本身的性质。如何对任何 OWF 求出难题预测?
首先定义 \(\anp{x,y}=\sum x_iy_i\bmod 2\) 的内积。注意,二进制内积的另一种理解方式是,\(y\) 的 mask 决定了 \(x\) 的哪些位被挑出来算 parity。
那么,如果 \(f(x)\) 是一个单向函数(或单向排列),则定义其扩展得到的 \(g(x,r)=(f(x),r)\)(须保证 \(|x|=|r|\))则显然 \(g(x,r)\) 仍是单向函数(或单向排列)。同时,\(h(x,r)=\anp{x,r}\) 会是 \(g(x,r)\) 的难题预测。
证明以上东西确实是难题预测。即,能以 \(1/2+1/p(n)\) 求 \(A(1^n,y,r)=h(x,r)\) 的 \(A\) 可以被用于逆向 \(f(x)\),即求出 \(f(x)\) 的逆 \(B\)。
首先考虑一个过度简化的场合,即 \(A\) 总是百分百成功求 \(h\)。为什么称其为过度简化?因为此时存在一个过度简单的方法:若要对 \(y=f(x)\) 求出 \(B(y)=f(x)\),则使用 \(A(y,e_i)\)——此处 \(e_i\) 是仅在第 \(i\) 位为 \(1\) 的串——求出 \(x\) 的第 \(i\) 位然后合并即可。
现在考虑一个简化的场合:\(A\) 成功的概率 \(\geq3/4+\eps(n)\),其中 \(\eps(n)\) 是 \(1/\poly(n)\)。这时上述做法不再有效:\(A\) 不一定能对所有 \(y\) 生效;就算其能生效,其也可能在某些特定的 \((y,e_i)\) 对上失效。
定义一个实例的 good set
则有 \(\Pr[x\in S]\geq\eps/2\)。因为否则则有
与假设相悖。
对于这个 good set,我们希望能成功求逆的 \(r\) 至少构成一组基,这样就可以用基处的值反推出所有 \(e_i\) 处的值。实际操作时,可以选择随机一组基……
但是这太蠢了。我们完全可以适当多随一点东西。比如说,当要求 \(e_i\) 的信息时,可以随机一个 \(r\),然后令 \(r'=r\oplus e_i\)。则以 \(1/4-\eps/2\) 的概率 \(A(y,r)\),同理以该概率 \(A(y,r')\) 失败。那么,by union bound,单个 \(e_i\) 的 guess 就以 \(1/2-\eps\) 的概率失败。
两个都失败,其实 guess 反而会成功。
但是注意到两个 guess 不一定独立(极端场合,两个 guess 永远只有一个会失败),因此就算考虑两个都失败的场合,这里的证明也不能延拓到 \(A\) 成功概率是 \(1/2+\eps\) 的场合。
那么重复 \(\poly(1/\eps)\) 次取众数即可。现在,对于一个 non-negligible 的集合 \(S\),以高概率其可逆,违背了 \(f(x)\) 不可逆的前提。
现在考虑原本场合。仍然可以定义 \(S\) 是 \(>1/2+\eps/2\) 的部分,则有 \(\Pr[x\in S]\geq\eps/2\)。
假设我们可以调用一个 \(C\),\(C\) 接受 \(f(x)\) 为输入,能够揭示关于 \(x\) 的信息
其中 \(r_1,\dots,r_m\) 独立均匀随机。则 \((b_j,r_j)\) 可以替代 \((A(y,r_j),r_j)\) 作为一个基线,这样只需考虑 \(A(y,r_j\oplus e_i)\) 作为另一个基线即可,成功概率仍是 \(1/2+\eps/2\)。令 \(\eps'\gets\eps/2\),然后令 \(m=\t{poly}(1/\eps')\) 然后取众数即可。
现在只剩设计模式 \(C\) 了。首先考虑放松 \(r_j\) 的限制,令其仅要求两两独立而不需要完全独立,则有 Pairwise-Independent Sampling Inequality:令 \(X_1,\dots,X_n\) 是两两独立的随机变量,其期望均为 \(\mu\) 且绝对值均不超过 \(1\),则
这个东西长得一眼 Chernoff Bound。证明?先 suppose it right 罢。
因为我们使用了众数投票,所以我们只需要 \(\dfrac1n\sum X_i-(\dfrac12+\eps')\geq-\eps'\) 即可,失败概率不超过 \(\dfrac{1-4\eps'^2}{4m\eps'^2}\leq\dfrac1{m\eps'^2}\)。对每一位使用 union bound 即知需要 \(m\geq\dfrac{2n}{\eps^2}\) 以保证成功概率至少为 \(1/2\)。
现在问题是从哪里搞来这么多 \((b_i,r_i)\) 对。方法很奇妙:随机采样 \(\log m\) 个 \(r'_1,\dots,r'_{\log m}\),然后随机猜对应的 \(b_1',\dots,b_{\log m}'\)。以 \(2^{-\log m}=1/m\) 的概率,所有 \(b'\) 全猜对。那么取 \(r'\) 的所有 subset xorsum 以及对应的 \(\bigoplus b_i'\) 为全体 \((b,r)\) 对。于是:
- 以 \(1/m\) 的概率,全体 \(b'\) 全猜对。
- 此时,生成了 \(2^{\log m}=m\) 个正确的 \((b,r)\) 对,其中全体 \(r\) 两两独立(但显然不完全独立)。
因此,以 \(\eps'/2m=\eps^3/32n\) 的概率,\(B\) 成功对 \(f\) 求逆,与 \(f\) 的单向性相悖。
III.V. Secure Encryption
加密系统 \((\t{Gen,Enc,Dec})\) 被称作是单消息安全 single message secure 的,如果对于一切判别器 n.u.p.p.t \(D\),都存在 negligible 的 \(\eps(\cdot)\),使得对于一切 \(n\in\N,m_0,m_1\in\cur{0,1}^n\) 都有 \(D\) 以至多 \(\eps(n)\) 的概率区分 \(\t{Enc}_k(m_0),\t{Enc}_k(m_1)\) 二者。
注意到这个定义没有考虑到 adversary 可能持有的先验信息。
III.VI. An Encryption Scheme with Short Keys
完美安全加密需要和明文一样长的密钥。但是对于单消息安全系统,不需要这么长的密钥。
一个例子是单纯加倍长度的 PRG \(G(s)\)。令 \(\t{Gen}(1^n):k\gets U_{n/2}\),加密解密均是 xor \(G(k)\)。则这个模式是单消息安全的。
现在假设存在对于无穷多 \(n\) 以 \(1/p(n)\) 区分的 \(m_n^0\) 与 \(m_n^1\)。构建混合分布
- \(H_n^1\) 是 \(m_n^0\) 经过上述加密后的结果 \(\{s\gets\t{Gen}(1^n):m_n^0\oplus G(s)\}\)。
- \(H_n^2\) 是 \(m_n^0\) 单纯 xor 上随机串,即 \(\{r\gets U_n:m_n^0\oplus r\}\)。
- \(H_n^3\) 是 \(m_n^1\) xor 随机串。
- \(H_n^4\) 是 \(m_n^1\) 加密。
则由 hybrid lemma,\(D\) 必然以 \(1/4p(n)\) 区分两个相邻项。
方法是构建 nuppt 机器 \(M^i(x)=m^i\oplus x\)【注意这里 \(m^i\) 就是上述 \(m_n^{0/1}\) 之一】,然后令 \(X_n=G(U_{n/2})\),则由 PRG 假设有 \(X_n\approx U_n\),二者分别作用于 \(M^0\) 则得 \(H^1,H^2\),作用于 \(M^1\) 则得 \(H^3,H^4\),则它们必然不可区分。
而 \(H^2,H^3\) 之间的关系就是一次性密码本,因此必然是有完美安全性的。即得其单消息安全。
III.VII. Multi-message Secure Encryption
单消息安全只发了一条消息。但是我们显然不希望一共只传输一条消息,而是希望就算传输多条消息也无法被破译。
一个加密系统是多消息安全 multi-message secure,如果对于一切多项式 \(q(n)\),都有消息集合 \(m_0,\dots,m_{q(n)}\) 与 \(m'_0,\dots,m'_{q(n)}\)——其中所有元素都是 \(\{0,1\}^{n}\) 串——被一切判别器均以不超过 \(\eps(n)\) 区分。注意,这两个集合加密时须都使用同一个私钥加密,即区分的是分布
- \(\{k\gets\t{Gen}(1^n):\t{Enc}_k(m_0),\dots,\t{Enc}_k(m_{q(n)})\}\)
- \(\{k\gets\t{Gen}(1^n):\t{Enc}_k(m_0'),\dots,\t{Enc}_k(m_{q(n)}')\}\)
前文所述的 \(\t{Enc}_k(m)=m\oplus G(s)\) 的做法并非多消息安全的。
定理:多消息安全的加密系统不可能是确定性或无状态的。
没看懂。并且似乎上课不讲。
III.VIII. Pseudorandom Functions
这里的定义并没有完全参考课本。
一个随机函数 random function 是 \(\{0,1\}^n\to\cur{0,1}\),且 \(f(x)\gets U(\cur{0,1})\)。一个从计算方面理解随机函数的策略是,如果要求 \(f(x)\),则查看 \(f(x)\) 先前是否被求过;如果是,则返回,否则随机为 \(f(x)\) 赋以一个 \(\cur{0,1}\) 值。同理可以定义 \(\cur{0,1}^n\to\cur{0,1}^n\) 的随机函数。
参照课本,定义 \(\t{RF}_n\) 为全体 \(\cur{0,1}^n\to\cur{0,1}^n\) 随机函数,共 \((2^n)^{2^n}\) 个。
一个预言 Turing 机 oracle Turing machine 是普通 Turing 机多了一个称为 oracle 的部分;oracle 可以被 Turing 机调用并做出回复。
两族概率分布 \(\cur{O_n}_n,\cur{O'_n}_n\) 其中 \(O_n,O_n'\) 是 \(\cur{0,1}^{\l_1(n)}\to\cur{0,1}^{\l_2(n)}\) 函数集上的分布,称二者是计算不可区分 computationally indistinguishable 的,如果任何 nuppt 的预言 Turing 机作为判别器,在使用 \(F\gets O_n\) 和 \(F\gets O_n'\) 作为 oracle 时,不可区分。即,存在 negligible 的 \(\eps(n)\) 使得
显然,这个东西就是本章开头介绍东西的扩展。
一个函数族 \(\{f_s:\cur{0,1}^{|s|}\to\cur{0,1}^{|s|}\}_{s\gets\cur{0,1}^*}\) 是伪随机 pseudo-random 的,如果它易于计算且 \(\cur{s\gets\cur{0,1}^n:f_s}_n\approx\cur{F\gets\t{RF}_n:F}_n\)。注意函数族有一个类似 seed 的 \(s\) 概念,这个 seed 不能公开,否则区分 \(f_s\) 和随机函数是简单的:大概率地,随机函数在很多位置上都不等于 \(f_s\)。
定理:如果 PRG 存在,则 PRF 存在。
首先,不妨假设 PRG \(g\) 是长度倍增的 PRG。即,\(g(x)=g_0(x)+g_1(x)\),其中 \(g_0,g_1:\cur{0,1}^n\to\cur{0,1}^n\)。
则令 \(f_s(b_1\dots b_n)=g_{b_n}(g_{b_{n-1}}(\dots(g_{b_1}(s))\dots)))\)。
注意到 \(f_s\) 关于 \(b\) 的指令序列呈一个二叉树结构。因此,长度为 \(n\) 的 \(f_s\) 会是 \(2^n\) 个不同伪随机串上的均匀随机生成器,则必然是伪随机的。
具体而言,我们还是想用 Hybrid Lemma。定义一个比较神奇的 hybrid 效果:令 \(\t{HF}_n^i\) 为把二叉树的前 \(i\) 层全部更换为随机串的结果。则 \(\t{HF}_n^1=\cur{s\gets\cur{0,1}^n:f_s(\cdot)}\),\(\t{HF}_n^n=\t{RF}_n\)。
则如果 \(f_s\) 和 \(\t{HF}_n^1\) 能被区分,则 \(\t{HF}_n^1\) 和 \(\t{HF}_n^n\) 能被 \(\eps\) 区分。则存在 \(\t{HF}_n^i,\t{HF}_n^{i+1}\) 能被 \(\eps/n\) 区分。
\(\t{HF}_n^i\) 与 \(\t{HF}_n^{i+1}\) 的区别在于一个用 \(U_n\) 而一个用 \(g_{0/1}(U_n)\)。
\(D\) 会调用待区分函数 \(p(n)=\poly(n)\) 次作为 oracle。于是定义 \(\t{HHF}_n^j\) 表示前 \(j\) 次询问使用 \(\t{HF}_n^i\)、之后使用 \(\t{HF}_n^{i+1}\) 的混合分布。因此存在某个 \(\t{HHF}_n^j\) 与 \(\t{HHF}_n^{j+1}\) 被 \(\eps/(np(n))\) 区分。这两个之间只差一次询问,因此若可区分则违背了 \(g\) PRG 的前提。
III.?. From PRF to Private Key Encryption
这章替代了教科书上某一章。
Chosen Plain-Text Attack Security (CPA):有两方,Attacker 和 Challenger。其中:
- Challenger 使用 \(\t{Gen}\) sample 一个私钥 \(k\)。
- (Phase I) Attacker 自适应地向 Challenger 多次询问 \(m_i\) 并得到回复 \(\t{Enc}_k(m_i)\)。
- (Challenge Phase) Attacker 提出两个串 \(m_0^*,m_1^*\),Challenger 随机选择 \(b\in\cur{0,1}\) 然后回复 \(\t{Enc}_k(m_b^*)\)。
- (Phase III):与 Phase I 相同。
- Attacker 猜测 \(b\)。
Phase I&III 都执行多项式轮。一个加密是 CPA secure 的,当且仅当任何 nuppt attacker 成功概率不超过 \(\dfrac12+\eps(n)\)。
一个可行的加密模式:
假设 \(m\in\cur{0,1}\)。令 PRF \(F=\cur{F_n=\cur{f_k:\cur{0,1}^n\to\cur{0,1}}_{k\in K_n}}\)。【注意,此处参考的是讲义定义】。\(\t{Gen}\) 从 \(K_n\) 中随机生成 key。\(\t{Enc}_k(m,r)=c_1+c_2\),其中 \(c_1=m\oplus f_k(r),c_2=r,r\gets\cur{0,1}^n\)。
则我们希望证明 \(\t{Enc}_k(0)\approx\t{Enc}_k(1)\)。
事实上,有
\(1\) 同理。这是因为 \(f_k\) 是 PRF,所以 \(f_k\approx F\) 其中 \(F\) 是真随机函数,而 \((0\oplus R,r)\) 显然与 \((1\oplus R,r)\) 不可区分,于是即有 \(\t{Enc}_k(0)\approx\t{Enc}_k(1)\)。
III.X. Public Key Encryption
之前用的都是私钥加密。那公钥又如何呢?
公钥加密的模式是除了公钥以外,个人还有各自的加密私钥 \(pk\) 和一个解密私钥 \(sk\)。即 \((\t{Gen,Enc,Dec})\) 三元组:
-
\(\t{Gen}\) 生成 \((pk,sk)\) 二元组。
-
\(\t{Enc}_{pk}(m)\) 给出密文 \(c\)。
-
\(\t{Dec}_{sk}(c)\) 给出明文 \(m\) 或者特殊记号 \(\perp\) 表示该密文不可解。
-
存在一个多项式算法 \(M\),接受 \((1^n,i)\) 给出第 \(i\) 条(如果其存在的话)长度为 \(n\) 的消息。即,\(M\) 扮演一个待发送信息列表的角色。
-
对于一切 \(n\in\N,m\in\cur{0,1}^n\),都有
\[\Pr[(pk,sk)\gets\t{Gen}(1^n):\t{Dec}_{sk}(\t{Enc}_{pk}(m))=m]=1 \]
一个安全公钥系统是以下两分布以至多 \(\eps(n)\) 被区分的系统:
- \(\cur{(pk,sk)\gets\t{Gen}(1^n):(pk,\t{Enc}_{pk}(m_0))}\)
- \(\cur{(pk,sk)\gets\t{Gen}(1^n):(pk,\t{Enc}_{pk}(m_1))}\)
公钥系统下不存在完美安全性,因为 adversary 可以对一切明文尝试用一切 \(pk\) 加密并与密文对比。同时,确定性加密方法也必然不存在,因为 \(pk\) 其实是对 adversary 公开的(这就是公钥的含义),adversary 只需原样加密一遍即可辨别。
CPA security 也可以被关于公钥系统定义。
- Challenger 生成 \((pk,sk)\)。
- Adversary 生成 \(m_0,m_1\) 并提问。
- Challenger 随机加密二者之一并返回。
- 猜测到底是哪个。【这不就是之前那个东西的算法化描述么!】
陷门函数集看起来是一个好选择,只需要让其不那么确定性即可。考虑一个陷门函数和难题预测的组合模式:令 \(\cur{f_i}\) 为一个陷门排列集。则:
- \(\t{Gen}(1^n)\) sample \((f_i,f_i^{-1})\)(后者使用陷门信息实现),然后回复的 \((pk,sk)\) 对为 \(((f_i,b_i),f_i^{-1})\),其中 \(b_i\) 是关于 \(f_i\) 的难题预测。
- \(\t{Enc}_{pk}(m)\):sample \(r\gets\cur{0,1}^n\) 然后输出 \((f_i(r),b_i(r)\oplus m)\)。
- \(\t{Dec}_{pk}(c_1,c_2)\):使用 \(f_i^{-1}\) 逆向 \(c_1\) 得到 \(r\),然后 \(m\gets b_i(r)\oplus c_2\)。
假设存在 \(\t{Enc}_{pk}(0),\t{Enc}_{pk}(1)\) 的 \(1/p(n)\) 判别器,即存在 \(A\) 满足
\[\Pr[m\gets\cur{0,1}:D(pk,\t{Enc}_{pk}(m))=m] \\>\dfrac12+\dfrac1{2p(n)} \]则构建 \(A'\) 预测 hardcore bit:对于输入 \((pk,y)\),任选一个 \(c\gets\cur{0,1}\),令 \(m\gets A(pk,(y,c))\) 并输出 \(c\oplus m\)。
接下来的推导是 trivial 的。
III.XI. El-Gamal Public Key Encryption scheme
Decisional Diffie-Hellman (DDH) 假设声称,以下两个集合不可区分:
- \(\cur{p\gets\ti\Pi_n,y\gets\t{Gen}_q,a,b\gets\Z_q:p,y,y^a,y^b,y^{ab}}_n\)。
- \(\cur{p\gets\ti\Pi_n,y\gets\t{Gen}_q,a,b,z\gets\Z_q:p,y,y^a,y^b,y^z}_n\)
其中,\(\ti\Pi_n\) 是特殊质数集合 \(\cur{p\mid p\in\Pi_n,p=2q+1,q\in\Pi_{n-1}}\),即可以写成质数 \(q\) 的 \(2q+1\) 的质数,被称作安全素数。对应的 \(q\) 则被称作 Sophie Germain 素数。选取这些东西的意义在于:
- \(\Z^*_p\) 的阶是 \(2q\)。由 Cauchy 定理其必然存在 \(q\) 阶子群,这个子群必然是唯一的,即为全体二次剩余。而其必然是循环群。因此这个群的生成元容易找到:任意选择 \(\Z^*_p\) 中一个元素,将其平方,即得生成元。定义式中的 \(\t{Gen}_q\) 即描述了这一过程。
- 一个 tuple \((p,y,g,h,f)\) 是 DDH tuple 如果它满足 \((p,y,y^a,y^b,y^{ab})\) 的关系。
- DDH assumption 依赖于离散对数假设:若离散对数可计算则 DDH tuple 必然易于判定。
El-Gamal 安全公钥加密:
- \(\t{Gen}(1^n)\):选择 \(n\) 位安全素数 \(p=2q+1\),选择随机 \(\Z_p\) 元素 \(g\) 并计算 \(h\gets g^2\bmod p\),选择 \(a\in\Z_q\),然后 \(pk\gets(p,h,h^a\bmod p)\),\(sk\gets(p,h,a)\)。
- \(\t{Enc}_{pk}(m)\):选择 \(b\in\Z_q\),输出 \((h^b,h^{ab}\cdot m\bmod p)\)。
- \(\t{Dec}_{sk}(c_1,c_2)\):\(m\gets c_2/c_1^a\bmod p\)。
V. Authentication
V.III. Digital Signature Schemes
一个数字签名 Digital Signature 由三元组 \((\t{Gen,Sign,Ver})\) 构成,满足:
- \(\t{Gen}(1^n)\to(sk,vk)\);
- \(\t{Sign}(sk,m)\to\sigma\);
- \(\t{Ver}(vk,m,\sigma)=1/0(\text{valid/invalid})\)。
正确性:密文被判为 valid 的概率 overwhelming。
安全性:一切 adversary 均在 Forgery Game 中胜率 negligible。Forgery Game 是如下的模式:
- Challenger 生成 \((sk,vk)\) 对,给 Adversary 提供 \(vk\)。
- 在 Query Phase,Adversary 多次询问 \(m_i\) 并得到 \(\sigma_i=\t{Sign}(sk,m_i)\)。
- 在 Forgery Phase,Adversary 伪造一对 \((m^*,\sigma^*)\),其中 \(m^*\) 须未在之前出现过,且有 \(\t{Ver}(m^*,\sigma^*)=1\)。
Forgery Game 也可以不使用 Game 的方式定义(即课本策略):
不过显然,两者等价。
V.IV. A One-Time Signature Scheme for \(\{0,1\}^n\)
建立一个一次性(Adv 只能询问一次)的 DS。
假设我们有一个 OWF \(f\)。则:
其中,\(x_0^{1\sim n}\) 和 \(x_1^{1\sim n}\) 都是随机生成的 \(n\) 位串。
\(\t{Sign}\) 对于输入的 \(m\in\cur{0,1}^n\),使用 \(m\) 的第 \(i\) 位决定从 \(x_0^i\) 还是从 \(x_1^i\) 中选择作为 \(\sigma_i\)。即,\(\sigma_i=x^i_{m_i}\),然后 \(\sigma=(\sigma_1,\dots,\sigma_n)\)。
\(\t{Ver}\) 即需检测是否有 \(f(\sigma_i)=f(x^i_{m_i})\) 即可。
这显然是单次安全的,因为伪造的 \(m^*\) 必然在某一位上未问过,则这即相当于在逆向一个随机的 \(x^i\),而这是不可能的。
太感性了!理性一点。
假设我们有一个这玩意的一次性 Adversary \(A\),则造一个用它来逆向 \(f^{-1}(y)\) 的 adv \(B\)。
首先,随机一组 \(\cur{x_{0/1}^{1\sim n}}\),然后把其中随机一个位置替换成 \(y\)(因为是随机的,所以随机到 \(y\) 也很正常对吧),然后与 \(A\) 进行一次性交互。如果 \(A\) 在交互中寻求 \(y\) 的逆,则直接停机(\(B\) 不知道 \(y\) 的逆),否则等待 \(A\) 给出 \(m^*,\sigma^*\) 后,验证是否有 \(m^*\) 伪造了 \(y\) 的逆,如果是的话,则返回伪造的逆。
计算概率。首先,因为 \(y\) 是一个随机 \(x\) 在 \(f\) 下的像,而 \(vk\) 中其它的 \(f(x_{0/1}^{1\sim n})\) 同样是随机 \(x\) 在 \(f\) 下的像,所以 \(A\) 完全无法预料哪个位置被替换了,所以没有寻求 \(y\) 的逆的概率就是 \(1/2\)。同理,\(B\) 随到 \(A\) 给出的伪造位的概率至少是 \(1/n\),因此总概率至少为 \(\eps/2n\)。
V.V. Collision-Resistant Hash Functions
为了达到多消息安全的 DS,可以使用 Hash。只需要对明文 \(m\) 过一层 Hash 函数,对 \(h(m)\) 进行 DS,则就算 adversary 可以伪造出 DS 下的串 \(y\) 及其对应的签名 \(\sigma\),也是难以寻找到 \(y\) 的原像的。
为了达到这个效果,可以定义抗碰撞散列函数 Collision Resistant Hash Function 为函数族 \(H=\cur{h_i:D_i\to R_i}_{i\in I}\):
- 易采样:存在 \(\t{Gen}(1^n)\to i\)。
- 压缩性:\(|R_i|<|D_i|\)。(这个很重要,不然直接映到自己即满足如下的几个条件)
- 易求值:对于 \(x,i\) 容易计算 \(h_i(x)\)。
- 抗碰撞:\(i\gets\t{Gen}(1^i),x,x'\gets A(1^n,i):h_i(x)=h_i(x')\land x\neq x'\) negligible。
不过,此处定义的压缩性很弱,因为它甚至不一定要求压缩 1-bit(它可以仅让集合大小缩一个常数,这个很没用)。因此,为了实用性,我们希望至少有折半压缩,即 \(|R_i|\leq|D_i|/2\)。这样的 CRHF 必然是 weak OWF。
目前不存在 blackbox 的从任意 OWF 到 CRHF 的构造。尽管如此,与 PKE 不同,CRHF 被认为可以是 structureless 的。
使用 DL 搓一个 one-bit shrinking 的 CRHF 出来。
- \(\t{Gen}(1^n)\to(g,p,y)\),其中 \(p\) 是 \(n\)-bit 质数,\(g\) 是 \(\Z^*_p\) 的生成元,\(y\) 是其中的随机元。
- \(h_{p,g,y}(x,b)=y^bg^x\bmod p\),其中 \(b\) 是一个 bit。
首先,这个确实是 one-bit shrinking 的,因为 \(b\) 的位没掉了。此外,其是抗碰撞的,因为如果有 \(h(x,b)=h(x',b')\),即 \(y^bg^x=y^{b'}g^{x'}\),则必须有 \(b=b'\)(否则则推出 \(x=x'\)),进而有 \(y^{b-b'}=g^{x'-x}\),可以求出 \(y\) 的离散对数了。
正式的描述应该把离散对数的 adversary 接入 \(h\) 的 adversary 接口。
同理,可以用 Factoring 搓 CRHF:
- \(h_{N,y}(x,b)=y^bx^2\bmod N\)。注意为避免 trivial attack 的 \(x'=-x\),需要限制定义域在 \(\Z_N^*\) 的前半部分。
这玩意的正确性很好玩:当 \(y\) 是二次剩余时,adv 可能会给你返回 \((x,b=0)\) 和 \((x',b‘=1)\),这样就有 \(y=(x/x')^2\),就破解了 \(y\) 的二次剩余了。另一方面,无论 \(y\) 是不是二次剩余,adv 都可能给你返回 \(b=b'\),这样就有 \((x+x')(x-x')=0\),就破解了 \(N\) 的 factoring 了。鉴于二次剩余和质因数分解等难,可以认为这个东西是 base 在 Factoring 上。
假如有 one-bit shrinking CRHF,可以用来构造 multiple-bit shrinking,但是具体方法课本上没讲。可以重复多项式次,达到 polynomial-bit shrinking。
令将 \(n\) 位串压缩至 \(p(n)-1\) 位,构造 \(\t{Gen}'(1^n)\to(\t{Gen}(1^n),\dots,\t{Gen}(1^{p(n)}))\),然后取 \(f'_{i_n,\dots,i_{p(n)}}(x)=f_{i_{p(n)}}\circ\dots\circ f_{i_n}(x)\)。
倘若有 \(\t{Adv}(1^n,i_n,\dots,i_{p(n)})\to x,y\),则考虑如下分布:
- \(x_n,y_n\gets\t{Adv}\);
- \(x_{n-1},y_{n-1}\gets f_{i_n}(x_n),f_{i_n}(y_n)\);
- ……
- \(x_{p(n)-1},y_{p(n)-1}\gets f_{i_{p(n)}}(x_{p(n)}),f_{i_{p(n)}}(y_{p(n)})\)。
令 \(p_j=\Pr[x_j=y_j]\),则因为前一项相等则后一项必然相等,所以有 \(p_n\leq p_{n-1}\leq\dots\leq p_{p(n)-1}\)。同时,有 \(p_{p(n)-1}-p_n=\delta(n)\),于是在 \([n,p(n)]\) 中必然存在一个 \(j_n\) 满足 \(p_{j_n-1}-p_{j_n}\geq\delta(n)/(n-p(n))\)。我们需要 \(n\) 是关于 \(p(n)\) 的多项式,这样 \(\delta(n)/(n-p(n))\) 就是关于 \(j_n\) noticable 的部分,于是存在发散数列 \(\cur{j_n}\) 使得存在 adv 对所有 \(j_n\) 以 noticable 可构造碰撞,违背了原函数的 CRHF 性质。
V.VI. A One-Time Digital Signature Scheme for \(\{0,1\}^*\)
如果存在 \(\cur{0,1}^*\to\cur{0,1}^n\) 的 CRHF 且存在 OWF,则存在单次安全的 DS。这种模式被称作 hash-and-sign 模式。
具体而言,令我们有一个对 \(\cur{0,1}^n\) 有效的基础单次安全 DS 是 \((\t{Gen}_\t{Sig},\t{Sign},\t{Ver})\) ,一个 \(\t{Gen}_\t{CRHF}\) 的 CRHF 用于压缩长度,则考虑如下的模式:
- \(\t{Gen}'(1^n)\):从 \(\t{Gen}(1^n)\) 中采样 \((sk,vk)\),从 \(\t{Gen}_\t{CRHF}(1^n)\) 中采样 \(i\),输出 \(sk'=(sk,i),vk'=(vk,i)\)。
- \(\t{Sign}'(sk',m)\):输出 \(\t{Sign}(sk,h_i(m))\)。
- \(\t{Ver}'(vk',m,\sigma)\):验证 \(\t{Ver}(vk,h_i(m),\sigma)\)。
假设存在单次询问 \((m,\sigma)\) 后伪造 \((m',\sigma')\) 的 adv',则它有两种可能:
- 造出了 \(h_i(m')=h_i(m)\),但是由 CRHF 性,不可能。
- 否则,那就存在一个原始 DS 的 adv,它调用 adv',得到 \(m\) 后,提问 \(h_i(m)\) 并得到 \(\sigma\) 然后返回给 adv',则 adv' 会返回符合要求的伪造。
V.VIII. Constructing Efficient Digital Signature
考虑如下由 Trapdoor OWP 构建的 DS:
- \(\t{Gen}(1^n)\):生成 index \(i\) 作为 \(vk\) 和 trapdoor \(t\) 作为 \(sk\)。
- \(\t{Sign}(sk,m)\):使用 \(t\) 求 \(f^{-1}_i(m)\)。
- \(\t{Ver}(vk,m,\sigma)\):使用 \(i\) 验证是否有 \(m=f_i(\sigma)\)。
这个 DS 错到离谱,因为 adv 可以自己随便选一个 \(\sigma\) 然后令 \(m=f_i(\sigma)\)。此外,在具有 homomorphic 性质的系统如 RSA 中,一旦得知 \(\sigma_1=m_1^d\bmod n,\sigma_2=m_2^d\bmod n\),可以很轻松构造出 \(\sigma_1\sigma_2=m_1^dm_2^d\bmod n\)。
解决方案是让 adv 只有随机的访问权限,即把 \(m\) 过一个 Hash Function 后再使用上述策略,这就是为什么我们会使用 Random Oracle:它就是理想中的随机化方案。但是不能用 PRF 换掉 RO,因为 verify 的时候必须要公布 PRF 的 key 以方便 verifier 验证,而 PRF 一旦暴露 key 就不再是 PRF 了。实际应用中,SHA256 是一个好的 Hash Function。
INF. Conclusion
如果寻求更狂野的体验,可以参阅 I3Chic,这是本人记录的笔记,上面有很多奇怪的内容,但是请注意甄别正确性。
如果寻求更精简的体验,可以参阅 わかれ鍵の、その謎へ,是本人携带入考场的 cheatsheet。

浙公网安备 33010602011771号