安全多方计算之百万富翁问题

发布于:2023-01-21 ⋅ 阅读:(709) ⋅ 点赞:(0)

百万富翁问题是姚期智先生在1982年提出的第一个安全双方计算问题


问题可以描述为:两个百万富翁街头邂逅,他们都想炫一下富,比比谁更有钱,但是出于隐私,都不想让对方知道自己到底拥有多少财富,如何在不借助第三方的情况下,让他们知道他们之间谁更有钱。

在这里插入图片描述

具体流程: 假设富翁A的财富为a, 富翁B的财富为b

  1. A生成公私钥对 ( P K A , S K A ) (PK_A, SK_A) (PKA​,SKA​)。 A用公钥 P K A PK_A PKA​加密自己的财富值: C A = E n c ( a ) C_A = Enc(a) CA​=Enc(a),将 C A C_A CA​与公钥 P K A PK_A PKA​发送给B.
  2. B随机选择下 x , y x,y x,y(随机大整数), 用A的公钥 P K A PK_A PKA​分别计算 C B 1 = E n c ( b ∗ x + y ) C_{B1} = Enc(b*x + y) CB1​=Enc(b∗x+y) 和 C B 2 = E n c ( a ∗ x + y ) C_{B2} = Enc(a*x + y) CB2​=Enc(a∗x+y), 将 C B 1 , C B 2 C_{B1}, C_{B2} CB1​,CB2​发给A, 记作 A = a ∗ x + y , B = b ∗ x + y A = a*x + y, B = b*x + y A=a∗x+y,B=b∗x+y。
  3. 因为Paillier加密同态属性: E ( m 1 , r 1 ) ∗ E ( m 2 , r 2 ) = E ( m 1 + m 2 , r 1 + r 2 ) E(m_1, r_1) *E(m_2, r_2) = E(m_1 + m_2, r_1 + r_2) E(m1​,r1​)∗E(m2​,r2​)=E(m1​+m2​,r1​+r2​) 和 E ( m , r ) C = E ( m ∗ C , r ∗ C ) E(m, r)^C = E(m * C, r * C) E(m,r)C=E(m∗C,r∗C), 所以 C B 2 = E n c ( a ∗ x + y ) = E n c ( a ) x ∗ E n c ( y ) C_{B2} = Enc(a*x + y) = Enc(a)^x * Enc(y) CB2​=Enc(a∗x+y)=Enc(a)x∗Enc(y)
  4. A利用自己的私钥 S K A SK_A SKA​解开A 与 B即可得到谁更有钱。

微信公众号

今日签到

点亮在社区的每一天
去签到