Naor-Reingold Pseudo Random Function là một phương pháp tạo số ngẫu nhiên khác.
Moni Naor và Omer Reingold đã mô tả các cấu trúc hiệu quả cho các nguyên thủy mật mã khác nhau trong khóa cá nhân cũng như mật mã khóa công khai, vào năm 1997. Cho p và l là các số nguyên tố với l | p-1. Chọn một phần tử g ε Fp * có bậc nhân l. Sau đó, đối với mỗi vectơ n-chiều a =(a 0 , một 1 , ..., a n ).
Họ xác định chức năng
fa(x)=ga0.a1x1a2x2…..anxn ε Fp
trong đó x =x 1 … X n là biểu diễn bit của số nguyên x, 0 ≤ x ≤ 2 n − 1
Chức năng này có thể được sử dụng làm cơ sở của nhiều lược đồ mật mã bao gồm mã hóa đối xứng, xác thực và chữ ký số.
Thuật toán
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
Mã mẫu
#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)<<" "; } }
Đầu ra
The Random numbers are: 81 81 3 9 3 81 9 9 3 9