FLASH

SFLASH  es un algoritmo de firma digital asimétrica recomendado por el proyecto europeo NESSIE en 2003. SFLASH se basa en el esquema Matsumoto-Imai( MI ), también llamado C* . El algoritmo pertenece a una familia de esquemas de clave pública multidimensional, es decir, cada firma y cada hash de mensaje está representado por elementos del campo final K. SFLASH fue diseñado para aplicaciones muy específicas donde los costos de los algoritmos clásicos ( RSA , Elliptic Curves , DSA y otros) se vuelven extremadamente altos. : son muy lentos y tienen un tamaño de firma grande. Entonces SFLASH fue creado para satisfacer las necesidades de las tarjetas inteligentes económicas.

SFLASH es mucho más rápido y sencillo que RSA, tanto a la hora de crear como de verificar (verificar) una firma.

Introducción

La siguiente notación se utilizará a lo largo de este artículo:

  1.  — define el operador de concatenación .
  2.  es un operador definido como sigue: , donde , y los enteros r y s deben satisfacer: .

Parámetros del algoritmo

El algoritmo SFLASH utiliza dos campos definidos:

  1. definido como . Definir como una biyección entre y K como:
  2. . Definir como una biyección entre y como:
  3.  — Cadena oculta de 80 bits.

El algoritmo SFLASH también usa dos biyecciones afines s y t de a . Cada uno de los cuales es lineal oculto (matriz 67*67) y constante (columna 67*1), respectivamente.

Opciones abiertas

La clave pública reside en la función G from to definida como:

F es una función de a definida como

Generación de claves

Deje que next_7bit_random_string sea una cadena de 7 bits, que se genera llamando a CSPRBG (Generador de bits pseudoaleatorios criptográficamente seguros) 7 veces. Primero obtenemos el primer bit de la cadena, luego el segundo, y así hasta el séptimo.

1) Generamos Se pueden utilizar dos métodos para generar una matriz invertida de 67x67 : para i=0 a 66 para j=0 a 66 S_L[i,j]=pi(next_7bit_random_string) para i=0 a 66 para j=0 a 66 { si (i<j) entonces {U_S[i,j]=pi(next_7bit_random_string); L_S[i,j]=0;}; si (i > j) entonces {L_S[i,j]=pi(next_7bit_random_string); U_S[i,j]=0;}; si (i=j) entonces {repetir (z=next_7bit_random_string) hasta z!=(0,0,0,0,0,0,0); U_S[i,j]=pi(z); L_S[i,j]=1;}; }; 2) Generamos Use CSPRBG para encontrar los nuevos 67 elementos de K (desde la parte superior hasta la parte inferior de la columna de la matriz). Cada elemento de K se encuentra usando la función:

(next_7bit_random_string)

3) Generamos Igual que la matriz . 4) Generamos Igual que la columna . 5) Generamos Usando CSPRBG (Generador de bits pseudoaleatorios criptográficamente seguros) generamos 80 bits aleatorios.

Creación de una firma

Sea M nuestro mensaje para el que queremos encontrar una firma S. La creación de una firma S tiene el siguiente algoritmo:

1) Let  - estas son cadenas determinadas usando el algoritmo hash criptográfico SHA-1 :

, , , ,

2) Encuentre V - Cadena de 392 bits como:

3) Encuentra W - Cadena de 77 bits como:

4) Encuentra Y - una cadena de 56 K elementos como:

5) Encuentra R - una cadena de 11 K elementos como:

6) Encuentra B - elemento como:

7) Encuentra un elemento A como:

, donde F es una función de a definida como:

8) Buscar  - línea 67 elementos K:

9) Firma S - Cadena de 469 bits obtenida como:

Verificación (verificación) de la firma

Dado un mensaje M (cadena de bits) y una firma S (cadena de 256 bits). El siguiente algoritmo se utiliza para determinar la validez de la firma S del mensaje M:

1) Let  - estas son cadenas determinadas usando el algoritmo hash criptográfico SHA-1 :

, , , ,

2) Encuentre V - Cadena de 392 bits como:

3) Encuentra Y - una cadena de 56 K elementos como:

4) Encuentra Y' - una cadena de 56 K elementos como:

5) Compare las cadenas resultantes Y e Y'. Si son iguales, se acepta la firma, en caso contrario se rechaza.

Literatura

Enlaces