zhuzilin's Blog

about

Diffie-Hellman 和 PSI

date: 2021-12-01
tags: cryptography  

最近在和骞老师一起做一个密码学相关的项目,接触到 Diffie-Hellman 协议以及基于它进行的 private set intersection (PSI) 协议。在这里记录一下~

Diffie-Hellman key exchange

  1. Alice 随机生成私钥 aa,并选择一个大质数 pp 以及 gg,其中 gg 为 modulo ppprimitive root。对于质数来说,primitive root 即满足

    gd1 (mod p)d>0    dn1g^d \equiv 1\ (mod\ p) \land d > 0 \implies d \ge n-1
  2. Alice 计算 A=ga mod pA = g^a\ mod\ p,并把 ppggAA 都发给 Bob;
  3. Bob 随机生成密钥 bb
  4. Bob 计算 Ab mod pA^b\ mod\ pgab mod pg^{ab}\ mod\ p
  5. Bob 计算 B=gb mod pB = g^b\ mod\ p 并发给 Alice;
  6. Alice 计算 Ba mod pB^a\ mod\ p 也相当于是 gab mod pg^{ab}\ mod\ p

这样 Alice 和 Bob 就都有 gab mod pg^{ab}\ mod\ p 了,可以拿这个值作为密钥。即使 Eve 获得了 ggppAABB,他需要用 discrete logarithm problem 来反解 aabb,这是比较困难的。

Elliptic Curves Diffie-Hellman

  1. Alice 和 Bob 统一使用一个适当的椭圆曲线 EE,以及点 pp 作为 generator;
  2. Alice 随机生成密钥 aa
  3. Alice 计算 A=G×aA=G\times a
  4. Alice 把 EEGGAA 发给 Bob;
  5. Bob 随机生成密钥 bb
  6. Bob 计算出 B=G×bB=G\times b,同时用 AA 计算出 G×a×bG\times a \times b
  7. Bob 把 BB 发给 Alice;
  8. Alice 用 BB 计算出 G×a×bG\times a \times b

这样就可以得到公共的密钥了,例如用 G×abG \times abxx 坐标。同样,偷听的 Eve 需要解 elliptic curve discrete logarithm problem 来反解出 aabb,这也是很难的。

Diffie-Hellman PSI

  1. Alice 随机生成密钥 aa,并选一个大质数 pp
  2. Alice 持续对自己的数据做哈希,直到每一个都是 primitive root;
  3. 对于这些哈希结果 galiceg_{alice},Alice 计算 galicea mod pg_{alice}^a\ mod\ p,并把这些值和 pp 都发给 Bob;
  4. Bob 选一个私钥 bb
  5. Bob 持续对自己的数据做哈希,直到每个都是 primitive root;
  6. 对于这些哈希结果,Bob 计算 gbobb mod pg_{bob}^b\ mod\ p
  7. Bob 对 Alice 发过来的 galiceag_{alice}^a 计算 galiceab mod pg_{alice}^{ab}\ mod\ p ,并把 galiceabg_{alice}^{ab}gbobbg_{bob}^b 都发给 Alice;
  8. Alice 计算 gbobba mod pg_{bob}^{ba}\ mod\ p,并和 galiceabg_{alice}^{ab} 相对比,结合原先自己数据的顺序,得到交集。

注意,在整个过程中顺序都不能打乱,不然就只能得到交集的大小了。

Elliptic Curves Diffie-Hellman PSI

  1. Alice 和 Bob 统一使用椭圆曲线 E;
  2. Alice 随机选密钥 a;
  3. Alice 重复给输入做哈希直到其变为 E 的 generator,例如她可以循环做 SHA256 直到输出是 E 上点的 x 值;
  4. 后面就和 DH-PSI 的 3-8 类似了。

这里要注意的一点就是什么是一个椭圆曲线的 generator。和上面的对比可以知道,generator 在 elliptic curve modulo n 中的地位和 Zp\mathbb{Z}^*_p 在质数 modulo 的地位是一样的,是可以通过一个 generator 得到曲线上的所有点的。这部分相关的一些定理呀啥的我都还不是很清楚,好像可以认为 NIST 提供的那些曲线上的所有点都是 generator。

参考资料

  1. https://blog.willclark.tech/tech/2020/05/22/diffie-hellman-key-exchange.html
  2. https://blog.willclark.tech/tech/2020/05/26/psi-with-diffie-hellman.html
  3. https://blog.willclark.tech/tech/2020/06/12/elliptic-curves-diffie-hellman.html