隐私计算的必备基础知识(1)
笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具,经由自己阅读后整理而成。
(一)非对称RSA加密算法
-
欧拉函数和欧拉定理
任意给定正整数 n,在小于等于 n 的正整数中,有多少个数与n构成互质关系?计算这些值的方法叫作欧拉函数,以 φ(n) 表示。在 1 到 8 中,与 8 形成互质关系的是1、3、5、7,所以 φ(8) = 4。
如果两个正整数 a 和 n 互质,则 n 的欧拉函数 φ(n)可以让这条等式成立:aφ(n) ≡ 1(mod n)
也就是说,a 的 φ(n) 次方被 n 除的余数为 1。或者说,a 的 φ(n) 次方减去1,可以被 n 整除。比如,3 和 7 互质,而 7 的欧拉函数 φ(7) 等于 6,所以 3 的 6次方(也就是 729)减去1,可以被 7 整除(728/7=104)。
-
费马小定理
它是欧拉定理的一个特殊情况。假设正整数 a 与质数 n 互质,因为质数 n 的 φ(n) 等于 n-1,则欧拉定理可以写成下面的公式:an-1 ≡ 1(mod n)。
-
欧拉函数之积
欧拉定理还有一个特点,如果 n 可以分解成两个互质的整数之积,即 n = p1×p2,则 φ(n)=φ(p1×p2)=φ(p1)×φ(p2)
即积的欧拉函数等于各个因子的欧拉函数之积。比如,φ(56)=φ(8×7)=φ(8)×φ(7)=4×6=24。
-
模反元素
如果两个正整数 a 和 n 互质,那么一定可以找到整数 b,使得 ab-1 被 n 整除,或者说 ab 被 n 除的余数是1。
ab ≡ 1(mod n),这时,b就叫作 a 的模反元素。比如,3和11互质,那么3的模反元素就是4,因为(3×4)-1可以被11整除。显然,模反元素不止一个,比如15也是3的模反元素。而欧拉定理可以用来证明模反元素必然存在。可以看到,a的φ(n)-1次方就是a的模反元素。aφ(n) = a×aφ(n)-1 ≡ 1(mod n)
----------------------RSA公私钥如何生成?----------------------
1)随机选择两个不相等的质数p和q,比如61和53。实际应用中,这两个质数越大,就越难破解。
2)计算p和q的乘积n。比如n=61×53=3233。
3)计算n的欧拉函数φ(n)。φ(n)=φ(p×q)=φ§φ(q)=(p-1)(q-1)。因此,φ(3233)等于60×52,即3120。注意,这里用到了上面提到的欧拉函数之积。
4)随机选择一个整数e,选择条件是1<e<φ(n),且e与φ(n)互质。比如在1到3120之间,随机选择17。
5)计算e对于φ(n)的模反元素d。根据上文提到的模反元素的定义,ed ≡ 1(mod φ(n))。
6)将n和e封装成公钥,n和d封装成私钥。在这个例子中,n=3233,e=17,d=2753,所以公钥就是(3233, 17),私钥就是(3233, 2753)。
----------------------加密与解密?----------------------
1)加密计算公式为:me ≡ c(mod n),其中m就是要加密的信息,c就是计算生成的密文。沿用上面的例子,假设m=65,则6517 ≡ 2790(mod 3233)。
2)解密使用计算公式为:cd ≡ m(mod n),将密文2790代入公式计算可得27902753 ≡ 65(mod 3233)。
----------------------基于RSA算法的盲签名?----------------------
盲签名(Blind Signature)是一种在不让签名者获取所签署消息具体内容的情况下进行数字签名的技术。盲签名允许拥有消息的一方先将消息盲化,而后让签名者对盲化的消息进行签名,最后消息拥有者对签字除去盲因子,得到签名者关于原消息的签名。
盲签名的一个通俗的解释是:Alice想让Bob在一张信件上签名,但是不想让Bob看到信件上面所写的字。于是,Alice在信件上面放了一张复写纸,然后将信件和复写纸放到了信封中交给Bob。Bob在拿到信封之后直接在信封上面签字,这样字迹就通过复写纸写到了信件上。Alice拿到信封之后就可以得到Bob签过字的信件。
基于RSA算法可以实现盲签名,假设Alice要让Bob对消息m进行盲签名,Bob拥有私钥对(n, d),并共享了公钥对(n, e),其具体实现步骤如下:
1)Alice 选取与 n 互质的盲因子 k,然后计算 t ≡ mke (mod n),并把 t 发送给Bob。
2)Bob 对 t 进行签名,即计算 td ≡ (mke)d (mod n),并把计算结果发送给Alice。
3)Alice 计算盲因子 k 的逆元 k-1,并计算 s ≡ k-1td (mod n),根据费马小定理,可得 td ≡ (mke)d≡mdked-1k ≡ md k(mod n),进而可得 s ≡ k-1mdk ≡ md(mod n)。最终 Alice 获得了 Bob 的签名,但 Bob 并不知晓所签名的消息 m 的具体内容,即 Alice 获得了 Bob 的盲签名。
(二)不经意传输
不经意传输(Oblivious Transfer,OT)协议是一个密码学协议。在这个协议中,消息发送者将一批消息发送给接收者,接收者只能从中选取一条。但发送者对接收者选取了哪一条消息无法察觉,接收者也无法知道未选取的其他消息的内容。不经意传输协议可以保护接收者的隐私(选取的消息的内容)不被发送者知道,是密码学的一个基本协议,也叫茫然传输协议。
----------------------基于RSA加密算法的不经意传输协议?----------------------
假设发送者Alice有N个电话号码m0, m1, …, mN,接收者Bob只能从中选取一个,但又不想让Alice知道他拿到了哪一个号码。
1)发送者Alice生成一对RSA公私钥,并将公钥(n, e)发送给接收者Bob。
2)Alice方生成N个随机数X0, …, XN,将它们发送给接收者Bob。
3)Bob方生成一个随机数 k 以及一个编号标识 b(也就是Bob选择了第 b 个电话号码)。
4)Bob方用接收到的公钥加密k,同时用自己选中的Xb(从Alice方发送的N个随机数中选择的第b个随机数)盲化后发送给Alice,盲化计算公式为(Xb+ke) mod n。
5)Alice方并不知道Bob方究竟选择了哪个,她将X0, …, XN中的每个数据都拿去解密,获得k0, …, kN个解密结果。
6)Alice方对N个解密结果分别加上真实要发送的信息后发送给Bob。
7)Bob方根据自己选中的消息编号,只需对第b个消息解密就可以获得自己选中的电话号码。对于其他消息,Bob即使去解密也只能获得一个没有意义的随机值。而Alice方始终无法获知Bob究竟拿到了哪一个号码。
10月份新开了一个GitHub账号,里面已放了一些密码学,隐私计算电子书资料了,之后会整理一些我做过的、或是我觉得不错的论文复现、代码项目也放上去,欢迎一起交流!https://github.com/Ataraxia-github?tab=repositories