Explicamos la notación utilizada en la definición de OMAC. El valor de iL (línea 40: i un entero en {2, 4} y L ∈ {0, 1} n ) es la cadena de n bits que se obtiene al multiplicar L por la n- cadena de bits que representa el número i. La multiplicación se realiza en el campo fi nito GF (2 n ) usando un polinomio canónico para representar puntos de campo. El polinomio canónico que seleccionamos es el primer polinomio lexicográficamente entre los polinomios irreducibles de grado n que tienen un número mínimo de coeficientes distintos de cero. Para n = 128, el polinomio indicado es x 128 + x 7 + x 2 + x + 1. En ese caso, 2L = L & lt ; < 1 si el primer bit de L es 0 y 2L = (L < < 1) ⊕ 0 120 10000111 de lo contrario, donde L < < 1 significa el desplazamiento a la izquierda de L en una posición (el primer bit desaparece y un cero entra en el último bit). El valor de 4L es simplemente 2 (2L). Advertimos que para evitar ataques de canal lateral, se debe implementar la operación de duplicación en forma constante.
Básicamente, se me acaba de dar que el polinomio a usar en la multiplicación finita para n = 128 es x 128 + x 7 + x 2 + x + 1. Quiero que mi implementación sea abstracta, ya que no depende de los detalles del código cifrado que se está utilizando. Para permitir que el tamaño de bloque n sea cualquier número en lugar de codificación 128 o algunos otros, ¿cómo puedo hacer que mi software calcule el polinomio correcto?