Skein es una función hash criptográfica y uno de los cinco finalistas en el concurso de funciones hash del NIST . Ingresó como candidato para convertirse en el estándar SHA-3 , el sucesor de SHA-1 y SHA-2 , y finalmente perdió ante el candidato de hash del NIST, Keccak . [2]
General | |
---|---|
Diseñadores | Bruce Schneier , Niels Ferguson y col. |
Derivado de | Tres peces |
Certificación | Finalista SHA-3 |
Detalle | |
Tamaños de resumen | arbitrario |
Estructura | Iteración de bloque único |
Rondas | 72 (tamaño de bloque de 256 y 512), 80 (tamaño de bloque de 1024) |
Velocidad | 6.1 cpb en Core 2 . [1] |
El nombre Madeja se refiere a cómo la función Madeja entrelaza la entrada, similar a una madeja de hilo. [1]
Historia
Skein fue creado por Bruce Schneier , Niels Ferguson , Stefan Lucks , Doug Whiting, Mihir Bellare , Tadayoshi Kohno, Jon Callas y Jesse Walker.
Skein se basa en el cifrado de bloque modificable Threefish comprimido mediante el modo de encadenamiento Unique Block Iteration (UBI), una variante del modo hash Matyas-Meyer-Oseas , [3] al tiempo que aprovecha un sistema de argumentos opcional de bajo costo para mayor flexibilidad.
El algoritmo de Skein y una implementación de referencia se entregaron al dominio público . [4]
Funcionalidad
Skein admite tamaños de estado interno de 256, 512 y 1024 bits y tamaños de salida arbitrarios. [5]
Los autores afirman que 6,1 ciclos por byte para cualquier tamaño de salida en un Intel Core 2 Duo en modo de 64 bits. [6]
El núcleo de Threefish se basa en una función MIX que transforma 2 palabras de 64 bits usando una sola suma, rotación por una constante y XOR. El modo de encadenamiento UBI combina un valor de encadenamiento de entrada con una cadena de entrada de longitud arbitraria y produce una salida de tamaño fijo.
La no linealidad de Threefish proviene completamente de la combinación de operaciones de adición y OR exclusivos ; no utiliza S-boxes . La función está optimizada para procesadores de 64 bits, y el documento de Skein define características opcionales como hash aleatorio , hash de árbol en paralelo , un cifrado de flujo , personalización y una función de derivación de claves .
Criptoanálisis
En octubre de 2010 se publicó un ataque que combina el criptoanálisis rotacional con el ataque de rebote . El ataque encuentra colisiones rotacionales en 53 de 72 rondas en Threefish-256 y 57 de 72 rondas en Threefish-512. También afecta a la función hash de la madeja. [7] Este es un seguimiento del ataque anterior publicado en febrero, que rompe 39 y 42 rondas respectivamente. [8]
El equipo de Skein modificó la constante clave del cronograma para la ronda 3 de la competencia de la función hash del NIST, para hacer que este ataque sea menos efectivo, aunque creen que el hash aún sería seguro sin estos ajustes. [1]
Ejemplos de hashes de madejas
Valores hash de cadena vacía.
Madeja-256-256 ("")c8877087da56e072870daa843f176e9453115929094c3a40c463a196c29bf7baMadeja-512-256 ("")39ccc4554a8b31853b9de7a1fe638a24cce6b35a55f2431009e18780335d2621Madeja-512-512 ("")bc5b4c50925519c290cc634277ae3d6257212395cba733bbad37a4af0fa06af41fca7903d06564fea7a2d3730dbdb80c1f85562dfcc070334ea4d1d9e72cba7a
Incluso un pequeño cambio en el mensaje resultará (con una probabilidad abrumadora) en un hash mayormente diferente, debido al efecto de avalancha . Por ejemplo, agregando un punto al final de la oración:
Madeja-512-256 (" El rápido zorro marrón salta sobre el perro perezoso ")b3250457e05d3060b1a4bbc1428bc75a3f525ca389aeab96cfa34638d96e492aMadeja-512-256 (" El rápido zorro marrón salta sobre el perro perezoso ").41e829d7fca71c7d7154ed8fc8a069f274dd664ae0ed29d365d919f4e575eebbMadeja-512-512 (" El rápido zorro marrón salta sobre el perro perezoso ")94c2ae036dba8783d0b3f7d6cc111ff810702f5c77707999be7e1c9486ff238a7044de734293147359b4ac7e1d09cd247c351d69826b78dcddd951f0ef912713Skein-512-512 (" El rápido zorro marrón salta sobre el perro perezoso ").658223cb3d69b5e76e3588ca63feffba0dc2ead38a95d0650564f2a39da8e83fbb42c9d6ad9e03fbfde8a25a880357d457dbd6f74cbcb5e728979577dbce5436
Referencias
- ^ a b c Ferguson; et al. (1 de octubre de 2010). "La familia de funciones Skein Hash" (PDF) . Cite journal requiere
|journal=
( ayuda ) - ^ "NIST selecciona ganador de la competencia de algoritmo de hash seguro (SHA-3)" . NIST . 2012-10-02 . Consultado el 2 de octubre de 2012 .
- ^ http://www.skein-hash.info/sites/default/files/skein1.3.pdf p. 6
- ^ skein_NIST_CD_121508.zip en skein-hash.info, skein.c "Implementación de la función hash Skein . Autor del código fuente: Doug Whiting, 2008. Este algoritmo y código fuente se liberan al dominio público".
- ^ "Ahora de Bruce Schneier, la función Skein Hash" . Slashdot . 2008-10-31 . Consultado el 31 de octubre de 2008 .
- ^ Documento que describe la función hash, versión 1.3 (01/10/2010)
- ^ Dmitry Khovratovich; Ivica Nikolic; Christian Rechberger (20 de octubre de 2010). "Ataques de rebote rotacional en madeja reducida" . Cite journal requiere
|journal=
( ayuda ) - ^ Dmitry Khovratovich y Ivica Nikolić (2010). "Criptoanálisis rotacional de ARX" (PDF) . Universidad de Luxemburgo . Cite journal requiere
|journal=
( ayuda )
enlaces externos
- Sitio web oficial de Skein
- Página web de la madeja de Bruce Schneier
Implementaciones
- SPARKSkein - una implementación de Skein en SPARK , con pruebas de seguridad de tipo
- Botan contiene una implementación C ++ de Skein-512
- nskein : una implementación .NET de Skein con soporte para todos los tamaños de bloque
- Módulo pyskein Skein para Python
- PHP-Skein-Hash Hash de Skein para PHP en GitHub
- Digest :: Skein , una implementación en C y Perl
- Implementación de skeinfish AC # de Skein y Threefish (basado en la versión 1.3)
- Implementaciones Java, Scala y Javascript de Skein 512-512 (basadas en la versión 1.3)
- Una implementación Java de Skein (basada en la versión 1.1)
- Una implementación de Skein en Ada
- skerl , función hash de madeja para Erlang, a través de NIF
- Madeja 512-512 implementada en Bash
- Madeja implementada en Haskell
- Código fuente VHDL desarrollado por Cryptographic Engineering Research Group (CERG) en la Universidad George Mason
- skeinr Skein implementado en Ruby
- fhreefish Una implementación eficiente de Skein-256 para microcontroladores Atmel AVR de 8 bits, que cumple con las estimaciones de rendimiento descritas en la especificación oficial