Loading [MathJax]/jax/output/CommonHTML/autoload/multiline.js

密码~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[kGen:Deck(Enck(m))=m]=1Pr[kGen: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。如果 aa11,在其左侧放置 10,否则放置 01;如果 bb11,右侧置 01 反之 10。之后双方各自随机 rotate 整个串,然后 check 有无连续三个 0

只要双方有一个人执行了纯随机的 rotate 操作,那么最终呈现的结果就是纯随机的。

I.III. Shannon's Treatment of Provable Secrecy

Shannon 安全性 Shannon Secrecy:对于一些先验的明文信息,监听者不能通过阅读密文来得知额外的明文信息。即,对于明文空间上的分布 DD,应保证对于一切明文 mm 和密文 cc,都满足

Pr[kGen;mD:m=mEnck(m)=c]=Pr[mD:m=m]

即,知道密文并不能帮助确定明文。

完美安全性 Perfect Secrecy:对于一切 m1,m2,都满足

Pr[kGen:Enck(m1)=c]=Pr[kGen:Enck(m2)=c]

即,在不知道密钥时,一切明文加密后的概率分布都一致。

定理:Shannon 安全性与完美安全性等价。

为方便,定义 Prk,Prm,Prk,m 表示显然的含义。

Prk,m[m=mEnck(m)=c]=Prk,m[m=mEnck(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]=mPrm[m=m]Prk[Enck(m)=c]

而因为完美安全性,其等于 mPrm[m=m]Prk[Enck(m)=c],而这正好等于 Prk[Enck(m)=c]

于是我们得到

Prk,m[m=mEnck(m)=c]=Prm[m=m]

即为 Shannon 安全性定义。

反过来证明也类似,取 m 的分布 D{m1,m2} 上的均匀分布即可。

一次性密码本 One Time Pad 是一种 Shannon 安全的加密。其明文与密钥同是长度为 n 的零一串,加密解密方法同为用文本异或密钥。易知其满足需求。

这个加密方法似乎不是很牛,因为密钥和明文一样长。事实上,Shannon 定理 表明,Shannon 安全的加密必须保证密钥集合 K 大小不小于文本集合 M 大小。

对于 m1M,kK,令 cEnck(m1),令 Dec(c)={Deck(c)kK},即所有可能解读方案。如果 |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[kGen(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(nc)

那么,一个函数 f(x) 是强单向函数 strong one-way function,如果对于一切逆向 p.p.t A,均满足

Pr[x{0,1}n;yf(x):f(A(1n,y))=y]ϵ(n)

也即,仅对于 negligible 的输入可逆。称一个函数是 (t,s,ϵ)-单向,如果不存在大小不超过 s(n) 的逆向 A,使得其复杂度不超过 t(n)、成功概率不超过 ϵ(n)

弱单向函数 weak one-way function 则是对于 non-negligible 的输入不可逆,即存在多项式级别的 q(n)​ 使得上述 negligible 的 ϵ(n)​ 被换成补集 non-negligible 的 11/q(n)​。

II.III. Multiplication, Primes, and Factoring

考虑函数

fmult:N2N,fmult(x,y)={1(x=1y=1)xy(otherwise)

其逆向函数即对于每个自然数 z,找到其一组(不一定分解为质数,但不能使用 1)的分解。一个满足 non-negligible 的输入不可逆的方式是,z 是偶数当且仅当 x,y 有一为偶数。而有一为偶数时,(x=2,y=z/2) 是一组合法的逆。这种求逆方式对于 3/4(x,y) 输入有效。

无穷集 N23/4 是什么意思?事实上,这应该回到关于 n 的式子中,即

Pr[x{0,1}n;yf(x):f(A(1n,y))=y]34

这个式子中带上了 n,因此 x 是有限集。

因此这种求逆方式对于 non-negligible 的输入失效。

鉴于单向函数的存在依赖于 NP vs BPP,因此存在弱单向函数的命题至今也只能是一个猜想。建立在 NP vs BPP 上,可以得到如下假设:

Πn 为严格小于 2n 的全体质数集合,则 质因数分解假设 声称:

对于一切逆向 A,都存在 negligible 的 ϵ(n) 满足

Pr[p,qΠn,Npq:A(n){p,q}]ϵ(n)

即,不存在有效的能为两个质数乘积找到质因数的方式。

应用这个假设做出一些推理:

  • 定理:π(n)>n2logn。其中 π(n) 为不超过 n 的质数数目。
    首先,令 X=(2nn),则 X>2n 并且所有质因数不超过 2n。对 X 分解,令 vp(X) 为质因数 p 的次数,则取 ln 得到

    p2nvp(X)logp>n

    于是只需要 bound vp(X) 即可。因为 n! 中含 p 的次数可以写成 i1n/pi,所以有

    vp(X)=i12n/pi2n/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 使得

Pr[(x,y){0,1}2n,zg(x,y):A(12n,z)g1(z)]1p(2n)

现在,使用 A 建立 A。对于 A 的输入 u,随机一个 y,然后令 vf(y),并使用 (u,v) 喂给 A,然后拿输出的第一项返回 A。则其成功概率与 A 成功概率相同。于是规约成功。

现在,考虑 mn=4n3fmult 的并行,即 f:({0,1}2n)mn({0,1}2n)mn。单个随机时,均为质数的概率至少为 1/4n2;而 mn 次时,所有的对都存在非质数的概率不超过

(114n2)4n3exp(n)

这意味着,在质因数分解假设下,f 是强单向的。

同理,使用弱单向拼强单向的做法也类似。

II.V. Collections of One-Way Functions

单向函数集 collection of OWFs 是一个函数族 F={fi:DiRi}iI,满足如下条件:

  • 可以从中 sample 一个 OWF。即,存在 p.p.t Gen(1n) 给出一个 iI 的下标。

  • 对于一个 OWF,存在 p.p.t 从 Di 中独立均匀随机 sample 元素。

  • 存在 p.p.t 计算 fi(x)

  • 难以求逆,即对于一切 A 都有

    Pr[iGen,xDi,yfi(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:对于 0b<a<2n,exgcd 执行不超过 2n 次。

快速幂 ax(modn) 的朴素复杂度是 logx(logn)2

Miller-Rabin:执行 t 轮检验,以 12t 的概率判定成功合数。

随机生成 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,即

DL={fi:DiRi}iII={(q,g)qΠk,gGenGq}Di=Zp=2q+1fp,g(x)=gx

II.IX. RSA Collection

RSA 假设:对于满足 N=pqp,qΠngcd(e,φ(N))=1yZN 的三元组 (N,e,y),求出 xey(modN) 的 adversary 是 negligible 的。即,

Pr[p,qrΠn,Npq,erZφ(N)yZN,xA(N,e,y):xeymodn]<ϵ(n)

也即,RSA 断言计算随机元素的 e 次根是困难的。

RSA collection 中 I={(N,e)N=pqs.t.p,qΠneZΦ(N)}Di=Ri=ZNfN,e(x)=xemodN

并且,fN,eZN 上的一个 permutation。

II.X. One-way Permutations

单向函数集 F 是单向排列集 collection of one-way permutations,如果其中所有单向函数都是排列。

RSA 假设强于质因数分解假设。具体而言,假设存在以多项式倒数 1/p(n) 概率将 N=pq 分解的 adversary A,则存在 A1/p(n) 概率对 fN,e 求逆。这是因为,当已知 N 的分解后,φ(N)=(p1)(q1) 是可以求出的,于是 eZφ(N) 上的逆 e1 可以被求出,即得 fN,e 的逆排列。

特别地,反向结果目前是未知的,即目前不能确定分解假设是否推出 RSA 假设。

II.XI. Trapdoor Permutations

如果 N 的分解未知(更准确地说,如果 φ(N) 未知),则对 fN,e 求逆是困难的;但是,只要知道其分解,求逆即变成易事了。因此,N 的分解是一个陷门 trapdoor,知道其即可允许 fN,e 被逆向。

陷门排列集 collection of trapdoor permutationsF={fi:DiRi}iI 满足:

  • fi 是排列。
  • 容易关于陷门信息采样函数。即,存在 p.p.t Gen 满足 (i,t)Gen(1n)。其中,iI,而 t 是陷门信息。
  • 易于从定义于中采样、易于求值。
  • 无陷门时难以求逆,但有陷门时容易求逆(即,给定 (i,t)yRi,存在 p.p.t 计算 f1(y))。

现在,对 RSA collection 中的 index (N,e),令其对应的陷门信息 d 是满足 ed1(modφ(N)) 的那个 d(使用 exgcd 求出),则 RSA 是陷门排列集。

II.XII. Rabin collection

RSA 的 e 是随机从 Zφ(N) 中 sample 的;一个类似的场合是令 e=2,即求平方根。但是注意到因为 N=pq 所以必然有 φ(N)=(p1)(q1) 为偶数,因此有 eZφ(N),因此这与 RSA 有一定不同。

全体二次剩余元素构成一个裙,记作 QRp={x2modpxZp}。有 QRp=(p1)/2

p=3+4k 时,有 (±yk+1)2y

a2=y,则 (yk+1)2=a4k+4=a2=y

p=1+4k 时,上述方法不太行,因此使用 Cipolla。

寻找 b 使得 b2y 非二次剩余。定义虚数 i2=b2y,则 (b+i)p+1=y,于是 y=((b+i)(p+1)/2)2

定理:对于 N=pq,xZN,令 y,z 分别为 xmodp,xmodq,则 xQRNyQRpzQRq

正向直接取模,反向使用 CRT。

N 为质数时,xx2(modN) 是二对一映射;当 N=pq 时,其则是四对一映射,这是因为 (±y)(±z) 经过 CRT 回映至四个元素。因此,|QRN|=|ZN|/4

现在,已知 p,q,关于 N 的二次剩余可以被简单计算;但是目前不存在未知 p,q 直接计算二次剩余的高效方法。

Rabin collection:R={fi:DiRi}iI

  • I={N:N=pqp,qΠn}
  • Di=ZN
  • Ri=QRN
  • fN(x)=x2modN

RSA 假设强于分解假设;但是 rabin collection 与分解假设等效。

假设存在高效求二次剩余的 A(x),其成功概率至少为 1/p(n),那么依以下方法构建高效分解的 A(x)

  • ZN 中 sample 一个 x,计算 x2 的一个二次剩余 zA(x) 会随机返回四个二次剩余中的某一个。既然 x2z2,这意味着 (xz)(x+z)0;以 1/2 的概率,zxzx,此时 x,zp,q 的结果之一必须相等,这意味着 gcd(xz,N) 会是 p,q 之一。这个方法的成功概率至少为 1/2p(n)

反之,如果能高效分解,那么对两个因子分别 Cipolla 然后用 CRT 合并之即可。

通过一些约束,rabin collection 也是可以是一个陷门排列。具体而言,只保留那些 p,q 均模 43N,然后令 fiQRNQRN,则可以证明其是排列。

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 机的方式 例如 c++ 代码 并且这个方式可以通过 padding 来延伸长度),而剩下的位是 M 的输入 x。然后,我们使用 xM 上运行 |y|3 步;如果 M 停机,则返回 M(x)funiv(y);否则返回

显然,funiv(y) 可在 O(|y|3) 内计算。

假设存在一个强单向函数 g,我们可以构建一个复杂度为 O(n2) 的强单向 g。构造的方法如下:

假设 g 可以在 nc 内计算。显然,如果 c2g 已符合要求。考虑 c>2,则通过强行 padding(令 g 的输入 x=a,b【这个符号的意义是 a,b 两串的拼接】;则令 |a|=ncn,|b|=n,令 g 输出为 a,g(b))可以设计 g,则 g 显然是一个能在 O(m2) 内计算的函数,且易知其强单向性。

如果 funiv 并非弱单向,则存在 A 使得其成功概率高于一切多项式 q(n) 引导的 11/q(n)。特别地,其在 q(n)=n3 时成立。令 A 成功求逆这个事件为 Invert

Mg 为某个描述最短的描述 g 的机器,则 |Mg| 可以认为是常数。则一个随机 n-bit 串 y=M,x|M|=log|y||Mg| 时,其以至少 2logn=1/n 的概率成功描述 g 及其输入。令成功描述这个事件为 PickG

现在结合二者。则

Pr[InvertPickG]1Pr[¬Invert]Pr[¬PickG]1(1/n3)(11/n)1/n3

这就意味着,如果 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}nN,其中每个 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 的 ϵ 使得

|Pr[tXn,D(t)=1]Pr[tYn,D(t)=1]|<ϵ(n)

也即,没有有效判别器能以 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[tX1n:D(t)=1]Pr[tX0n:D(t)=1]>μ(n)

这是因为 Pr[1]>Pr[0]Pr[1]<Pr[0] 的 indice 至少有一个是无穷的,搭配可选的 D=1D 即可。

D 同时也可以被当成一个预测器。具体而言,

Pr[b{0,1};tXbn: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,都满足

Pr[tXn:A(1n,t1i)=ti+1]<12+ϵ(n)

即,对于所有前缀,预测下一位都是困难的。

下一位测试是完全的。

假设存在判别器 D 使得在无限个 n 处满足 XnU(n) 区别超过 1/p(n)。现在,定义一个混合分布 hybrid sequence 列是

Hin={xXn,yU(n):x1iyi+1(n)}

特别地,有 H0n=U(n),H(n)n=Xn。既然 D1/p(n) 区分 H0nH(n)n,由 hybrid lemma,存在 HinHi+1nD1/p(n)(n) 区分。既然二者唯一的分别在第 i+1 位,这意味着 D 可以在已知前缀 x1i,以 1/p(n)(n) 的概率区分 xi+1 和随机 bit;那么,定义

ˉHin={xXn,yU(n):x1i1¯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|
  • {xUn:G(x)}n 是伪随机的。

一个可能的 PRG 构造是,令 f 是一个单向排列,则令 G(s)=fn(s)+fn1(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 均有

Pr[x{0,1}k:A(1n,f(x))=h(x)]12+ϵ(n)

即,给定 f(x) 不能帮助计算 h(x)

给定 N,e,对于 fRSA(x)=xemodN,其相关的一些难题预测的例子如

  • LSB(x) 寻求 x 的最低位。
  • halfN(x) 寻求判定是否有 0xN/2
  • 建立在离散对数假设,即 fDL(x)=gx(modp),下的 halfp1(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^0(x)=\varnothing
\\G^i(x)=b+G^{i-1}(x')&\text{where }x'+b\gets G(x)

然后 G(x)=Gm(x)。现在如果存在 D1/p(n) 区分 {Um(n)}n{G(Un)}n,则仍然考虑混合分布 Hin=Um(n)i+Gi(Un),则存在以 1/p(n)m(n) 被区分的 HinHi+1n。有

H_n^i=U_{m-i-1}+U_1+G^i(U_n)
\\H_n^{i+1}=U_{m-i-1}+b+G^i(x)&\text{where }x+b\gets G(U_n)

构建 nuppt M(y),其效果如下:令 bprevUmi1,by1,bnextGi(y2n+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+1q 亦为质数)的质数,gp 的原根,xZpfDL(x)=gxmodph(x)=halfp1(x)

RSA PRG:N=pqeZφ(N)fRSA(x)=xemodNh(x)=LSB(x)

Blum-Blum-Schub:p,qmod4=3,N=pqxQRNfQR(x)=x2modNh(x)=LSB(x)

III.IV. Hard-Core Bits from Any OWF

之前介绍的几个单向函数-难题预测对都没有加以证明。如何针对单向函数寻找对应的难题预测?本节将加以阐述。

比如说,证明 DL 假设下,halfp1(x)fp,g(x)=gxmodp 的难题预测。现在假设有能以 1/2+1/s(n) 概率预测 halfp1(x) 的 n.u.p.p.t A,尝试用其实现离散对数。

首先考虑 A 是严格正确的理想态。需求是对 (g,p,y) 三元组求出 gxmodp=yx。令 k|p|(注意此处的 |p| 指的是 p 作为 01 串的长度),然后令 k 递减(即从最低位向最高位)地确定 x 的每一位。

  • 如果 y 是二次剩余,那么将 x 的当前位设成 0,然后将 y 开根。
  • 如果 y 非二次剩余,那将 x 的当前位设成 1,然后将 y 除以 p 后开根。【再次强调,质数时的二次剩余是 Cipolla 可求的,Rabin collection 是质数乘积时的二次剩余】
  • 但是,开根有正负两个根,选择哪一个?使用 A 给出的 halfp1 即可判定使用哪个根。

现在问题在于 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

S={xPr[r{0,1}n:A(f(x),r)=h(x,r)]>34+ϵ2}

则有 Pr[xS]ϵ/2。因为否则则有

Pr[x,r{0,1}n:A(f(x),r)=h(x,r)]=Pr[xS]Pr[]+Pr[xS]Pr[]Pr[xS]1+Pr[xS](34+ϵ2)<ϵ2+(1ϵ2)(34+ϵ2)<34+ϵ

与假设相悖。

对于这个 good set,我们希望能成功求逆的 r 至少构成一组基,这样就可以用基处的值反推出所有 ei 处的值。实际操作时,可以选择随机一组基……

但是这太蠢了。我们完全可以适当多随一点东西。比如说,当要求 ei 的信息时,可以随机一个 r,然后令 r=rei。则以 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[xS]ϵ/2

假设我们可以调用一个 CC 接受 f(x) 为输入,能够揭示关于 x 的信息

(b1=x,r1,r1),,(bm=x,rm,rm)

其中 r1,,rm 独立均匀随机。则 (bj,rj) 可以替代 (A(y,rj),rj) 作为一个基线,这样只需考虑 A(y,rjei) 作为另一个基线即可,成功概率仍是 1/2+ϵ/2。令 ϵϵ/2,然后令 m=poly(1/ϵ) 然后取众数即可。

现在只剩设计模式 C 了。首先考虑放松 rj 的限制,令其仅要求两两独立而不需要完全独立,则有 Pairwise-Independent Sampling Inequality:令 X1,,Xn 是两两独立的随机变量,其期望均为 μ 且绝对值均不超过 1,则

Pr[|1nXiμ|ϵ]1μ2nϵ2

这个东西长得一眼 Chernoff Bound。证明?先 suppose it right 罢。

因为我们使用了众数投票,所以我们只需要 1nXi(12+ϵ)ϵ 即可,失败概率不超过 14ϵ24mϵ21mϵ2。对每一位使用 union bound 即知需要 m2nϵ2 以保证成功概率至少为 1/2

现在问题是从哪里搞来这么多 (bi,ri) 对。方法很奇妙:随机采样 logmr1,,rlogm,然后随机猜对应的 b1,,blogm。以 2logm=1/m 的概率,所有 b 全猜对。那么取 r 的所有 subset xorsum 以及对应的 bi 为全体 (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 的 ϵ(),使得对于一切 nN,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):kUn/2,加密解密均是 xor G(k)。则这个模式是单消息安全的。

现在假设存在对于无穷多 n1/p(n) 区分的 m0nm1n。构建混合分布

  • H1nm0n 经过上述加密后的结果 {sGen(1n):m0nG(s)}
  • H2nm0n 单纯 xor 上随机串,即 {rUn:m0nr}
  • H3nm1n xor 随机串。
  • H4nm1n 加密。

则由 hybrid lemma,D 必然以 1/4p(n) 区分两个相邻项。

方法是构建 nuppt 机器 Mi(x)=mix【注意这里 mi 就是上述 m0/1n 之一】,然后令 Xn=G(Un/2),则由 PRG 假设有 XnUn,二者分别作用于 M0 则得 H1,H2,作用于 M1 则得 H3,H4,则它们必然不可区分。

H2,H3 之间的关系就是一次性密码本,因此必然是有完美安全性的。即得其单消息安全。

III.VII. Multi-message Secure Encryption

单消息安全只发了一条消息。但是我们显然不希望一共只传输一条消息,而是希望就算传输多条消息也无法被破译。

一个加密系统是多消息安全 multi-message secure,如果对于一切多项式 q(n),都有消息集合 m0,,mq(n)m0,,mq(n)——其中所有元素都是 {0,1}n 串——被一切判别器均以不超过 ϵ(n) 区分。注意,这两个集合加密时须都使用同一个私钥加密,即区分的是分布

  • {kGen(1n):Enck(m0),,Enck(mq(n))}
  • {kGen(1n):Enck(m0),,Enck(mq(n))}

前文所述的 Enck(m)=mG(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,{On}n 其中 On,On{0,1}1(n){0,1}2(n) 函数集上的分布,称二者是计算不可区分 computationally indistinguishable 的,如果任何 nuppt 的预言 Turing 机作为判别器,在使用 FOnFOn 作为 oracle 时,不可区分。即,存在 negligible 的 ϵ(n) 使得

|Pr[FOn:DF()(1n)=1]Pr[FOn:DF()(1n)=1]|<ϵ(n)

显然,这个东西就是本章开头介绍东西的扩展。

一个函数族 {fs:{0,1}|s|{0,1}|s|}s{0,1} 是伪随机 pseudo-random 的,如果它易于计算且 {s{0,1}n:fs}n{FRFn: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(b1bn)=gbn(gbn1((gb1(s)))))

注意到 fs 关于 b 的指令序列呈一个二叉树结构。因此,长度为 nfs 会是 2n 个不同伪随机串上的均匀随机生成器,则必然是伪随机的。

具体而言,我们还是想用 Hybrid Lemma。定义一个比较神奇的 hybrid 效果:令 HFin 为把二叉树的前 i 层全部更换为随机串的结果。则 HF1n={s{0,1}n:fs()}HFnn=RFn

则如果 fsHF1n 能被区分,则 HF1nHFnn 能被 ϵ 区分。则存在 HFin,HFi+1n 能被 ϵ/n 区分。

HFinHFi+1n 的区别在于一个用 Un 而一个用 g0/1(Un)

D 会调用待区分函数 p(n)=poly(n) 次作为 oracle。于是定义 HHFjn 表示前 j 次询问使用 HFin、之后使用 HFi+1n 的混合分布。因此存在某个 HHFjnHHFj+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 提出两个串 m0,m1,Challenger 随机选择 b{0,1} 然后回复 Enck(mb)
  • (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}}kKn}。【注意,此处参考的是讲义定义】。GenKn 中随机生成 key。Enck(m,r)=c1+c2,其中 c1=mfk(r),c2=r,r{0,1}n

则我们希望证明 Enck(0)Enck(1)

事实上,有

{r{0,1}n,(0fk(r),r)}{r{0,1}n,R{0,1},(0R,r)}

1 同理。这是因为 fk 是 PRF,所以 fkF 其中 F 是真随机函数,而 (0R,r) 显然与 (1R,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 扮演一个待发送信息列表的角色。

  • 对于一切 nN,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,f1i)(后者使用陷门信息实现),然后回复的 (pk,sk) 对为 ((fi,bi),f1i),其中 bi 是关于 fi 的难题预测。
  • Encpk(m):sample r{0,1}n 然后输出 (fi(r),bi(r)m)
  • Decpk(c1,c2):使用 f1i 逆向 c1 得到 r,然后 mbi(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},令 mA(pk,(y,c)) 并输出 cm

接下来的推导是 trivial 的。

Pr[(pk,sk)Gen(1n)r{0,1}n:A(pk,fpk(r))=b(r)]=Pr[(pk,sk)Gen(1n)r{0,1}nc{0,1}:A(pk,(fpk(r),c))c=b(r)]=Pr[(pk,sk)Gen(1n)r{0,1}nm{0,1}:A(pk,(fpk(r),mb(r)))=m]=Pr[(pk,sk)Gen(1n)m{0,1}:A(pk,Enkpk(m))=m]12+12p(n)

III.XI. El-Gamal Public Key Encryption scheme

Decisional Diffie-Hellman (DDH) 假设声称,以下两个集合不可区分:

  • {p˜Πn,yGenq,a,bZq:p,y,ya,yb,yab}n
  • {p˜Πn,yGenq,a,b,zZq:p,y,ya,yb,yz}n

其中,˜Πn 是特殊质数集合 {ppΠn,p=2q+1,qΠn1},即可以写成质数 q2q+1 的质数,被称作安全素数。对应的 q 则被称作 Sophie Germain 素数。选取这些东西的意义在于:

  • Zp 的阶是 2q。由 Cauchy 定理其必然存在 q 阶子群,这个子群必然是唯一的,即为全体二次剩余。而其必然是循环群。因此这个群的生成元容易找到:任意选择 Zp 中一个元素,将其平方,即得生成元。定义式中的 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 并计算 hg2modp,选择 aZq,然后 pk(p,h,hamodp)sk(p,h,a)
  • Encpk(m):选择 bZq,输出 (hb,habmmodp)
  • Decsk(c1,c2)mc2/ca1modp
posted @   Troverld  阅读(64)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示