近代密码学---IT实验04--百万富翁问题
- 格式:doc
- 大小:60.00 KB
- 文档页数:7
同态加密的百万富翁问题高效解决方案同态加密是一种重要的密码学技术,可以实现在加密状态下进行计算,保护数据隐私。
在实际应用中,同态加密可用于处理敏感数据,如医疗健康、金融交易等领域。
本文将介绍同态加密在解决百万富翁问题上的高效方案。
百万富翁问题是一个经典的数学问题,它的描述如下:公正的硬币抛掷若干次,若第一次正面朝上,甲方付给乙方一元钱;否则乙方付给甲方2的$n$次方元钱,其中$n$为正整数。
问题是什么情况下甲方能够确保比赛赢得到钱?传统的解决方案需要进行大量的计算,特别是在$n$较大时,计算复杂度非常高。
而同态加密可以改变这种情况,将所有的计算转化为在加密状态下进行,最后解密得到结果。
下面我们介绍如何使用同态加密来解决百万富翁问题。
首先,我们需要将问题转化为一个数学公式,即:$$A = \left\{\begin{aligned}1, & \text{第1次正面朝上} \\2^n, & \text{第1次反面朝上}\end{aligned}\right.$$其中$A$表示乙方要支付给甲方的金额。
使用同态加密,我们可以将$A$加密后得到一个密文$E(A)$,并对$E(A)$进行加密操作,得到$E(A^2)$。
接着,我们将$E(A^2)$发送给甲方,让甲方对其解密。
这样,甲方就能得到$A^2$的值了。
通过这种方法,可以得出以下公式:$$A^2 = \left\{\begin{aligned}1, & \text{第1次正面朝上} \\2^{2n}, & \text{第1次反面朝上}\end{aligned}\right.$$然后我们将$A^2$加密后得到$E(A^2)$,并对其进行加密操作,得到$E(A^4)$。
按照上述方式继续操作,我们可以得到:$$\begin{aligned}E(A^1) \to E(A^2) \to E(A^4) \to E(A^8) \to \cdots \to E(A^{2^{n-1}})\end{aligned}$$通过这种方式,甲方就能够得到$A^{2^{n-1}}$的值了。
世界上第一个因密码成为百万富翁的人20世纪初,一批密码天才纷纷登台亮相,在密码学领域迸发出耀眼的智慧之光。
德国的亚瑟·谢尔比乌斯(Arthur Scherbius),发明了鼎鼎大名的“恩尼格玛(Enigma)”密码机;瑞典的阿维德·格哈德·达姆(Arvid Gerhard Damm),创立了当时世界上唯一获得商业成功的密码机公司。
也是在这个时候,我们的主人公鲍里斯·哈格林开始在密码学领域崭露头角。
密码学新星闪亮登场上文提到的瑞典人达姆创立的公司里,有一个负责打理投资的年轻人格外引人注目,他就是鲍里斯·哈格林。
鲍里斯·哈格林(Boris Hagelin),1892年7月出生在其父工作的俄罗斯高加索地区,1914年从瑞典斯德哥尔摩皇家理工学院毕业,获得机械工程学位。
1922年,在父亲的安排下,他到达姆的公司工作。
三年之后,年轻的哈格林得知瑞典军方正在考虑购买“恩尼格玛”密码机。
他顿时来了兴趣,动手将达姆之前研发生产的不太稳定的B1密码机进行改造,安装了键盘和“恩尼格玛”那样的指示灯,使之更方便野战使用。
他将新诞生的密码机命名为B-21,瑞典陆军对于B-21非常满意,哈格林也于1926年为公司赢得了一笔大订单。
1927年,达姆去世后,哈格林父子低价收购了达姆的公司,哈格林开始更加自如地展现自己的发明天赋,从模仿走上了超越的道路。
他首先将B-21与电动打字机合为一体,生产出可以装在一个公文包大小的箱子中的B-211打印密码机,这个新发明以其机械速度快、更为精准、更省人力以及便于携带等优势,成为了1934年密码机市场上最受追捧的产品。
此后,哈格林一路开挂,应法国军方要求,受到自动售货机的启发,研发出了只有一本辞典大小的C-36密码机。
法国军方于1935年一次性订购了5000台。
哈格林这颗密码学新星冉冉升起,他耀眼的成就也被美国军方看在了眼里。
密码小巨人横空出世1936年,哈格林结识了后来被誉为美国密码学之父的威廉·弗雷德里克·弗里德曼(William Frederick Ficedman),曾在俄罗斯共同生活的经历和对于复杂奥妙的密码学的痴迷,使得两人成为挚友。
密码学原理与实践答案1.1 几个简单的密码体制注:小写代表明文,大写代表密文分组密码:单表代换密码:移位密码,代换密码,仿射密码多表代换密码:维吉尼亚密码,希尔密码非代换密码:置换密码流密码:同步流密码,异步流密码1.1.1 移位密码密码体制:令 P = C = K = Z 26 P=C=K=Z_{26} P=C=K=Z26 有 e K ( x ) = ( x + K ) m o d 26 d K ( y ) = ( x −K ) m o d 26 e_{K}(x)=(x+K)mod 26 \quad d_K(y)=(x-K)mod 26 eK(x)=(x+K)mod26dK(y)=(x−K)mod26 并且当K=3时叫凯撒密码。
密钥空间为261.1.2 代换密码密码体制:令 P = C = Z 26 P=C=Z_{26} P=C=Z26 对任意的置换π ∈ K \pi \in K π∈K,有 e π ( x ) = π ( x ) d π ( y ) = π − 1 ( y ) e_{\pi}(x)=\pi(x) \quadd_{\pi}(y)=\pi^{-1}(y) eπ(x)=π(x)dπ(y)=π−1(y)。
密钥空间为 26 ! 26! 26!1.1.3 仿射密码加密函数形式: e ( x ) = ( a x + b ) m o d 26e(x)=(ax+b)mod 26 e(x)=(ax+b)mod26,要求仿射函数必须是单射,也就是同余方程 a x ≡ y ( m o d 26 ) ax\equivy(mod 26) ax≡y(mod26)有唯一解。
上述同余方程有唯一解⇔ g c d ( a , 26 ) = 1\Leftrightarrow gcd(a,26)=1 ⇔gcd(a,26)=1 ,证明略。
此时a的取值为0~25之间与26互素的数,共12个,b的取值为0~25。
这时密钥空间为312。
云南大学数学与与统计学院上机实践报告一、实验目的实现基于GMP的姚氏百万富翁问题二、实验内容实现基于GMP的百万富翁问题:设有N个百万富翁,他们希望比较出谁更富有,但是不希望任何其他人知道自己的真实财富值,以课堂上讲过的百万富翁问题为基础设计设计比富方案,取N=3。
三、实验环境Linux平台 Code::Block IDE四、实验结果1. 预备知识:A、姚氏百万富翁问题解决方案Alice--i, Bob--j 1<=i,j<=101)Bob选择一个大随机数x,并用Alice的公钥加密k=Ea(x)2)Bob计算k-j,并把结果发给Alice3)Alice计算y u=Da(k-j+u),u=1,2,...,104)Alice随机选择大素数p,计算z u=y u mod p,u=1,2,...,10验证所有的u≠v,|z u-z v|>=2如果不成立,Alice重新选择大素数5)Alice将以下数列发给Bob,z1,z2,...,zi,z i+1+1,...,z10+1,p6)Bob检查第j个数组是否为x mod p,若是i>=j,否则i<jB、RSA算法RSA中重要的是密钥的产生:选取大素数p、q;计算n = p * q 以及phi = (p-1)(q-1);选取e,满足1<e<phi,gcd(phi,e) = 1;计算d ,满足d*e = 1 (mod phi)得到密钥{d,n}以及公钥{e,n};加密:CipherText = m^e mod n;解密:PlainText = C^d mod n2. 实验过程2.1 整体算法:以姚氏百万富翁问题(N=2)的基础上修改实现。
Step1: 用RSA来实现加密和解密的操作(RSA为1-1 fuction)Step2: 对每一个参与者给予一个下表标记P.index = 1…nStep3: 姚氏百万富翁的解决方案实现两两比较Step4: 两者的大小比较之后实现下标的交换,大的持有大的index,小的持有小的index.Step5: 最后输出N个人的下标,下标越大财富越高。
破解你的“百万富翁密码”你完全有能力赚到更多的钱,你也一定能过上更快乐、更健康、更轻松的生活。
怎样才能实现呢?那就是改行。
在《百万富翁的思维》(The Millionaire Mind)一书中,斯坦利(Thomas Stanley)写道:“拥有高度创造性智慧的百万富翁通常能正确地做出一个十分重要的职业生涯决策:他们会选择一个能赚到很多钱的职业,而这个职业通常又是他们所热爱的。
请记住,如果你热爱自己所做的工作,你的生产效率就会很高,你的特殊创造天赋也会显现出来。
”斯坦利也从反面论述了这一观点:“正如大多数百万富翁所述,若将许多努力投入与个人能力不匹配的工作中,其直接结果便是压力。
如果从事与你的资质不吻合的职业,无论是心理还是生理上都会感觉更困难、更吃力。
”以下是你要走的第一步,做一做笔者所着《百万富翁密码》(Millionaire Code)一书中的小测试。
该测试是根据荣格(Carl Jung)的性格类型和迈尔斯-布里格斯(Myers-Briggs)的16种性格类型设计而成的。
请做一下这个由四部分组成的简单测试,找到你的四字母“百万富翁密码”。
之后,你可以按图索骥,查看迈尔斯-布里格斯的16种性格类型,探索与适合你的新职业选择相关的一些具体信息。
这项测试看起来可能和你多年前做过的某个测试差不多。
但情况会发生变化,所以请以开放的态度接受你身上发生的巨大变化。
你不会是第一个离开银行,去做艺术家、珠宝设计师或记者的金融从业者,但你也许会成为最快乐的那一个。
这项测试非常简单,没有艰涩的心理学术语。
请凭直觉依次从以下四对字母中挑选出一个与你的情况(而不是工作、社交场合中其他人,甚至家人对你的期望)最为吻合的字母。
你将会认识到真正的自己是什么样的:1. 外向型还是内向型?(E或I)如果可以选择,你更希望生活在什么样的世界里呢?我们都希望二者兼有,但外向型的人更喜欢沟通、社交,与人聊天和倾听。
内向型的人则更喜欢他们自己的内心世界──较之与现实世界打交道,他们更爱独处、阅读、安静地思考,在自己的内心世界里生活和解决问题。
smi三出三进——百万富翁制造⽅程式详解三,三出三进——百万富翁制造⽅程式详解 下⾯和⼤家详细介绍下三出三进,这是SMI的灵魂,是百万富翁制造⽅程式,也是公司上市前我们最主要的获利⼯具,⼤家⼀定要看懂,并严格按照“三出三进”操作,只有这样才能使你的收⼊不断倍增,使你的收益最⼤化,最终实现财富⾃由,甚⾄成为百万乃⾄千万富翁。
下⾯开始: 所谓三出三进,就是把你⼿中的游戏代币分成三波往外出售,在每出售⼀波后,所获得的销售收⼊先扣除10%的⼿续费,然后所得净收⼊的30%除了按规则必须在⼀个⽉内回购游戏代币外,剩余的70%再增加新的户⼝,⼀⽅⾯可以使您的分红资格不断增多,另⼀⽅⾯,可以使您购买更多的游戏代币,同时⼜获得⾃荐佣⾦,这样轮番操作就能确保你赚50%—400%的利润。
举例说明:⽐如你以0.24美元/股买得9000个游戏代币。
这时你要出售的话,把9000股÷3=3000股(这就是你要每波出售的游戏代币数)出售的价格是按公司的标准制定的:第⼀波售价:[买价+基价(买价÷3)]×1.1=0.36美元/股,即[买价0.24+基价0.08(0.24÷3)]×1.1=0.36,第⼀波售3000股×0.36美元/股=1008美元,1008美元这就是你的销售收⼊,也是你的⽑收⼊,然后扣除10%的⼿续费,101美元,还剩余907美元,这是你的净收⼊,然后根据游戏规则,净收⼊的30%要⽤来利复利,也就是回购游戏代币,算下的话,907的30%差不多272美元,这272美元系统会计算好⾃动打⼊你的游戏代币账户,必须在⼀个⽉内回购游戏代币,⼀⽅⾯保证买卖关系循环不断,推动价格稳定上涨;另⼀⽅⾯保证你有持续稳定的收⼊。
剩余的净收⼊908-272=636美元,会打⼊您的电⼦钱包,您可以套现改善⽣活,或者提出本⾦,让您⽆后顾之忧,不过我建议您应该增加新的户头,刚才说了,⼀⽅⾯可以使您的分红资格不断增多,另⼀⽅⾯,可以使您购买更多的游戏代币,⼜获得⾃荐佣⾦,⼤⼤加快了您成为百万富翁的进程。
多方安全计算经典问题整理题目多方安全计算经典问题整理摘要数据挖掘可以帮助人们在纷繁多样的数据中找出隐晦的有用信息,并且已经在电信、银行、保险、证券、零售、生物数据分析等领域得到了广泛的应用。
然而,就在数据挖掘工作不断深入的同时,数据隐私保护问题也日益引起人们的广泛关注,如何在保护数据隐私的前提下进行数据挖掘已经成为当前亟待解决的一个问题。
本报告选取隐私保持数据挖掘中的多方安全计算领域进行相关的整理工作,罗列了多方安全计算领域中较为经典的姚式百万富翁问题、安全电子选举问题以及几何位置判定问题。
一方面,在翻阅文献的基础上为这些问题筛选出前人给出的相对简洁易懂的解决方案;另一方面也对文中所展示的解决方案从时间复杂度、应用范围的局限性以及潜在安全隐患等角度进行了评价。
另外,本报告也对各个问题中有待进一步研究解决的问题进行了简单的阐述,以起到抛砖引玉的效果。
在报告的最后,也谈及了自己这门课程的上课感受。
感谢学院开设的这门课程,感谢授课的各位老师,让我在较短的时间内得以大致了解当前数据库领域中所出现的一些前沿性的成果和问题,着实获益匪浅!希望这种类型的课可以继续办下去,越办越好!关键词:多方安全计算;百万富翁;电子选举;几何位置判定目录1 引言 (1)2 多方安全计算概述 (2)3 百万富翁问题 (3)3.1 姚式百万富翁问题解决方案[1] (4)3.1.1 方案定义 (4)3.1.2 方案评价 (5)3.2 基于不经意传输协议的高效改进方案[8] (6)3.2.1 不经意传输协议 (6)3.2.2 改进方案 (7)4 安全电子选举问题 (8)4.1 选举模型 (9)4.2 多选多的电子选举方案[14] (10)4.2.1 方案定义 (10)4.2.2 方案评价 (11)5 保护私有信息的几何判定问题 (12)5.1 安全点积定义 (12)5.2 安全点积协议 (13)6 小结 (14)7 课程感受.............错误!未定义书签。
云南大学数学与统计学实验教学中心实验报告一、实验目的实现百万富翁问题二、实验内容编程实现百万富翁问题,并进行测试三、实验环境Ubuntu,C四、实验结果在实验结果中,分别对Alice比Bob富,Bob比Alice富,Alice和Bob一样富进行了测试。
1.Alice比Bob富:Input the money that Alice has:7Input the money that Bob has:4The random integer x is: 1024422031975416889616660570236992623323588570186682247548264The array of y is:y[1]:296083215129444988944335375925729982659143008915969389018344y[2]:1635694042402157602171705878835634353177165163514102758101542y[3]:964678013909433648381147976165209832360620955490956950390604y[4]:1024422031975416889616660570236992623323588570186682247548264y[5]:253052471583501852753195432225709017611374338712750293500893y[6]:1015273254136535694040167520781976149271937129864193718813446y[7]:1136524456263568836898467871839038881867962765501083214375585y[8]:513464716322918213597559216667860023983873535287826184590299y[9]:1176451135164734079110239484459016954851401138059447868351045y[10]:621562307153557276404532941354319363649607136750389165472183The array of z is:z[1]:441651567702671874604246939683z[2]:132778505466041111179292790885z[3]:396442120085523529467794244824z[4]:456539707643533157797819896734z[5]:434229747190604714094009236635z[6]:394080447515315341093647085594z[7]:290807514626645592093573938931z[8]:58830193484388859200987889642z[9]:360106665536664552178216226305z[10]:15110831715366343952336118829The result that x mod p is:456539707643533157797819896734Alice is perhaps richer than Bob!2.Bob比Alice富:Input the money that Alice has:3Input the money that Bob has:6The random integer x is: 1024422031975416889616660570236992623323588570186682247548264The array of y is:y[1]:188476017202111873425125706020117984842422695146899758382965 y[2]:1584113676402207974441432816433848105726563595172198809592154 y[3]:296083215129444988944335375925729982659143008915969389018344 y[4]:1635694042402157602171705878835634353177165163514102758101542 y[5]:964678013909433648381147976165209832360620955490956950390604 y[6]:1024422031975416889616660570236992623323588570186682247548264 y[7]:253052471583501852753195432225709017611374338712750293500893 y[8]:1015273254136535694040167520781976149271937129864193718813446 y[9]:1136524456263568836898467871839038881867962765501083214375585 y[10]:513464716322918213597559216667860023983873535287826184590299 The array of z is:z[1]:218414924523970285408221280407z[2]:360070040338841654943061799301z[3]:441651567702671874604246939683z[4]:132778505466041111179292790886z[5]:396442120085523529467794244825z[6]:456539707643533157797819896735z[7]:434229747190604714094009236636z[8]:394080447515315341093647085595z[9]:290807514626645592093573938932z[10]:58830193484388859200987889642The result that x mod p is:456539707643533157797819896734Bob is richer than Alice!3.Alice和Bob一样富:Input the money that Alice has:5Input the money that Bob has:5The random integer x is: 1024422031975416889616660570236992623323588570186682247548264The array of y is:y[1]:1584113676402207974441432816433848105726563595172198809592154 y[2]:296083215129444988944335375925729982659143008915969389018344 y[3]:1635694042402157602171705878835634353177165163514102758101542 y[4]:964678013909433648381147976165209832360620955490956950390604 y[5]:1024422031975416889616660570236992623323588570186682247548264 y[6]:253052471583501852753195432225709017611374338712750293500893 y[7]:1015273254136535694040167520781976149271937129864193718813446 y[8]:1136524456263568836898467871839038881867962765501083214375585 y[9]:513464716322918213597559216667860023983873535287826184590299 y[10]:1176451135164734079110239484459016954851401138059447868351045 The array of z is:z[1]:360070040338841654943061799301z[2]:441651567702671874604246939683z[3]:132778505466041111179292790885z[4]:396442120085523529467794244824z[5]:456539707643533157797819896734z[6]:434229747190604714094009236636z[7]:394080447515315341093647085595z[8]:290807514626645592093573938932z[9]:58830193484388859200987889642z[10]:360106665536664552178216226305The result that x mod p is: 456539707643533157797819896734Alice is perhaps richer than Bob!五、程序源代码://**Solution to the Millionmaires' Problem#include<gmp.h>#include<stdio.h>#include<malloc.h>#include<string.h>unsigned int size_of(mpz_t op){char *str;unsigned l,size;mpz_t tmp;mpz_init(tmp);l = 1000;while(1){str = (char *)malloc(sizeof(char)*l);mpz_get_str(str,2,op);mpz_set_str(tmp,str,2);if(mpz_cmp(tmp,op) == 0) break;l = l * 100;}size = strlen(str);return size;}void RSA_gmp(mpz_t *d,mpz_t *e,mpz_t *n,unsigned int l) {//generate secret key d,e,nchar *str;int size;unsigned long l1,l2,seed;mpz_t p,q,fn,fn_r,tmp;//,max;l1 = l / 2;mpz_init(p);mpz_init(q);mpz_init(fn);mpz_init(fn_r);mpz_init_set_ui(tmp,2);//mpz_init_set_ui(max,2);//mpz_pow_ui(max,2,l-1);mpz_pow_ui(tmp,tmp,l1-1);seed=rand()%(1<<31)+100; //seed在定义时,生成随机数。