La función pseudoaleatoria de Naor-Reingold es una función de generación de números aleatorios. Moni Naor y Omer Reingold describieron construcciones eficientes para varias primitivas criptográficas en la criptografía de clave privada y de clave pública.
Ejemplo:
Input : N = 5 Output: 9.0, 9.0, 3.0, 9.0, 3.0 Input : N = 7 Output: 9.0, 81.0, 9.0, 9.0, 3.0, 3.0, 9.0
Algoritmo:
- Declare las variables p, l, g, n, x y las arrays a[] y arr[]
- Tome la entrada del usuario para generar números aleatorios
- Genere números aleatorios y utilice el enfoque definido:
Let p and l be prime numbers with l|p−1. Select an element g ε Fp* of multiplicative order l. Then for each n-dimensional vector a = (a0,a1, ..., an). They define the function as: fa(x)=ga0.a1x1a2x2…..anxn ε Fp
- Imprime los números aleatorios
A continuación se muestra la implementación de la función pseudoaleatoria de Naor-Reingold:
Java
// Java Program to Implement Naor-Reingold // Pseudo Random Function import java.util.*; public class Main { public static void randomNumbers() { // Creating arrays and defining variables int p = 7, l = 2, g = 3, n = 6, x; int a[] = { 1, 2, 2, 1 }; int arr[] = new int[4]; Random random = new Random(); int num = 10; System.out.println("The Random numbers are: "); // Generating Random Numbers using // Naor-Reingold Pseudo Random Function approach for (int i = 0; i < num; i++) { x = random.nextInt(num) % 16; for (int j = 3; j >= 0; j--) { arr[j] = x % 2; x /= 2; } int mult = 1; for (int k = 0; k < 4; k++) { mult *= Math.pow(a[k], arr[k]); } System.out.print(Math.pow(g, mult) + ", "); } } public static void main(String args[]) { randomNumbers(); } }
Producción
The Random numbers are: 9.0, 9.0, 3.0, 81.0, 3.0, 81.0, 9.0, 9.0, 3.0, 3.0,