密码~scheme 使用 encryptor
I. Introduction
I.I. Classical Cryptography: Hidden Writing
AB 想要发送信息 plaintext。但是有监听者 adversary E。如何对敌?
答曰:如果 AB 能事先商量一个私钥 kk,A 用 kk 加密 incrypt 一段文字,把密文 ciphertext 发送给 B,然后 B 再用 kk 解密 decrypt 即可。
(Gen,Enc,Dec)(Gen,Enc,Dec) 三元组描述了一个私钥加密系统 private-key encryption scheme。其中:
- GenGen 是私钥的概率密度分布。
- EnckEnck 对于明文给出对应的密文。
- DeckDeck 对于密文给出对应的明文。
- 对于所有明文 mm,需要保证 Pr[k←Gen:Deck(Enck(m))=m]=1Pr[k←Gen:Deck(Enck(m))=m]=1
I.II. Modern Cryptography: Provable Security
安全双方计算 secure two-party computation 对于两个私有输入 a,ba,b 在不公开二者的前提下,对于公开函数 ff 计算 f(a,b)f(a,b)。同理有安全多方计算 secure multi-party computation。
例:一个与门可以被如下构建:
有一个
0
。如果 aa 是 11,在其左侧放置10
,否则放置01
;如果 bb 是 11,右侧置01
反之10
。之后双方各自随机 rotate 整个串,然后 check 有无连续三个0
。只要双方有一个人执行了纯随机的 rotate 操作,那么最终呈现的结果就是纯随机的。
I.III. Shannon's Treatment of Provable Secrecy
Shannon 安全性 Shannon Secrecy:对于一些先验的明文信息,监听者不能通过阅读密文来得知额外的明文信息。即,对于明文空间上的分布 DD,应保证对于一切明文 m′m′ 和密文 cc,都满足
即,知道密文并不能帮助确定明文。
完美安全性 Perfect Secrecy:对于一切 m1,m2,都满足
即,在不知道密钥时,一切明文加密后的概率分布都一致。
定理:Shannon 安全性与完美安全性等价。
为方便,定义 Prk,Prm,Prk,m 表示显然的含义。
⟸:
Prk,m[m=m′∣Enck(m)=c]=Prk,m[m=m′∧Enck(m′)=c]Prk,m[Enck(m)=c]=Prk[Enck(m′)]Prm[m=m′]Prk,m[Enck(m)=c]我们需要证明
Prk[Enck(m′)=c]=Prk,m[Enck(m)=c]这是因为由定义,有
Prk,m[Enck(m)=c]=∑m″Prm[m=m″]Prk[Enck(m″)=c]而因为完美安全性,其等于 ∑m″Prm[m=m″]Prk[Enck(m′)=c],而这正好等于 Prk[Enck(m′)=c]。
于是我们得到
Prk,m[m=m′∣Enck(m)=c]=Prm[m=m′]即为 Shannon 安全性定义。
反过来证明也类似,取 m 的分布 D 为 {m1,m2} 上的均匀分布即可。
一次性密码本 One Time Pad 是一种 Shannon 安全的加密。其明文与密钥同是长度为 n 的零一串,加密解密方法同为用文本异或密钥。易知其满足需求。
这个加密方法似乎不是很牛,因为密钥和明文一样长。事实上,Shannon 定理 表明,Shannon 安全的加密必须保证密钥集合 K 大小不小于文本集合 M 大小。
对于 m1∈M,k∈K,令 c←Enck(m1),令 Dec(c)={Deck′(c)∣k′∈K},即所有可能解读方案。如果 |K|<|M|,则存在不能从 c 解读得到的 m2,此时它们的加密集合不一致。于是其不可能 Shannon 安全。
Shannon 定理表明,一切 |K|<|M| 的加密系统都存在攻击 attack。假如存在以上的 m1,m2,则攻击者可以通过密文来以大于 1/2 的概率区分 m1,m2,即对于密文 c,判定 m2 是否属于 Dec(c),是则随机返回,否则只返回 m1。
虽然存在攻击,但是注意到判定 m2 是否属于 Dec(c) 的过程,如果没有更好的算法,是需要 |K| 的时间复杂度的。但是注意到 |K| 常常是指数范围的,因此实际应用的效果是可行的。
II. Computational Hardness
II.I. Efficient Computation and Efficient Adversaries
算法 algorithm:输入输出都为 01 串的 Turing 机。
运行时间是多项式级别的算法就被认为是高效 efficient 的。易知:这个定义在一切 Turing 完备机上等效。
Time-Hierarchy 定理:存在 t(n) 能解决但 t(n)/logt(n) 不能解决的问题。推论是,存在指数能解决但多项式不能解决的问题。
随机多项式算法 Probablistic Polynomial Time (PPT) 在 Turing 机上的描述是,普通 Turing 机多了一条所有位置均纯随机的纸带作为输入。等价描述是,可以调用一个抛硬币方法的 Turing 机。
一个 PPT 的运行时间被定义为:T(n) 满足对于一切 01 串 x 和随机纸带,PPT 在 T(|x|) 时间内终止。PPT 输出一个函数 f:{0,1}∗→{0,1}∗,如果对于所有输入 x,对于所有随机纸带,输出 f(x) 的概率均为 1。这意味着,我们不能容忍那些小概率失败的算法,因此条件很强。但是我们为方便,假定 随机算法总是输出正确答案。
这些算法被称作概率多项式 Turing 机 probablistic polynomial-time Turing machine (p.p.t),或高效随机算法 efficient randomized algorithm。
一个高效私钥加密系统 efficient private-key encryption scheme 是 (Gen,Enc,Dec) 三元组,其中:
- Gen 需要一个 n 作为输入。即,对于每个长度 n,其提供一个私钥采样方案。
- Enck(m) 是一个 p.p.t 通过给定 k 和长度恰为 n 的明文 m 来给定密文。
- Deck(c) 同理是 p.p.t。
- 需要保证对于一切 n,m,都有 Pr[k←Gen(1n):Deck(Enck(m))=m]=1。
这里的 1n 是有必要提供作为输入的,它的效果是为更长的 m 提供更安全的加密方法,同时作为 p.p.t 的运行时间参数使用。因此下文不再使用私钥空间 K 和密文空间 M,而是默认它们都是相应长度的 01 串。
同理,监听者的算法也可以与输入长度相关,即一个非均匀 PPT non-uniform p.p.t (n.u. p.p.t),为一系列模型 A1,…,满足存在多项式 d 使得 |Ai|≤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}∗→{0,1}∗ 函数。
- 逆向 p.p.t 的定义为,对于每一个值域中元素,都可以找到某一个对应的定义域中元素。不要求找到所有的原像。
假设 NP 不等于 BPP (存在至少有 2/3 概率成功的概率 Turing 机),则必然存在这样的单向函数。事实上,NP vs BPP 与存在单向函数二者等价。但是有很多病态单向函数,即虽然绝大多数输入都可逆,但总存在无限多不可逆输入(如果有限则可以特判)的函数。我们不喜欢这样的病态函数,并且尝试寻找绝大多数输入不可逆的单向函数。
我们定义一个 negligible 的函数 ϵ(n) 是 sub-inv-poly 的,即对于一切 c>0,都满足 ϵ(n)=o(n−c)。
那么,一个函数 f(x) 是强单向函数 strong one-way function,如果对于一切逆向 p.p.t A,均满足
也即,仅对于 negligible 的输入可逆。称一个函数是 (t,s,ϵ)-单向,如果不存在大小不超过 s(n) 的逆向 A,使得其复杂度不超过 t(n)、成功概率不超过 ϵ(n)。
弱单向函数 weak one-way function 则是对于 non-negligible 的输入不可逆,即存在多项式级别的 q(n) 使得上述 negligible 的 ϵ(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) 输入有效。
无穷集 N2 的 3/4 是什么意思?事实上,这应该回到关于 n 的式子中,即
Pr[x←{0,1}n;y←f(x):f(A(1n,y))=y]≤34这个式子中带上了 n,因此 x 是有限集。
因此这种求逆方式对于 non-negligible 的输入失效。
鉴于单向函数的存在依赖于 NP vs BPP,因此存在弱单向函数的命题至今也只能是一个猜想。建立在 NP vs BPP 上,可以得到如下假设:
令 Πn 为严格小于 2n 的全体质数集合,则 质因数分解假设 声称:
对于一切逆向 A,都存在 negligible 的 ϵ(n) 满足
即,不存在有效的能为两个质数乘积找到质因数的方式。
应用这个假设做出一些推理:
-
定理:π(n)>n2logn。其中 π(n) 为不超过 n 的质数数目。
首先,令 X=(2nn),则 X>2n 并且所有质因数不超过 2n。对 X 分解,令 vp(X) 为质因数 p 的次数,则取 ln 得到∑p≤2nvp(X)logp>n于是只需要 bound vp(X) 即可。因为 n! 中含 p 的次数可以写成 ∑i≥1⌊n/pi⌋,所以有
vp(X)=∑i≥1⌊2n/pi⌋−2⌊n/pi⌋因为每一项至多贡献 1,而当 pi>2n 时即不再产生贡献,所以得到 vp(X)≤log2n/logp。
代入即得 π(2n)log2n>n。于是 π(n)>n2logn。 -
定理:如果质因数分解假设成立,那么前述 fmult 是一个弱单向函数。
这是因为,当 x,y 都是 2n 范围(此时输入可以看作长度为 2n 的零一串)时,质数密度 π(2n)/2n>1/2n,于是以 non-negligible (准确地说,1/4n2) 的概率取到两个质数,而由假设此时任意函数都 negligible 地可以分解。综上,fmult 不可逆的概率 non-negligible,因此其弱单向。
II.IV. Hardness Amplification
一个好消息是,使用弱单向可以构造强单向。假如存在一个弱单向的 f,则存在多项式级别的函数 m(n),使得对于长度为 n 的输入,重复 m(n) 次得到的函数是强单向的。即,若 f:{0,1}∗→{0,1}∗ 弱单向,则 f′:({0,1}n)m(n)→({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←f(y),并使用 (u,v) 喂给 A′,然后拿输出的第一项返回 A。则其成功概率与 A′ 成功概率相同。于是规约成功。
现在,考虑 mn=4n3 个 fmult 的并行,即 f′:({0,1}2n)mn→({0,1}2n)mn。单个随机时,均为质数的概率至少为 1/4n2;而 mn 次时,所有的对都存在非质数的概率不超过
这意味着,在质因数分解假设下,f′ 是强单向的。
同理,使用弱单向拼强单向的做法也类似。
II.V. Collections of One-Way Functions
单向函数集 collection of OWFs 是一个函数族 F={fi:Di→Ri}i∈I,满足如下条件:
-
可以从中 sample 一个 OWF。即,存在 p.p.t Gen(1n) 给出一个 i∈I 的下标。
-
对于一个 OWF,存在 p.p.t 从 Di 中独立均匀随机 sample 元素。
-
存在 p.p.t 计算 fi(x)。
-
难以求逆,即对于一切 A 都有
Pr[i←Gen,x←Di,y←fi(x):f(A(1n,i,y))=y]≤ϵ(n)
存在单向函数集当且仅当存在强单向函数。
反推是容易的,只需要令 I={0} 即可。这是错误的。应该令 I=N 然后 Di={0,1}n,fi=f。原因是因为单个 fi 的定义域是无限的。
但是正推呢?其中的某一个具体的 fi 不一定是强单向的(因为可以让 Gen 随着 n 变大,某一个 fi 的选中概率不断变小)。解决方案是把 (i,fi(x)) 二元组看作整体,定义 g(r1,r2) 是用 r1 bit 作为 Gen 的输入生成 i,用 r2 bit 从 Di 中 sample x,然后算 (i,fi(x)),则这个整体的 g 是强单向的。
II.VI. Basic Computational Number Theory
经典的 exgcd 的执行次数可以被严格 bound:对于 0≤b<a<2n,exgcd 执行不超过 2n 次。
快速幂 ax(modn) 的朴素复杂度是 logx⋅(logn)2。
Miller-Rabin:执行 t 轮检验,以 1−2−t 的概率判定成功合数。
随机生成 n-位质数:不断随机串直到其经 MR 验证为质数。因为质数密度,该算法是高效(多项式)的。
II.VII. Factoring-based Collection of OWF
现在,我们可以构建一个好的 OWF collection:令 fi 为随机两个 i/2 位质数,求积即可。显然,sample OWF、独立均匀 sample 元素、求积这几件事都可以实现,分解又是困难的。
II.VIII. Discrete Logarithm-based Collection
离散对数:对于一个循环群,对其中的某个元素求逆。
离散对数假设:对于所有 adversary,其成功概率均不超过 ϵ(n)。
在此基础上,可以建立 DL collection,即
II.IX. RSA Collection
RSA 假设:对于满足 N=pq∣p,q∈Πn、gcd(e,φ(N))=1、y∈Z∗N 的三元组 (N,e,y),求出 xe≡y(modN) 的 adversary 是 negligible 的。即,
也即,RSA 断言计算随机元素的 e 次根是困难的。
RSA collection 中 I={(N,e)∣N=p⋅qs.t.p,q∈Πn∧e∈Z∗Φ(N)},Di=Ri=Z∗N,fN,e(x)=xemodN。
并且,fN,e 是 Z∗N 上的一个 permutation。
II.X. One-way Permutations
单向函数集 F 是单向排列集 collection of one-way permutations,如果其中所有单向函数都是排列。
RSA 假设强于质因数分解假设。具体而言,假设存在以多项式倒数 1/p(n) 概率将 N=pq 分解的 adversary A,则存在 A′ 以 1/p(n) 概率对 fN,e 求逆。这是因为,当已知 N 的分解后,φ(N)=(p−1)(q−1) 是可以求出的,于是 e 在 Z∗φ(N) 上的逆 e−1 可以被求出,即得 fN,e 的逆排列。
特别地,反向结果目前是未知的,即目前不能确定分解假设是否推出 RSA 假设。
II.XI. Trapdoor Permutations
如果 N 的分解未知(更准确地说,如果 φ(N) 未知),则对 fN,e 求逆是困难的;但是,只要知道其分解,求逆即变成易事了。因此,N 的分解是一个陷门 trapdoor,知道其即可允许 fN,e 被逆向。
陷门排列集 collection of trapdoor permutations 是 F={fi:Di→Ri}i∈I 满足:
- fi 是排列。
- 容易关于陷门信息采样函数。即,存在 p.p.t Gen 满足 (i,t)←Gen(1n)。其中,i∈I,而 t 是陷门信息。
- 易于从定义于中采样、易于求值。
- 无陷门时难以求逆,但有陷门时容易求逆(即,给定 (i,t) 和 y∈Ri,存在 p.p.t 计算 f−1(y))。
现在,对 RSA collection 中的 index (N,e),令其对应的陷门信息 d 是满足 e⋅d≡1(modφ(N)) 的那个 d(使用 exgcd 求出),则 RSA 是陷门排列集。
II.XII. Rabin collection
RSA 的 e 是随机从 Z∗φ(N) 中 sample 的;一个类似的场合是令 e=2,即求平方根。但是注意到因为 N=pq 所以必然有 φ(N)=(p−1)(q−1) 为偶数,因此有 e∉Z∗φ(N),因此这与 RSA 有一定不同。
全体二次剩余元素构成一个裙,记作 QRp={x2modp∣x∈Z∗p}。有 QRp=(p−1)/2。
当 p=3+4k 时,有 (±yk+1)2≡y。
若 a2=y,则 (yk+1)2=a4k+4=a2=y。
当 p=1+4k 时,上述方法不太行,因此使用 Cipolla。
寻找 b 使得 b2−y 非二次剩余。定义虚数 i2=b2−y,则 (b+i)p+1=y,于是 y=((b+i)(p+1)/2)2。
定理:对于 N=pq,x∈Z∗N,令 y,z 分别为 xmodp,xmodq,则 x∈QRN⟺y∈QRp∧z∈QRq。
正向直接取模,反向使用 CRT。
当 N 为质数时,x↦x2(modN) 是二对一映射;当 N=pq 时,其则是四对一映射,这是因为 (±y)(±z) 经过 CRT 回映至四个元素。因此,|QRN|=|Z∗N|/4。
现在,已知 p,q,关于 N 的二次剩余可以被简单计算;但是目前不存在未知 p,q 直接计算二次剩余的高效方法。
Rabin collection:R={fi:Di→Ri}i∈I,
- I={N:N=p⋅q∣p,q∈Πn}
- Di=Z∗N
- Ri=QRN
- fN(x)=x2modN
RSA 假设强于分解假设;但是 rabin collection 与分解假设等效。
假设存在高效求二次剩余的 A(x),其成功概率至少为 1/p(n),那么依以下方法构建高效分解的 A′(x):
- 从 Z∗N 中 sample 一个 x,计算 x2 的一个二次剩余 z。A(x) 会随机返回四个二次剩余中的某一个。既然 x2≡z2,这意味着 (x−z)(x+z)≡0;以 1/2 的概率,z≠x 且 z≠−x,此时 x,z 模 p,q 的结果之一必须相等,这意味着 gcd(x−z,N) 会是 p,q 之一。这个方法的成功概率至少为 1/2p(n)。
反之,如果能高效分解,那么对两个因子分别 Cipolla 然后用 CRT 合并之即可。
通过一些约束,rabin collection 也是可以是一个陷门排列。具体而言,只保留那些 p,q 均模 4 余 3 的 N,然后令 fi 是 QRN→QRN,则可以证明其是排列。
II.XIII. A Universal One Way Function
单向函数仅在 NP-BPP 假设下存在。其它假设(例如分解假设或 RSA 假设)保证了具体的单向函数存在。
现在,仅仅假设存在某个未知单向函数(即 NP-BPP),即可得到某个具体的单向函数 funiv。这个 funiv 虽然是弱单向的,但是由前文,只要有弱单向就可以增强为强单向。
主要思想是,正如 circuit-SAT 可以模拟一切 validator 一样,我们希望我们的 funiv 可以模拟一切单向函数。对于一个 Turing 机 M 和其输入 x 构成的二元组 y=⟨M,x⟩,令 funiv(y)=M(x)。问题在于,M(x) 不一定能在多项式时间内求解——它甚至不一定会停机。但是这不是什么大问题,因为我们只需要 funiv 是弱单向即可。
我们认为,输入 y 的前 log(|y|) 位铭刻了 Turing 机 M(假设存在一种可以描述 Turing 机的方式 例如 并且这个方式可以通过 padding 来延伸长度),而剩下的位是 M 的输入 x。然后,我们使用 x 在 M 上运行 |y|3 步;如果 M 停机,则返回 M(x) 为 funiv(y);否则返回 ∅。c++
代码
显然,funiv(y) 可在 O(|y|3) 内计算。
假设存在一个强单向函数 g,我们可以构建一个复杂度为 O(n2) 的强单向 g′。构造的方法如下:
假设 g 可以在 nc 内计算。显然,如果 c≤2 则 g 已符合要求。考虑 c>2,则通过强行 padding(令 g′ 的输入 x=⟨a,b⟩【这个符号的意义是 a,b 两串的拼接】;则令 |a|=nc−n,|b|=n,令 g′ 输出为 ⟨a,g′(b)⟩)可以设计 g′,则 g′ 显然是一个能在 O(m2) 内计算的函数,且易知其强单向性。
如果 funiv 并非弱单向,则存在 A 使得其成功概率高于一切多项式 q(n) 引导的 1−1/q(n)。特别地,其在 q(n)=n3 时成立。令 A 成功求逆这个事件为 Invert。
令 Mg 为某个描述最短的描述 g 的机器,则 |Mg| 可以认为是常数。则一个随机 n-bit 串 y=⟨M,x⟩ 当 |M|=log|y|≥|Mg| 时,其以至少 2−logn=1/n 的概率成功描述 g 及其输入。令成功描述这个事件为 PickG。
现在结合二者。则
这就意味着,如果 funiv 并非弱单向,我们可以以 1/n3 的概率对一个强单向求逆,而这是不合法的。因此必有 funiv 是弱单向的。
由此,只要单向函数存在,我们就可以认为 funiv 是单向的。但是显然 funiv 并非一个好的基础假设(正如我们在研究 NPC 性时,不会认为 circuit-SAT 是一个好的基础假设一样)。
如果 fmult 竟是一个基础假设,那会叫人多么惊喜呀!
III. Indistinguishability & Pseudo-Randomness
一次性密码本不是一个很牛的方法,主要是因为私钥要和文本一样长。一个可行的尝试是,从一个短钥 k 开始,使用一个伪随机生成器 pseudo-random generator g 把它延长到需要的长度。
显然,通过伪随机生成器不能达到和真随机一样的效果。但是,考虑到 adversary 的算力有限,我们希望能找到一个在有限算力的 adversary 眼中和真随机没啥区别的伪随机生成器。
这个伪随机生成器需要能通过一切基于统计的检验。这需要引入一些概念。
III.I. Computational Indistinguishability
一个概率分布族 ensemble of probability distributions 是 {Xn}n∈N,其中每个 Xn 均是 {0,1}∗ 上的概率分布。除非特殊说明,否则概率分布族的下标都默认是自然数,此时简记为 {Xn}n。
对于两族概率分布 {Xn},{Yn},二者满足 Xn,Yn 都是 {0,1}ℓ(n) 上的概率分布,其中 ℓ(n) 是多项式。此时,称它们是计算不可区分的 computationally indistinguishable(记作 {Xn}n≈{Yn}n),如果对于一切 n.u.p.p.t D(称作判别器 distinguisher),都存在 negligible 的 ϵ 使得
也即,没有有效判别器能以 non-negligible 的概率区分二者。
称一个判别器以 ϵ 的概率区分某个具体的 Xn,Yn,如果上述概率 >ϵ;称其以 μ(n) 的概率区分两族 {Xn}n,{Yn}n,如果对于所有的 n,上述概率 >μ(n)。
如果两族分布 {Xn},{Yn} 不可区分,则对于一切 n.u.p.p.t M,都有 {M(Xn)},{M(Yn)} 不可区分。
如果 D(⋅) 区分 {M(Xn)} 和 {M(Yn)},那么 D′(⋅)=D(M(⋅)) 区分 {XN},{Yn}。
不可区分性具有传递性——其构成等价类划分 其具有传递性吗?
对的对的。哦不对不对。哦对的对的。对……对吗?
分布族之间是总是具有传递性的,不论传递性中间隔了多少个族,这是因为中继族数目总是有限常数。
然而,单个分布之间是没有传递性的。ϵ-区分重复两次至多有可能变成 2ϵ-区分。
(Hybrid Lemma):对于一个概率分布列 X1,…,Xm,若判别器 D 以 ϵ 区分 X1,Xm,那么由绝对值的三角不等式,其必然以 ϵ/m 区分某个 Xi,Xi+1。
既然没有区分二者的判别器,那么也应不存在能以 1/2+1/poly(n) 预测下一位的预测器。事实上,预测器和判别器是等价的。
prediction lemma:如果存在 μ(n) 的判别器 D,则存在 1/2+μ(n)/2 的预测器 A。
不妨假设 D 在收到 X1n 中元素时,较之收到 X0n 中元素以更高概率输出 1。即,存在无限多个 n 满足
Pr[t←X1n:D(t)=1]−Pr[t←X0n:D(t)=1]>μ(n)这是因为 Pr[1]>Pr[0] 和 Pr[1]<Pr[0] 的 indice 至少有一个是无穷的,搭配可选的 D′=1−D 即可。
则 D 同时也可以被当成一个预测器。具体而言,
Pr[b←{0,1};t←Xbn:D(t)=b]=12(Pr[D(X1n)=1]+Pr[D(X0n)≠1])=12+12(Pr[D(X1n)=1]−Pr[D(X0n)=1])>12+μ(n)
III.II. Pseudo-randomness
令 Un 表示 {0,1}n 上的均匀分布。称一个分布是伪随机 pseudo-random 的,如果它与均匀分布不可区分。
一族概率分布 {Xn}n(其中 Xn 是 {0,1}ℓ(n) 上的分布)被称作伪随机的,如果 {Xn}n≈{Uℓ(n)}n。这个定义等效于其可以通过一切高效的基于统计的测试。
虽然这看上去是难以验证的,但是幸运的是,我们有一些完全 complete 的测试,通过了它就通过了所有测试。
概率分布族 {Xn}n 通过了下一位测试 Next-Bit Test,当且仅当存在 negligible 的 ϵ(n) 满足对于一切 n,对于一切 i∈{0,1,…,ℓ(n)−1},对于一切 n.u.p.p.t Adversary A,都满足
即,对于所有前缀,预测下一位都是困难的。
下一位测试是完全的。
假设存在判别器 D 使得在无限个 n 处满足 Xn 和 Uℓ(n) 区别超过 1/p(n)。现在,定义一个混合分布 hybrid sequence 列是
Hin={x←Xn,y←Uℓ(n):x1∼iyi+1∼ℓ(n)}特别地,有 H0n=Uℓ(n),Hℓ(n)n=Xn。既然 D 以 1/p(n) 区分 H0n 与 Hℓ(n)n,由 hybrid lemma,存在 Hin 与 Hi+1n 被 D 以 1/p(n)ℓ(n) 区分。既然二者唯一的分别在第 i+1 位,这意味着 D 可以在已知前缀 x1∼i,以 1/p(n)ℓ(n) 的概率区分 xi+1 和随机 bit;那么,定义
ˉHin={x←Xn,y←Uℓ(n):x1∼i−1¯xiyi+1∼ℓ(n)}则因为 Hin 可以看作以 1/2 的概率采样 Hi+1n、以 1/2 的概率采样 ˉHi+1n,所以
|Pr[D(Hi+1n)=1]−Pr[D(Hin)=1]|=|Pr[D(Hi+1n)=1]−12Pr[D(Hi+1n,ˉHi+1n)=1]|=12|Pr[D(Hi+1n)=1]−Pr[D(ˉHi+1n)=1]|即 Hin 与 ˉHin 可以以 2/ℓ(n)p(n) 的概率区分。由 prediction lemma,存在 1/2+1/ℓ(n)p(n) 的预测器。
III.III. Pseudo-random generators
一个函数 G:{0,1}∗→{0,1}∗ 是伪随机生成器 Pseudo-Random Generator (PRG),如果:
- (efficiency):可以使用 p.p.t 计算。
- (expansion):|G(x)|>|x|。
- 族 {x←Un:G(x)}n 是伪随机的。
一个可能的 PRG 构造是,令 f 是一个单向排列,则令 G(s)=fn(s)+fn−1(s)+⋯+f(s)+s,其中 + 意味字符串(每个 fn(s) 都是一个 n-bit 01 串)拼接。一个 idea 是预测下一个数等效于逆向 f,但是问题在于 f 作为一个整体是不可逆的,不意味着 f 的每一个 bit 都是不可逆的;这种构造生成了不可预测的数字而非不可预测的 bit。
为什么我们需要单向排列?首先我们需要定义域和值域相同。其次我们需要当 x 随机分布时,f(x) 亦随机。
一个预测 h(x):{0,1}∗→{0,1} 是关于 f(x) 的难题预测 hard-core predicate,如果它可以高效计算且一切 n.u.p.p.t adversary A 均有
即,给定 f(x) 不能帮助计算 h(x)。
给定 N,e,对于 fRSA(x)=xemodN,其相关的一些难题预测的例子如
- LSB(x) 寻求 x 的最低位。
- halfN(x) 寻求判定是否有 0≤x≤N/2。
- 建立在离散对数假设,即 fDL(x)=gx(modp),下的 halfp−1(x)。
难题预测的意义在于其可以协助构建 PRG。这是因为,如果有单向的 f(s) 和关于 f 难题的预测 h(s),则 G(s)=f(s)+h(s) 会是一个 PRG:首先 f(s) 会是一个随机的 n-bit 字符串,因此预测 f(s) 的下一位是困难的。同理,已知 f(s) 预测 h(s) 也由难题预测的定义是困难的。
这个 G(s) 只延长了一位。令 X0=s,然后对于 G(Xi),令其前 n 位构成 Xi+1、最后一位用作 bi+1,则 b1∼ℓ(n) 是一个 ℓ(n) 位的 PRG。
它的等价描述是
\\G^i(x)=b+G^{i-1}(x')&\text{where }x'+b\gets G(x)
然后 G′(x)=Gm(x)。现在如果存在 D 以 1/p(n) 区分 {Um(n)}n 和 {G′(Un)}n,则仍然考虑混合分布 Hin=Um(n)−i+Gi(Un),则存在以 1/p(n)m(n) 被区分的 Hin 和 Hi+1n。有
\\H_n^{i+1}=U_{m-i-1}+b+G^i(x)&\text{where }x+b\gets G(U_n)
构建 nuppt M(y),其效果如下:令 bprev←Um−i−1,b←y1,bnext←Gi(y2∼n+1),返回 bprev+b+bnext。则 M(Un+1)=Hin,M(G(Un))=Hi+1n。由 PRG 性质,有 {Un+1}n≈{G(Un)}n,因此二者同步作用于 M 后的 {Hin}n,{Hi+1n}n 也不可区分。出现矛盾,则不存在判别器 D。
在证明两个混合分布的不可区分性时,此处这种构建 nuppt 的方法是可行的策略之一。
因此,令 h(x) 是单向 f(x) 对应的难题预测,则 G(x)=h(x)+h(f(x))+h(f2(x))+⋯+h(fℓ(n)(x)) 会是一个 PRG。
这只需要知道一个 seed xi=fi(x),就可以无限地延长 PRG 生成的伪随机列。同时,如果有的不是单向的 f(x) 而是单向函数集,则通过维护多个 seed 作为函数集中每个 fi 的 seed 也可以构建 PRG。
Blum-Micali PRG:使用 seed 生成 p,g,x,其中 p 是满足 p=2q+1(q 亦为质数)的质数,g 是 p 的原根,x∈Z∗p。fDL(x)=gxmodp,h(x)=halfp−1(x)。
RSA PRG:N=pq,e∈Z∗φ(N);fRSA(x)=xemodN,h(x)=LSB(x)。
Blum-Blum-Schub:p,qmod4=3,N=pq,x∈QRN;fQR(x)=x2modN,h(x)=LSB(x)。
III.IV. Hard-Core Bits from Any OWF
之前介绍的几个单向函数-难题预测对都没有加以证明。如何针对单向函数寻找对应的难题预测?本节将加以阐述。
比如说,证明 DL 假设下,halfp−1(x) 是 fp,g(x)=gxmodp 的难题预测。现在假设有能以 1/2+1/s(n) 概率预测 halfp−1(x) 的 n.u.p.p.t A,尝试用其实现离散对数。
首先考虑 A 是严格正确的理想态。需求是对 (g,p,y) 三元组求出 gxmodp=y 的 x。令 k←|p|(注意此处的 |p| 指的是 p 作为 01 串的长度),然后令 k 递减(即从最低位向最高位)地确定 x 的每一位。
- 如果 y 是二次剩余,那么将 x 的当前位设成 0,然后将 y 开根。
- 如果 y 非二次剩余,那将 x 的当前位设成 1,然后将 y 除以 p 后开根。【再次强调,质数时的二次剩余是 Cipolla 可求的,Rabin collection 是质数乘积时的二次剩余】
- 但是,开根有正负两个根,选择哪一个?使用 A 给出的 halfp−1 即可判定使用哪个根。
现在问题在于 A 并非严格正确。但可以重复实验并取众数,来无限制地提高其成功概率,即得离散对数的强单向逆。
这个例子使用了 OWF 本身的性质。如何对任何 OWF 求出难题预测?
首先定义 ⟨x,y⟩=∑xiyimod2 的内积。注意,二进制内积的另一种理解方式是,y 的 mask 决定了 x 的哪些位被挑出来算 parity。
那么,如果 f(x) 是一个单向函数(或单向排列),则定义其扩展得到的 g(x,r)=(f(x),r)(须保证 |x|=|r|)则显然 g(x,r) 仍是单向函数(或单向排列)。同时,h(x,r)=⟨x,r⟩ 会是 g(x,r) 的难题预测。
证明以上东西确实是难题预测。即,能以 1/2+1/p(n) 求 A(1n,y,r)=h(x,r) 的 A 可以被用于逆向 f(x),即求出 f(x) 的逆 B。
首先考虑一个过度简化的场合,即 A 总是百分百成功求 h。为什么称其为过度简化?因为此时存在一个过度简单的方法:若要对 y=f(x) 求出 B(y)=f(x),则使用 A(y,ei)——此处 ei 是仅在第 i 位为 1 的串——求出 x 的第 i 位然后合并即可。
现在考虑一个简化的场合:A 成功的概率 ≥3/4+ϵ(n),其中 ϵ(n) 是 1/poly(n)。这时上述做法不再有效:A 不一定能对所有 y 生效;就算其能生效,其也可能在某些特定的 (y,ei) 对上失效。
定义一个实例的 good set
则有 Pr[x∈S]≥ϵ/2。因为否则则有
与假设相悖。
对于这个 good set,我们希望能成功求逆的 r 至少构成一组基,这样就可以用基处的值反推出所有 ei 处的值。实际操作时,可以选择随机一组基……
但是这太蠢了。我们完全可以适当多随一点东西。比如说,当要求 ei 的信息时,可以随机一个 r,然后令 r′=r⊕ei。则以 1/4−ϵ/2 的概率 A(y,r),同理以该概率 A(y,r′) 失败。那么,by union bound,单个 ei 的 guess 就以 1/2−ϵ 的概率失败。
两个都失败,其实 guess 反而会成功。
但是注意到两个 guess 不一定独立(极端场合,两个 guess 永远只有一个会失败),因此就算考虑两个都失败的场合,这里的证明也不能延拓到 A 成功概率是 1/2+ϵ 的场合。
那么重复 poly(1/ϵ) 次取众数即可。现在,对于一个 non-negligible 的集合 S,以高概率其可逆,违背了 f(x) 不可逆的前提。
现在考虑原本场合。仍然可以定义 S 是 >1/2+ϵ/2 的部分,则有 Pr[x∈S]≥ϵ/2。
假设我们可以调用一个 C,C 接受 f(x) 为输入,能够揭示关于 x 的信息
其中 r1,…,rm 独立均匀随机。则 (bj,rj) 可以替代 (A(y,rj),rj) 作为一个基线,这样只需考虑 A(y,rj⊕ei) 作为另一个基线即可,成功概率仍是 1/2+ϵ/2。令 ϵ′←ϵ/2,然后令 m=poly(1/ϵ′) 然后取众数即可。
现在只剩设计模式 C 了。首先考虑放松 rj 的限制,令其仅要求两两独立而不需要完全独立,则有 Pairwise-Independent Sampling Inequality:令 X1,…,Xn 是两两独立的随机变量,其期望均为 μ 且绝对值均不超过 1,则
这个东西长得一眼 Chernoff Bound。证明?先 suppose it right 罢。
因为我们使用了众数投票,所以我们只需要 1n∑Xi−(12+ϵ′)≥−ϵ′ 即可,失败概率不超过 1−4ϵ′24mϵ′2≤1mϵ′2。对每一位使用 union bound 即知需要 m≥2nϵ2 以保证成功概率至少为 1/2。
现在问题是从哪里搞来这么多 (bi,ri) 对。方法很奇妙:随机采样 logm 个 r′1,…,r′logm,然后随机猜对应的 b′1,…,b′logm。以 2−logm=1/m 的概率,所有 b′ 全猜对。那么取 r′ 的所有 subset xorsum 以及对应的 ⨁b′i 为全体 (b,r) 对。于是:
- 以 1/m 的概率,全体 b′ 全猜对。
- 此时,生成了 2logm=m 个正确的 (b,r) 对,其中全体 r 两两独立(但显然不完全独立)。
因此,以 ϵ′/2m=ϵ3/32n 的概率,B 成功对 f 求逆,与 f 的单向性相悖。
III.V. Secure Encryption
加密系统 (Gen,Enc,Dec) 被称作是单消息安全 single message secure 的,如果对于一切判别器 n.u.p.p.t D,都存在 negligible 的 ϵ(⋅),使得对于一切 n∈N,m0,m1∈{0,1}n 都有 D 以至多 ϵ(n) 的概率区分 Enck(m0),Enck(m1) 二者。
注意到这个定义没有考虑到 adversary 可能持有的先验信息。
III.VI. An Encryption Scheme with Short Keys
完美安全加密需要和明文一样长的密钥。但是对于单消息安全系统,不需要这么长的密钥。
一个例子是单纯加倍长度的 PRG G(s)。令 Gen(1n):k←Un/2,加密解密均是 xor G(k)。则这个模式是单消息安全的。
现在假设存在对于无穷多 n 以 1/p(n) 区分的 m0n 与 m1n。构建混合分布
- H1n 是 m0n 经过上述加密后的结果 {s←Gen(1n):m0n⊕G(s)}。
- H2n 是 m0n 单纯 xor 上随机串,即 {r←Un:m0n⊕r}。
- H3n 是 m1n xor 随机串。
- H4n 是 m1n 加密。
则由 hybrid lemma,D 必然以 1/4p(n) 区分两个相邻项。
方法是构建 nuppt 机器 Mi(x)=mi⊕x【注意这里 mi 就是上述 m0/1n 之一】,然后令 Xn=G(Un/2),则由 PRG 假设有 Xn≈Un,二者分别作用于 M0 则得 H1,H2,作用于 M1 则得 H3,H4,则它们必然不可区分。
而 H2,H3 之间的关系就是一次性密码本,因此必然是有完美安全性的。即得其单消息安全。
III.VII. Multi-message Secure Encryption
单消息安全只发了一条消息。但是我们显然不希望一共只传输一条消息,而是希望就算传输多条消息也无法被破译。
一个加密系统是多消息安全 multi-message secure,如果对于一切多项式 q(n),都有消息集合 m0,…,mq(n) 与 m′0,…,m′q(n)——其中所有元素都是 {0,1}n 串——被一切判别器均以不超过 ϵ(n) 区分。注意,这两个集合加密时须都使用同一个私钥加密,即区分的是分布
- {k←Gen(1n):Enck(m0),…,Enck(mq(n))}
- {k←Gen(1n):Enck(m′0),…,Enck(m′q(n))}
前文所述的 Enck(m)=m⊕G(s) 的做法并非多消息安全的。
定理:多消息安全的加密系统不可能是确定性或无状态的。
没看懂。并且似乎上课不讲。
III.VIII. Pseudorandom Functions
这里的定义并没有完全参考课本。
一个随机函数 random function 是 {0,1}n→{0,1},且 f(x)←U({0,1})。一个从计算方面理解随机函数的策略是,如果要求 f(x),则查看 f(x) 先前是否被求过;如果是,则返回,否则随机为 f(x) 赋以一个 {0,1} 值。同理可以定义 {0,1}n→{0,1}n 的随机函数。
参照课本,定义 RFn 为全体 {0,1}n→{0,1}n 随机函数,共 (2n)2n 个。
一个预言 Turing 机 oracle Turing machine 是普通 Turing 机多了一个称为 oracle 的部分;oracle 可以被 Turing 机调用并做出回复。
两族概率分布 {On}n,{O′n}n 其中 On,O′n 是 {0,1}ℓ1(n)→{0,1}ℓ2(n) 函数集上的分布,称二者是计算不可区分 computationally indistinguishable 的,如果任何 nuppt 的预言 Turing 机作为判别器,在使用 F←On 和 F←O′n 作为 oracle 时,不可区分。即,存在 negligible 的 ϵ(n) 使得
显然,这个东西就是本章开头介绍东西的扩展。
一个函数族 {fs:{0,1}|s|→{0,1}|s|}s←{0,1}∗ 是伪随机 pseudo-random 的,如果它易于计算且 {s←{0,1}n:fs}n≈{F←RFn:F}n。注意函数族有一个类似 seed 的 s 概念,这个 seed 不能公开,否则区分 fs 和随机函数是简单的:大概率地,随机函数在很多位置上都不等于 fs。
定理:如果 PRG 存在,则 PRF 存在。
首先,不妨假设 PRG g 是长度倍增的 PRG。即,g(x)=g0(x)+g1(x),其中 g0,g1:{0,1}n→{0,1}n。
则令 fs(b1…bn)=gbn(gbn−1(…(gb1(s))…)))。
注意到 fs 关于 b 的指令序列呈一个二叉树结构。因此,长度为 n 的 fs 会是 2n 个不同伪随机串上的均匀随机生成器,则必然是伪随机的。
具体而言,我们还是想用 Hybrid Lemma。定义一个比较神奇的 hybrid 效果:令 HFin 为把二叉树的前 i 层全部更换为随机串的结果。则 HF1n={s←{0,1}n:fs(⋅)},HFnn=RFn。
则如果 fs 和 HF1n 能被区分,则 HF1n 和 HFnn 能被 ϵ 区分。则存在 HFin,HFi+1n 能被 ϵ/n 区分。
HFin 与 HFi+1n 的区别在于一个用 Un 而一个用 g0/1(Un)。
D 会调用待区分函数 p(n)=poly(n) 次作为 oracle。于是定义 HHFjn 表示前 j 次询问使用 HFin、之后使用 HFi+1n 的混合分布。因此存在某个 HHFjn 与 HHFj+1n 被 ϵ/(np(n)) 区分。这两个之间只差一次询问,因此若可区分则违背了 g PRG 的前提。
III.?. From PRF to Private Key Encryption
这章替代了教科书上某一章。
Chosen Plain-Text Attack Security (CPA):有两方,Attacker 和 Challenger。其中:
- Challenger 使用 Gen sample 一个私钥 k。
- (Phase I) Attacker 自适应地向 Challenger 多次询问 mi 并得到回复 Enck(mi)。
- (Challenge Phase) Attacker 提出两个串 m∗0,m∗1,Challenger 随机选择 b∈{0,1} 然后回复 Enck(m∗b)。
- (Phase III):与 Phase I 相同。
- Attacker 猜测 b。
Phase I&III 都执行多项式轮。一个加密是 CPA secure 的,当且仅当任何 nuppt attacker 成功概率不超过 12+ϵ(n)。
一个可行的加密模式:
假设 m∈{0,1}。令 PRF F={Fn={fk:{0,1}n→{0,1}}k∈Kn}。【注意,此处参考的是讲义定义】。Gen 从 Kn 中随机生成 key。Enck(m,r)=c1+c2,其中 c1=m⊕fk(r),c2=r,r←{0,1}n。
则我们希望证明 Enck(0)≈Enck(1)。
事实上,有
1 同理。这是因为 fk 是 PRF,所以 fk≈F 其中 F 是真随机函数,而 (0⊕R,r) 显然与 (1⊕R,r) 不可区分,于是即有 Enck(0)≈Enck(1)。
III.X. Public Key Encryption
之前用的都是私钥加密。那公钥又如何呢?
公钥加密的模式是除了公钥以外,个人还有各自的加密私钥 pk 和一个解密私钥 sk。即 (Gen,Enc,Dec) 三元组:
-
Gen 生成 (pk,sk) 二元组。
-
Encpk(m) 给出密文 c。
-
Decsk(c) 给出明文 m 或者特殊记号 ⊥ 表示该密文不可解。
-
存在一个多项式算法 M,接受 (1n,i) 给出第 i 条(如果其存在的话)长度为 n 的消息。即,M 扮演一个待发送信息列表的角色。
-
对于一切 n∈N,m∈{0,1}n,都有
Pr[(pk,sk)←Gen(1n):Decsk(Encpk(m))=m]=1
一个安全公钥系统是以下两分布以至多 ϵ(n) 被区分的系统:
- {(pk,sk)←Gen(1n):(pk,Encpk(m0))}
- {(pk,sk)←Gen(1n):(pk,Encpk(m1))}
公钥系统下不存在完美安全性,因为 adversary 可以对一切明文尝试用一切 pk 加密并与密文对比。同时,确定性加密方法也必然不存在,因为 pk 其实是对 adversary 公开的(这就是公钥的含义),adversary 只需原样加密一遍即可辨别。
CPA security 也可以被关于公钥系统定义。
- Challenger 生成 (pk,sk)。
- Adversary 生成 m0,m1 并提问。
- Challenger 随机加密二者之一并返回。
- 猜测到底是哪个。【这不就是之前那个东西的算法化描述么!】
陷门函数集看起来是一个好选择,只需要让其不那么确定性即可。考虑一个陷门函数和难题预测的组合模式:令 {fi} 为一个陷门排列集。则:
- Gen(1n) sample (fi,f−1i)(后者使用陷门信息实现),然后回复的 (pk,sk) 对为 ((fi,bi),f−1i),其中 bi 是关于 fi 的难题预测。
- Encpk(m):sample r←{0,1}n 然后输出 (fi(r),bi(r)⊕m)。
- Decpk(c1,c2):使用 f−1i 逆向 c1 得到 r,然后 m←bi(r)⊕c2。
假设存在 Encpk(0),Encpk(1) 的 1/p(n) 判别器,即存在 A 满足
Pr[m←{0,1}:D(pk,Encpk(m))=m]>12+12p(n)则构建 A′ 预测 hardcore bit:对于输入 (pk,y),任选一个 c←{0,1},令 m←A(pk,(y,c)) 并输出 c⊕m。
接下来的推导是 trivial 的。
III.XI. El-Gamal Public Key Encryption scheme
Decisional Diffie-Hellman (DDH) 假设声称,以下两个集合不可区分:
- {p←˜Πn,y←Genq,a,b←Zq:p,y,ya,yb,yab}n。
- {p←˜Πn,y←Genq,a,b,z←Zq:p,y,ya,yb,yz}n
其中,˜Πn 是特殊质数集合 {p∣p∈Πn,p=2q+1,q∈Πn−1},即可以写成质数 q 的 2q+1 的质数,被称作安全素数。对应的 q 则被称作 Sophie Germain 素数。选取这些东西的意义在于:
- Z∗p 的阶是 2q。由 Cauchy 定理其必然存在 q 阶子群,这个子群必然是唯一的,即为全体二次剩余。而其必然是循环群。因此这个群的生成元容易找到:任意选择 Z∗p 中一个元素,将其平方,即得生成元。定义式中的 Genq 即描述了这一过程。
- 一个 tuple (p,y,g,h,f) 是 DDH tuple 如果它满足 (p,y,ya,yb,yab) 的关系。
- DDH assumption 依赖于离散对数假设:若离散对数可计算则 DDH tuple 必然易于判定。
El-Gamal 安全公钥加密:
- Gen(1n):选择 n 位安全素数 p=2q+1,选择随机 Zp 元素 g 并计算 h←g2modp,选择 a∈Zq,然后 pk←(p,h,hamodp),sk←(p,h,a)。
- Encpk(m):选择 b∈Zq,输出 (hb,hab⋅mmodp)。
- Decsk(c1,c2):m←c2/ca1modp。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?