二次剩余的应用 - PKU · 二次剩余的应用...
Transcript of 二次剩余的应用 - PKU · 二次剩余的应用...
二次剩余的应用
本节课讨论一类特殊的二次同余方程的解在硬币抛掷和零
知识证明中的应用. 为此, 我们需要下面的事实.
设𝑛 = 𝑝𝑞, 其中𝑝和𝑞是不同奇素数, 整数0 < 𝑎 < 𝑛且
(𝑎, 𝑛) = 1. 如果𝑥2 ≡ 𝑎 (𝑚𝑜𝑑 𝑛)有解, 那么它正好有4个解.
具体求解过程如下.
设𝑥0是𝑥2 ≡ 𝑎 (𝑚𝑜𝑑 𝑛)的一个解. 令𝑥1 = 𝑥0 𝑚𝑜𝑑 𝑝,
𝑥2 = 𝑥0 𝑚𝑜𝑑 𝑞, 则𝑥2 ≡ 𝑎 (𝑚𝑜𝑑 𝑝)和𝑥2 ≡ 𝑎 (𝑚𝑜𝑑 𝑞)分别有
两个解𝑥 ≡ ±𝑥1 (𝑚𝑜𝑑 𝑝)和𝑥 ≡ ±𝑥2 (𝑚𝑜𝑑 𝑞). 由拉格朗日定
理, 这也是它们的全部解.
2
二次剩余的应用
因此, 𝑥2 ≡ 𝑎 (𝑚𝑜𝑑 𝑛)恰好有4个解, 分别由以下同余方程组给出:
(1) 𝑥 ≡ 𝑥1 (𝑚𝑜𝑑 𝑝), 𝑥 ≡ 𝑥2 (𝑚𝑜𝑑 𝑞); (2) 𝑥 ≡ 𝑥1 (𝑚𝑜𝑑 𝑝), 𝑥 ≡ −𝑥2 (𝑚𝑜𝑑 𝑞); (3) 𝑥 ≡ −𝑥1 (𝑚𝑜𝑑 𝑝), 𝑥 ≡ 𝑥2 (𝑚𝑜𝑑 𝑞); (4) 𝑥 ≡ −𝑥1 (𝑚𝑜𝑑 𝑝), 𝑥 ≡ −𝑥2 (𝑚𝑜𝑑 𝑞);
显然, 若(1)的解为𝑥, (2)的解为𝑦, 则(3)和(4)的解分别为𝑛 − 𝑦和𝑛 − 𝑥.
另外, 在仍然假设𝒙𝟐 ≡ 𝒂 (𝒎𝒐𝒅 𝒏)有解的前提下,
如果𝑝 ≡ 𝑞 ≡ 3 (𝑚𝑜𝑑 4), 那么由定理4.3.1 (1)
可以求得𝑥2 ≡ 𝑎 (𝑚𝑜𝑑 𝑝)和𝑥2 ≡ 𝑎 (𝑚𝑜𝑑 𝑞)的解
分别为𝑥 ≡ ±𝑎(𝑝+1)/4 (𝑚𝑜𝑑 𝑝)和𝑥 ≡ ±𝑎(𝑞+1)/4
(𝑚𝑜𝑑 𝑞).
进而可以利用中国剩余定理由这些解求出𝑥2 ≡ 𝑎 (𝑚𝑜𝑑 𝑛)的解.
3
二次剩余的应用 例4.5.1 已知𝑥2 ≡ 860 (𝑚𝑜𝑑 103 × 107)有解, 求其全部解.
解: 由上面给出的解法知,
𝑥2 ≡ 860 ≡ 36 (𝑚𝑜𝑑 103)有解𝑥 ≡ ±36(103+1)/4 ≡ ±6 (𝑚𝑜𝑑 103);
𝑥2 ≡ 860 ≡ 4 (𝑚𝑜𝑑 107)有解𝑥 ≡ ±4(107+1)/4 ≡ ±2 (𝑚𝑜𝑑 107).
于是, 解下列同余方程组:
(1) 𝑥 ≡ 6 (𝑚𝑜𝑑 103), 𝑥 ≡ 2 (𝑚𝑜𝑑 107);
(2) 𝑥 ≡ 6 (𝑚𝑜𝑑 103), 𝑥 ≡ −2 (𝑚𝑜𝑑 107);
(3) 𝑥 ≡ −6 (𝑚𝑜𝑑 103), 𝑥 ≡ 2 (𝑚𝑜𝑑 107);
(4) 𝑥 ≡ −6 (𝑚𝑜𝑑 103), 𝑥 ≡ −2 (𝑚𝑜𝑑 107);
得𝑥 ≡ ±109,±212 (𝑚𝑜𝑑 103 × 107).
4
硬币抛掷
下面的电子硬币抛掷协议是Blum在1982年给出的. 该协议的前提条件是假设Alice和Bob之间可以进行电子通信.
硬币抛掷协议
① Alice选取满足𝑝 ≡ 𝑞 ≡ 3 (𝑚𝑜𝑑 4)的两个不同的大素数𝑝和𝑞, 将𝑛 = 𝑝𝑞 发送给Bob.
② Bob随机选取一个小于𝑛的正整数𝑥, 计算𝑥2 𝑚𝑜𝑑 𝑛. 令𝑎 = 𝑥2 𝑚𝑜𝑑 𝑛, 将𝑎发送给Alice.
③ Alice求出𝑥2 ≡ 𝑎 (𝑚𝑜𝑑 𝑛)的4个解𝑥, 𝑦, 𝑛 − 𝑥, 𝑛 − 𝑦, 取其中任一个发送给Bob.
④ Bob试图分解𝑛. 若Bob能分解𝑛, 则Bob赢得硬币, 否则Alice赢得硬币.
5
硬币抛掷
我们分析一下上面的协议对Alice和Bob 双方是否公正的.
事实上, 由前面的分析可以发现
𝑥 + 𝑦 ≡ 2𝑥1 ≢ 0 (𝑚𝑜𝑑 𝑝), 𝑥 + 𝑦 ≡ 0 (𝑚𝑜𝑑 𝑞) (Why?)
因此, (𝑥 + 𝑦, 𝑛) = 𝑞. 同理可得(𝑥 + 𝑛 − 𝑦, 𝑛) = 𝑝.
因为Bob知道𝑥, 如果他收到𝑦或𝑛 − 𝑦, 那么他可以利用欧
几里得算法很快求得𝑞或𝑝, 从而分解𝑛. 但是, 如果Bob收到
𝑥或𝑛 − 𝑥, 则由于他事先知道𝑥, 所以他并没有得到任何对
分解𝑛有用的信息.
因为Bob收到对分解𝒏有帮助的解和收到对分解𝒏没有帮
助的解的机会均等, 所以该硬币抛掷协议是公平的. 6
零知识证明
下面来看二次同余方程的解如何应用于零知识证明.
零知识证明(zero-knowledge proof)指的是证明者能够在不
向验证者泄露任何有用信息情况下, 使验证者相信某个论断
是正确的. 零知识证明实质是一种涉及两方或多方的协议.
例如, Alice有一个公钥和一个私钥, 假设Bob知道Alice的公钥,
但Bob没有见过Alice, 而Alice见过Bob的照片. 偶然一天两人
见面, Alice认出Bob的照片, 但Bob不能确定面前的人是否是
Alice. 这时Alice需要向Bob证明自己就是Alice.
7
零知识证明
Alice至少有两个证明办法.
(1) Alice把自己的私钥给Bob, Bob对某个数据先用Alice
的公钥加密, 然后用这个私钥解密, 如果正确, 则证明对
方确实是Alice.
(2) Bob随机选取数据后用Alice的公钥加密, 将加密后
的数据交给Alice, Alice用自己的私钥解密, 然后将解密
后的数据交给Bob. 如果这个数据与Bob随机选取的数
据相同, 则证明对方确实是Alice.
8
零知识证明
更直观的描述: Alice要向Bob证明自己拥有某个房间的钥匙, 假设该房间只能用该钥匙打开锁. 有以下2种方法:
(1) A把钥匙出示给B, B用这把钥匙打开该房间的锁, 从而证明A拥有该房间的正确的钥匙. (注意B可以偷偷复制钥匙)
(2) B确定该房间内有某一物体, A用自己拥有的钥匙打开该房间的门, 然后把物体拿出来出示给B, 从而证明自己确实拥有该房间的钥匙. 后面这个方法的好处在于在整个证明的过程中, B始终不能看到钥匙的样子, 从而避免了钥匙的泄露. (注意此时B没机会接触钥匙)
9
零知识证明
上述两个例子中的第二个方法就属于零知识证
明, 其中Alice作为证明者, 而Bob作为验证者. 零
知识证明可用于使某人相信你拥有一个秘密的
可验证的信息, 但又不用把有关的信息泄露出去,
即给外界的“知识”为 “零”. 大量事实证明,
零知识证明在密码学中非常有用.
10
零知识证明
零知识证明通常要求满足下述3个条件:
完备性 – 如果证明者的陈述都是真的, 那么诚实的证明者能使严格
执行协议的验证者相信某个论断.
可靠性 – 如果证明者的陈述是假的(即他可能不知道秘密信息), 那么
证明者成功欺骗严格执行协议的验证者的概率非常小.
零知识 – 在验证过程中, 秘密不会泄露给验证者. 特别地, 验证者不可
能向第三方证实他拥有该秘密.
值得注意的是, 零知识证明不是数学意义上的证明, 因为可
靠性中允许证明者以一个非常小的概率成功欺骗验证者, 即
这种证明是以一定的概率正确, 但不是确定性正确的.
11
零知识证明
下面的零知识证明协议是1985年Shamir发明的.
设𝑛 = 𝑝𝑞, 其中𝑝和𝑞是两个不同的4𝑘 + 3形的大素数, 𝐼是
正整数, 它表示证明者的某个特别的信息, 如个人身份证
号. 证明者选取一个小的正整数𝑐, 并将𝑐粘接在𝐼之后, 粘
接后的数记为𝑣. 这里𝑐的选取要求使得𝑣是模𝑛的二次剩
余. 设𝑢是𝑥2 ≡ 𝑣 (𝑚𝑜𝑑 𝑛)的一个解, 仅仅证明者知道.
Shamir的零知识证明协议的安全性是基于模平方根问题
难解假设的, 即证明者由于知道𝒑和𝒒, 容易得到
𝒙𝟐 ≡ 𝒗 (𝒎𝒐𝒅 𝒏)的解, 而其他不知道整数𝒏分解的人不可
能在合理时间内计算出𝒙𝟐 ≡ 𝒗 (𝒎𝒐𝒅 𝒏)的解.
12
零知识证明 证明者Alice为了向验证者Bob证明她知道𝑝和𝑞, 他们使用如下交互式证明:
① 证明者Alice随机选取一个与𝑛互素的数𝑟, 计算𝑥 = 𝑟2 𝑚𝑜𝑑 𝑛和𝑦 = 𝑣𝑥−1 𝑚𝑜𝑑 𝑛, 其中𝑥−1满足𝑥𝑥−1 ≡ 1 (𝑚𝑜𝑑 𝑛). 将𝑥和𝑦发送给验证者Bob.
② Bob验证𝑥𝑦 ≡ 𝑣 (𝑚𝑜𝑑 𝑛), 且随机选取一个比特𝑏(即0或1)发送给Alice.
③ 若𝑏 = 0, 则Alice发送𝑟给Bob; 若𝑏 = 1, 则Alice发送𝑠给Bob, 这里𝑠 = 𝑢𝑟−1 𝑚𝑜𝑑 𝑛, 而𝑟−1满足𝑟𝑟−1 ≡ 1 (𝑚𝑜𝑑 𝑛).
④ Bob计算收到值的平方, 如果他发送的比特𝑏为0, 那么他验证这个平方关于模𝑛是否与𝑥同余[因为𝒓𝟐 = 𝒙 𝒎𝒐𝒅 𝒏]; 如果他发送的比特𝑏为1, 那么他验证这个平方关于模𝑛是否与𝑦同余[因为𝒔𝟐 = 𝒖𝟐𝒓−𝟐 = 𝒗𝒓−𝟐 = 𝒗𝒙−𝟏 = 𝒚 𝒎𝒐𝒅 𝒏].
13
零知识证明
上面协议的4步形成一个循环, 完成一次验证. 值得注意的是, 如果Alice在一次验证中将𝑟和𝑠都发送给Bob, 那么Alice拥有的个人信息𝑢 = 𝑟𝑠 [因为𝒓𝒔 ≡ 𝒖𝒓−𝟏𝒓 ≡ 𝒖 (𝒎𝒐𝒅 𝒏)]将会泄露给Bob.
如果这个验证多次执行均能通过, 那么它表明Alice能按照Bob的要求发送𝑟或𝑠, 这说明Alice在每轮中都知道𝑟和𝑠, 这意味着Alice必须知道𝑢.
由于Bob发送给Alice的比特是随机的, 所以不知道𝑢的人不可能多次通过验证. 因为随机选取的𝑏是0或1的概率各1/2, 所以不知道𝑢能通过验证的概率是1/2[Alice可以一直发送𝒓]. 这样, 如果执行了𝑘次验证, 那么不知道𝑢能通过验证的概率是1/2𝑘. 因此, 为了增强安全性, 我们需要进行多次验证操作.
14
零知识证明 例4.5.2 假设Alice想向Bob证实她知道𝑛 = 1891的分解
1891 = 31 × 61. 如何进行零知识验证?
解: 设𝐼 = 391.因为391
31= 1,
391
61= 1.
故391是模31和模61的二次剩余, 从而391也是模1891的二次剩余.
于是我们直接取𝑣 = 391, 不需在𝐼后粘接𝑐.
Alice容易得到𝑢 = 239满足𝑢2 ≡ 𝑣 (𝑚𝑜𝑑 1891). 下面是一次验证:
Alice随机选取与𝑛互素的𝑟, 如𝑟 = 998, 计算: 𝑥 = 𝑟2 𝑚𝑜𝑑 𝑛 = 1338,
𝑦 = 𝑣𝑥−1 𝑚𝑜𝑑 𝑛 = 391 × 1296 𝑚𝑜𝑑 𝑛 = 1839, 将1338和1839发送给Bob.
Bob验证知𝑥𝑦 ≡ 1338 × 1839 ≡ 391 = 𝑣 (𝑚𝑜𝑑 𝑛), 随机选取一个比特, 如𝑏 = 1,
发送给Alice.
Alice发送𝑠 = 𝑢𝑟−1 = 239 × 1855 𝑚𝑜𝑑 𝑛 = 851给Bob. (𝑏 = 0时发送𝑟)
Bob计算𝑠2 ≡ 8512 ≡ 1839 ≡ 𝑦 (𝑚𝑜𝑑 1891).
15
Fiat-Shamir协议
下面的Fiat-Shamir协议是上述协议的一个变形, 它可以通过
零知识证明验证证明者拥有某些信息, 因此可用于智能卡的
身份验证.
设𝑛 = 𝑝𝑞, 其中𝑝, 𝑞是两个不同的4𝑘 + 3形大素数. Alice的秘
密是一序列数: 𝑣1, 𝑣2, … , 𝑣𝑚, 其中0<𝑣𝑖 < 𝑛, 𝑣𝑖 , 𝑛 = 1, 1 ≤
𝑖 ≤ 𝑚. 令𝑠𝑖 = (𝑣𝑖−1)2 𝑚𝑜𝑑 𝑛, 这里𝑣𝑖
−1满足𝑣𝑖𝑣𝑖−1 ≡ 1(𝑚𝑜𝑑 𝑛).
Alice公开𝑠1, 𝑠2, … , 𝑠𝑚. Bob仅仅知道𝑛和𝑠1, 𝑠2, … , 𝑠𝑚. 证明者
Alice想让验证者Bob相信她拥有秘密𝑣1, 𝑣2, … , 𝑣𝑚, 但不泄露
这些𝑣𝑖 .为此, 他们使用下面的交互式证明:
16
Fiat-Shamir协议
Fiat-Shamir协议
① 证明者Alice随机选取数𝑟, 计算𝑥 = 𝑟2 𝑚𝑜𝑑 𝑛, 将𝑥发送给
验证者Bob.
② Bob选取𝑆 ⊆ {1, 2, … ,𝑚}, 将𝑆发送给Alice.
③ Alice计算𝑦 = 𝑟 · 𝑣𝑖 𝑚𝑜𝑑 𝑛𝑖∈𝑆 , 将𝑦发送给Bob.
④ Bob验证𝑥 ≡ 𝑦2 · 𝑠𝑖 𝑚𝑜𝑑 𝑛 . 𝑖∈𝑆
这个协议与Shamir的零知识证明协议基于同样的假设,
即不知道整数𝑛分解的人不可能在合理的时间内计算出
𝑥2 = 𝑠𝑖(𝑚𝑜𝑑 𝑛)的解, 也即得不到𝑣𝑖 (因为𝒔𝒊 = (𝒗𝒊−𝟏)𝟐 𝒎𝒐𝒅 𝒏).
17
为什么安全?
Fiat-Shamir协议
Fiat-Shamir协议
① 证明者Alice随机选取数𝑟, 计算𝑥 = 𝑟2 𝑚𝑜𝑑 𝑛, 将𝑥发送给
验证者Bob.
② Bob选取𝑆 ⊆ {1, 2, … ,𝑚}, 将𝑆发送给Alice.
③ Alice计算𝑦 = 𝑟 · 𝑣𝑖 𝑚𝑜𝑑 𝑛𝑖∈𝑆 , 将𝑦发送给Bob.
④ Bob验证𝑥 ≡ 𝑦2 · 𝑠𝑖 𝑚𝑜𝑑 𝑛 . 𝑖∈𝑆
第一步中要求𝑟随机选取, 其作用是避免当𝑆 = {𝑖}为单元素子
集时Bob得到𝑣𝑖 . (Why?)
另外, 如果Alice的确知道秘密, 那么第四步中的同余式必然成
立. 这是因为: 18
Fiat-Shamir协议
Fiat-Shamir协议
① 证明者Alice随机选取数𝑟, 计算𝑥 = 𝑟2 𝑚𝑜𝑑 𝑛, 将𝑥发送给
验证者Bob.
② Bob选取𝑆 ⊆ {1, 2, … ,𝑚}, 将𝑆发送给Alice.
③ Alice计算𝑦 = 𝑟 · 𝑣𝑖 𝑚𝑜𝑑 𝑛𝑖∈𝑆 , 将𝑦发送给Bob.
④ Bob验证𝑥 ≡ 𝑦2 · 𝑠𝑖 𝑚𝑜𝑑 𝑛 . 𝑖∈𝑆
𝑦2 · 𝑠𝑖𝑖∈𝑆 ≡ 𝑟2 · 𝑣𝑖2
𝑖∈𝑆 · 𝑠𝑖 𝑖∈𝑆 (因为𝑠𝑖 = (𝑣𝑖−1)2 𝑚𝑜𝑑 𝑛)
≡ 𝑟2 · 𝑣𝑖2
𝑖∈𝑆 · 𝑣𝑖−1 2
𝑖∈𝑆 ≡ 𝑟2 ≡ 𝑥 (𝑚𝑜𝑑 𝑛) ,
即𝑥 ≡ 𝑦2 · 𝑠𝑖𝑖∈𝑆 (𝑚𝑜𝑑 𝑛).
19
Fiat-Shamir协议
在上面的验证协议中, 如果Alice不知道秘密𝑣1, 𝑣2, … , 𝑣𝑚,
那么她有可能使Bob相信她拥有这些秘密吗?
惟一明显的欺骗方式就是Alice在Bob提供子集𝑆之前猜
测𝑆, 进而拼凑第一步中𝑥和第三步中𝑦, 使得它们通过第
四步的验证. 但是{1, 2, … ,𝑚}的子集有2𝑚个, 猜测正确的
概率仅仅1/2𝑚. 如果这个协议被执行𝑘轮, 那么凭猜测通
过所有验证的概率仅为1/2𝑘𝑚.
20
Fiat-Shamir协议 例4.5.3 假设Alice想向Bob证实她拥有秘密信息, 该信息
由下列数组成: 𝑣1 = 1144, 𝑣2 = 877, 𝑣3 = 2001, 𝑣4 = 1221, 𝑣5 = 101.
设𝑛 = 47 × 53 = 2491, Alice公开𝑛 = 2491及下面的𝑠𝑖(1 ≤ 𝑖 ≤ 5):
𝑠1 = 197, 𝑠2 = 2453, 𝑠3 = 1553, 𝑠4 = 941, 𝑠5 = 494.
则一次验证的过程如下:
(1) Alice随机选取数𝑟, 如𝑟 = 1253, 计算
𝑥 = 𝑟2 𝑚𝑜𝑑 𝑛 = 12532 𝑚𝑜𝑑 2491 = 679, 将𝑥发送给Bob.
(2) Bob选取{1, 2, … , 5}的一个子集, 如𝑆 = {1, 3, 4, 5}, 将𝑆发送给Alice.
(3) Alice计算, 𝑦 = 𝑟 · 𝑣𝑖 𝑚𝑜𝑑 𝑛𝑖∈{1,3,4,5} = 1253 × 1144 × 2001 ×
1221 × 101 𝑚𝑜𝑑 2491 = 68, 将𝑦 = 68发送给Bob.
(4) Bob验证𝑦2 · 𝑠𝑖𝑖∈{1,3,4,5} ≡ 682 × 197 × 1553 × 941 × 494
≡ 679 ≡ 𝑥 𝑚𝑜𝑑 2491 . 21
总结
22
硬币抛掷协议
零知识证明协议
Fiat-Shamir协议