程序员 第10章 百万富翁问题 程序员 第10章 百万富翁问题

2021-05-25

一、提出问题

  • 有两个百万富翁,他们想比较财富,但是又不想公开财富,有没有办法?

二、生活的方式解决

  • 富翁 A 有 i 亿元,富翁 B 有 j 亿元,0 < i,j <= 10

  • 有 10 个排放成一列的带锁的箱子,A 有钥匙,B 没有钥匙

  • A 找出第 i 个箱子,在 i 之前的箱子放上写有数字 0 的纸条,在 i 和之后的箱子放上写有数字 1 的纸条,然后锁上

  • B 找出第 j 个箱子拿给 A,并把其他箱子销毁

  • A 用钥匙打开 B 拿给自己的箱子,若箱子里面是写有数字 0 的纸条,那么 j > i;若箱子里面是写有数字 1 的纸条,那么 j >= i

三、数学的方式解决

  • 数学中,锁称为公钥,钥匙称为私钥

  • 富翁 B 有公钥,没有私钥

  • B 选出一个大数 x,用公钥进行加密 E(x) = k(解密 D(k)=x)

  • B 计算 k-j+1 = m,把 m 发给 A

  • 富翁 A 有公钥,有私钥

  • A 计算 k-j+1,k-j+2 ...... k-j+j ...... k-j+10,其中 k-j+j=k

  • A 对上面的数进行解密 yu = D(k-j+u):y1 , y2 ...... yj ...... y10,其中 yj = D(k) = x

  • A 对 yu 求模 zu = yu mod P,P 是一个质数:z1 , z2 ...... zj ...... z10,由于 yj=x,则 zj = x mod P

  • A 对 zi 和之前的不变,对 zi 之后的数加 1,传递给 B

  • B 拿到一串数字后,关注 zj,若 x mod P = zj,那么 j <= x="" mod="" p="" j=""> i

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开微信扫一扫,即可进行扫码打赏哦

阅读 1307