姚式百万富翁问题

问题简述

两个百万富翁都想比较到底谁更富有,但是有都不想让别人知道自己有多少钱。在没有可信的第三方的情况下如何进行?这就是著名的姚式百万赴富翁问题。
抽象并简化问题,假设Alice有一个整数i,公钥Eb,私钥Db。Bob有一个整数j,且 i , j ∈ [ 1 , 10 ] i,j\in [1,10] i,j[1,10]

协议流程

1.Bob选择一个大随机数x,用Alice的公钥加密: C = E b ( x ) C = Eb(x) C=Eb(x),将 C T = C − j CT = C - j CT=Cj发送给Alice;
2.Alice收到数据后,计算 Y u = D b ( C T + u ) , u ∈ [ 1 , 10 ] Y_{u} = Db(CT + u),u\in [1,10] Yu=Db(CT+u),u[1,10],选取一个大素数p(p比x稍小),计算 Z u = Y u m o d p Z_{u} = Y_{u} mod p Zu=Yumodp
3.Alice将 [ Z 1 , Z 2 , ⋯   , Z i , Z i + 1 + 1 , Z i + 2 + 1 , ⋯   , Z 10 + 1 ] [Z_1,Z_2,\cdots,Z_{i},Z_{i+1}+1,Z_{i+2}+1,\cdots,Z_{10}+1] [Z1,Z2,,Zi,Zi+1+1,Zi+2+1,,Z10+1]发送给Bob;
4.Bob查看 Z j Z_{j} Zj是否等于 x ( m o d p ) x (modp) x(modp),若等于,则 i ≥ j i \geq j ij,否则 i < j i < j i<j,将结果告知Alice;

简单分析

选取一个大素数,尽管Alice得到CT,要猜测j也是困难的;
Alice计算 Z u Z_{u} Zu后,从第i+1个位置开始,每个元素的值加上1,将序列发给Bob;
Bob解密后只关心第j个位置,因为 Z j = C T + j = C − j + j = E b ( x ) Z_{j} = CT+j = C-j + j= Eb(x) Zj=CT+j=Cj+j=Eb(x)(假设Bob得到的序列没有加1);
假设 i < j i<j i<j,则 Z j Z_{j} Zj肯定是被加上了1,即是说 Z i ≠ x ( m o d p ) Z_{i} \neq x (modp) Zi=x(modp);假设 i ≥ j i \geq j ij,则 Z j Z_{j} Zj的值就没有变,即是说 Z i = x ( m o d p ) Z_{i} = x (modp) Zi=x(modp)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值