密码学有关的一道算法题,有人能讲解一下具体思路吗,如果能实现的话可以私下提供报酬。
问题描述:
题⽬
Alice和Bob刚刚得知⼀门考试的成绩,他们都想知道两个
⼈的成绩是否相同。但是,谁也不愿意暴露⾃⼰的成绩。假设成绩采⽤优、良、中、差四个等级。设计⼀种安全的游戏
⽅案,使Alice和Bob在游戏中执⾏相应的算法,在不暴露⾃⼰成绩的前提下判定⼆⼈成绩是否相同。
为了得到正确的判定结果,假设Alice和Bob不会篡改⾃⼰的成绩,但为了保证游戏的公平性,应保证Alice和Bob均能验证结果的正确性。
给定如下三个场景,分别对应三个游戏。
- 除了Alice和Bob之外,存在⼀个第三⽅且知道⼆⼈的成绩。假设第三⽅是可信的,不会泄漏与成绩相关的任何信息。
- 除了Alice和Bob之外,存在⼀个第三⽅但只知道其中
⼀个⼈的成绩。假设第三⽅是可信的,不会泄漏与成绩相关的任何信息。
- 不存在任何知道Alice或Bob成绩的第三⽅。
参考资料
- ElGamal公钥密码体制
- https://www.cryptopp.com/docs/ref/struct_el_gamal.html
- https://math.asu.edu/sites/default/files/elgamal.pdf
- Pedersen承诺⽅案,https://asecuritysite.com/public/ped.pdf
- Diffie-Hellman密钥交换⽅案
- https://cryptobook.nakov.com/key-exchange/diffie-hellman- key-exchange
- https://www.cryptopp.com/docs/ref/struct_d_h.html
程序设计要求
- 在给定公开参数上编写程序。
- 多个程序之间可以通过⽂件传递信息。
- 编程语⾔不限。推荐使⽤C++ GMP library,包括但不限于如下函数:
- 随机数函数(mpz_urandomm) https://gmplib.org/manual/
Integer-Random-Numbers
-
- 模幂函数(mpz_powm) https://gmplib.org/manual/Integer- Exponentiation
- 乘法函数(mpz_mul) https://gmplib.org/manual/Integer-
Arithmetic
-
- 乘法逆元函数(mpz_invert) https://gmplib.org/manual/ Number-Theoretic-Functions
-
- mpz_set_str函数:GMP参数均为mpz_t类型,该函数是将
const char* 类型转化为mpz_t类型,https://gmplib.org/ manual/Assigning-Integers
验收要求
- 分别演⽰Alice和Bob执⾏程序的过程,给出成绩相同和不同时的运⾏结果。
- 给出当Alice和Bob最终得到结果时,游戏所花费的时间(单位:ms)。
- 给出游戏所花费的存储空间(例如,全部⽂件⼤⼩的总和,单位:bit)。
答
你学号
答
你学号和班级?