百万富翁问题
介绍
- 姚期智(2000年图灵奖获得者)
- 1982年姚期智提出百万富翁问题
- 问题描述
A 资产
i
亿元,B 资产j
亿元,其中,通过一个规则比较两个人的财富但是不会告诉彼此的财富值
- 有十个箱子,每个箱子都有锁。(锁是公钥,钥匙是私钥)
A
有钥匙,可以打开箱子B
没有钥匙,但是可以关上箱子的锁(B没有私钥,但是有公钥)A
的财富为i
亿元,找到第i
个箱子,并将i之前的箱子都装数值0
,i
以及i
之后的箱子全部装数值1
,B
的资产为j
亿元,B找到第j
个箱子,并拿出这个箱子交给A
同时将j之外的其他箱子烧毁,A
有钥匙打开箱子,出现两种结果- 箱子里面的值为
0
, - 箱子里面的值为
1
,
- 箱子里面的值为
具体比较步骤
B
(有公钥,没有私钥)的操作B
选取一个大数字X
,通过- 公钥加密得到结果
K
,即 - 私钥解密
- 公钥加密得到结果
计算
,把 m
这个数字传给A
A
(有公钥,有私钥)的操作- 计算
- 解密
并且 - 对应得到
- 对应得到
- 取模
==,其中p为质数== - 对应得到
- 对应得到
A
的资产为i
亿元,令数值不变,将 每个数值加上1并所有值传给B
- 计算
B
最终检验A
传递过来的值B
只需要关注,因为 - 将
B
一开始选取的大数字X
对P
进行取模运算,即 - 如果
,说明 并没有进行 +1
操作,所以为前一部分 不变数值的范围中的数值,所以 - 如果
,说明 进行 +1
操作,所以为后一部分 数值的范围中的数值,所以