
En criptografía , una función de esponja o una construcción de esponja es cualquiera de una clase de algoritmos con un estado interno finito que toman un flujo de bits de entrada de cualquier longitud y producen un flujo de bits de salida de cualquier longitud deseada. Las funciones de esponja tienen usos tanto teóricos como prácticos. Se pueden utilizar para modelar o implementar muchas primitivas criptográficas , incluidos hashes criptográficos , códigos de autenticación de mensajes , funciones de generación de máscaras , cifrados de flujo , generadores de números pseudoaleatorios y cifrado autenticado . [1]
Construcción
Una función de esponja se construye a partir de tres componentes: [2]
- una memoria de estado, S , que contiene b bits,
- una función
- una función de relleno P
S se divide en dos secciones: una de tamaño r (la tasa de bits) y la parte restante de tamaño c (la capacidad). Estas secciones se denominan R y C respectivamente.
f produce una permutación pseudoaleatoria de los estados de S .
P añade suficientes bits a la cadena de entrada para que la longitud de la entrada rellenada sea un múltiplo entero de la tasa de bits, r . Esto significa que la entrada se segmenta en bloques de r bits.
Operación
La función de esponja "absorbe" (en la metáfora de la esponja ) todos los bloques de una cadena de entrada rellena de la siguiente manera:
- S se inicializa a cero
- para cada bloque B de r bits de P (cadena)
- R se reemplaza con R XOR B (usando XOR bit a bit )
- S se reemplaza por f ( S )
La salida de la función esponja ahora está lista para ser producida ("exprimida") de la siguiente manera:
- repetir
- generar la porción R de S
- S se reemplaza por f ( S ) a menos que la salida esté completa
Si quedan menos de r bits por emitir, entonces R se truncará (solo se emitirá una parte de R ).
Otra metáfora describe la memoria de estado como un " depósito de entropía ", con la entrada "vertida" en el depósito, y la función de transformación a la que se hace referencia como "revolver el depósito de entropía". [3]
Tenga en cuenta que los bits de entrada nunca se transfieren mediante XOR a la parte C de la memoria de estado, ni tampoco se transfieren bits de C directamente a la salida. El grado en que C se altera por la entrada depende completamente de la función de transformación f. En aplicaciones hash, la resistencia a los ataques de colisión o preimagen depende de C , y su tamaño (la "capacidad" c ) es típicamente el doble del nivel de resistencia deseado.
Construcción dúplex
También es posible absorber y comprimir de forma alternada. [1] Esta operación se denomina construcción dúplex o duplexación. Puede ser la base de un sistema de cifrado autenticado de una sola pasada.
- El estado S se inicializa a cero
- para cada bloque B de r bits de la entrada
- R se combina con B mediante XOR
- S se reemplaza por f ( S )
- R ahora es un bloque de salida de tamaño r bits.
Modo de sobrescritura
Es posible omitir las operaciones XOR durante la absorción, manteniendo al mismo tiempo el nivel de seguridad elegido . [1] En este modo, en la fase de absorción, el siguiente bloque de la entrada sobrescribe la parte R del estado. Esto permite mantener un estado más pequeño entre los pasos. Dado que la parte R se sobrescribirá de todos modos, se puede descartar de antemano, solo se debe mantener la parte C.
Aplicaciones
Las funciones de esponja tienen usos tanto teóricos como prácticos. En el criptoanálisis teórico, una función de esponja aleatoria es una construcción de esponja donde f es una permutación o transformación aleatoria, según corresponda. Las funciones de esponja aleatorias capturan más de las limitaciones prácticas de las primitivas criptográficas que el modelo de oráculo aleatorio ampliamente utilizado , en particular el estado interno finito. [4]
La construcción de la esponja también se puede utilizar para construir primitivas criptográficas prácticas. Por ejemplo, la esponja criptográfica Keccak con un estado de 1600 bits ha sido seleccionada por el NIST como ganadora en la competencia SHA-3 . La fortaleza de Keccak deriva de la intrincada permutación de múltiples rondas f que desarrollaron sus autores. [5] El rediseño RC4 llamado Spritz hace referencia a la construcción de la esponja para definir el algoritmo.
Para otros ejemplos, se puede utilizar una función de esponja para crear un cifrado autenticado con datos asociados (AEAD), [3] así como esquemas de hash de contraseñas . [6]
Referencias
- ^ abc Bertoni, Guido; Daemen, Joan; Peeters, Michaël; van Assche, Giles. "Duplexing the Sponge: Single-Pass Authenticated Encryption and Other Applications" (PDF) . Consultado el 27 de marzo de 2023 .
- ^ Bertoni, Guido; Daemen, Joan; Peeters, Michael; van Assche, Giles. «La esponja y las construcciones dúplex» . Consultado el 27 de marzo de 2023 .
- ^ ab Rivest, Ron; Schuldt, Jacob (27 de octubre de 2014). "Spritz: un cifrado de flujo y una función hash esponjosos similares a RC4" (PDF) . Consultado el 29 de diciembre de 2014 .
- ^ Bertoni, Guido; Daemen, Joan; Peeters, Michael; van Assche, Giles. "Sobre la indiferenciabilidad de la construcción esponja" (PDF) . Consultado el 27 de marzo de 2023 .
- ^ Boutin, Chad (2 de octubre de 2012). "NIST selecciona al ganador de la competencia del algoritmo hash seguro (SHA-3)". NIST . Consultado el 4 de octubre de 2012 .
- ^ van Beirendonck, M.; Trudeau, L.; Giard, P.; Balatsoukas-Stimming, A. (29 de mayo de 2019). "Un núcleo FPGA Lyra2 para criptomonedas basadas en Lyra2REv2" . Simposio internacional IEEE sobre circuitos y sistemas (ISCAS). Sapporo, Japón: IEEE. págs. 1 a 5. arXiv : 1807.05764 . doi :10.1109/ISCAS.2019.8702498.