密码学有关的一道算法题,有人能讲解一下具体思路吗,如果能实现的话可以私下提供报酬。

问题描述:

 

题⽬

 

Alice和Bob刚刚得知⼀门考试的成绩,他们都想知道两个

⼈的成绩是否相同。但是,谁也不愿意暴露⾃⼰的成绩。假设成绩采⽤优、良、中、差四个等级。设计⼀种安全的游戏

⽅案,使Alice和Bob在游戏中执⾏相应的算法,在不暴露⾃⼰成绩的前提下判定⼆⼈成绩是否相同。

为了得到正确的判定结果,假设Alice和Bob不会篡改⾃⼰的成绩,但为了保证游戏的公平性,应保证Alice和Bob均能验证结果的正确性。

给定如下三个场景,分别对应三个游戏。

  1. 除了Alice和Bob之外,存在⼀个第三⽅且知道⼆⼈的成绩。假设第三⽅是可信的,不会泄漏与成绩相关的任何信息。
  2. 除了Alice和Bob之外,存在⼀个第三⽅但只知道其中

⼀个⼈的成绩。假设第三⽅是可信的,不会泄漏与成绩相关的任何信息。

  1. 不存在任何知道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/dife-hellman- key-exchange
    • https://www.cryptopp.com/docs/ref/struct_d_h.html

 

程序设计要求

  1. 在给定公开参数上编写程序。
  2. 多个程序之间可以通过⽂件传递信息。
  3. 编程语⾔不限。推荐使⽤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

 

验收要求

  1. 分别演⽰Alice和Bob执⾏程序的过程,给出成绩相同和不同时的运⾏结果。
  2. 给出当Alice和Bob最终得到结果时,游戏所花费的时间(单位:ms)。
  3. 给出游戏所花费的存储空间(例如,全部⽂件⼤⼩的总和,单位:bit)。

你学号

你学号和班级?