C++ 程序,用于实施 Naor-Reingold 伪随机函数


Naor-Reingold 伪随机函数是生成随机数的另一种方法。

1997 年,Moni Naor 和 Omer Reingold 描述了采用私钥和公钥密码进行各种加密原语的高效构造方法。令 p 和 l 为素数且 l | p−1。选择乘法阶为 l 的 Fp* 的元素 g ε。然后对于每个 n 维向量 a = (a0,a1, ..., an)。

他们定义函数

fa(x)=ga0.a1x1a2x2…..anxn ε Fp

其中 x = x1 … xn 是整数 x 的位表示,0 ≤ x ≤ 2 n−1

此函数可用作许多加密方案的基础,包括对称加密、身份验证和数字签名。

算法

Begin
   Declare the variables p, l, g, n, x
   Read the variables p, l, g, n
   Declare array a[], b[]
   For i=0 to 10, do
      x = rand() mod 16;
      For j=g to 0, do
         b[j] = x mod 2;
         x =x divided by2;
      Done
      Assign mult = 1
      For k = 0 to n do
         mult = mult *(pow(a[k], b[k]))
      Done
      Print the random numbers
   Done
End

示例代码

#include <iostream>
using namespace std;
int main(int argc, char **argv) {
   int p = 7, l = 2, g = 3, n = 6, x;
   int a[] = { 1, 2, 2, 1 };
   int b[4];
   cout << "The Random numbers are: ";
   for (int i = 0; i < 10; i++) {
      x = rand() % 16;
      for (int j = 3; j >= 0; j--) {
         b[j] = x % 2;
         x /= 2;
      }
      int mult = 1;
      for (int k = 0; k < 6; k++)
         mult *= pow(a[k], b[k]);
      cout << pow(g, mult)<<" ";
   }
}

输出

The Random numbers are: 81 81 3 9 3 81 9 9 3 9

更新于: 2019 年 7 月 30 日

132 次浏览

开启您的 职业生涯

完成课程,获得认证

开始
广告