De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

SipHash es un add-rotación-xor (ARX) basada en la familia de funciones pseudoaleatorias creados por Jean-Philippe Aumasson y Daniel J. Bernstein en 2012, [1] : 165 [2] , en respuesta a una serie de "inundación de hash" negación- ataques de servicio a finales de 2011. [3]

Aunque está diseñado para usarse como una función hash para garantizar la seguridad, SipHash es fundamentalmente diferente de las funciones hash criptográficas como SHA en que solo es adecuado como código de autenticación de mensajes : una función hash con clave como HMAC . Es decir, SHA está diseñado para que sea difícil para un atacante encontrar dos mensajes X e Y tales que SHA ( X ) = SHA ( Y ), aunque cualquiera pueda calcular SHA ( X ). En cambio, SipHash garantiza que, habiendo visto X i y SipHash ( X i , k), un atacante que no conoce la clave k no puede encontrar (ninguna información sobre) k o SipHash ( Y , k ) para ningún mensaje Y ∉ { X i } que no haya visto antes.

Resumen [ editar ]

SipHash calcula el código de autenticación de mensajes de 64 bits a partir de un mensaje de longitud variable y una clave secreta de 128 bits. Fue diseñado para ser eficiente incluso para entradas cortas, con un rendimiento comparable al de las funciones hash no criptográficas, como CityHash , [4] : 496 [2], por lo que puede usarse para prevenir ataques de denegación de servicio contra tablas hash (" inundación de hash "), [5] o para autenticar paquetes de red . Más tarde se agregó una variante que produce un resultado de 128 bits. [6]

Una función hash sin clave, como SHA, solo es resistente a colisiones si se utiliza toda la salida. Si se utiliza para generar una salida pequeña , como un índice en una tabla hash de tamaño práctico, ningún algoritmo puede evitar las colisiones; un atacante solo necesita hacer tantos intentos como posibles resultados.

Por ejemplo, suponga que un servidor de red está diseñado para poder manejar hasta un millón de solicitudes a la vez. Realiza un seguimiento de las solicitudes entrantes en una tabla hash con dos millones de entradas, utilizando una función hash para asignar la información de identificación de cada solicitud a una de las dos millones de entradas posibles de la tabla. Un atacante que conoce la función hash solo necesita alimentarla con entradas arbitrarias; uno de cada dos millones tendrá un valor hash específico. Si el atacante envía ahora unos cientos de solicitudes, todas elegidas para tener el mismo valor hash al servidor, eso producirá una gran cantidad de colisiones hash, ralentizando (o posiblemente deteniendo) el servidor con un efecto similar a una inundación de paquetes de muchos millones. peticiones. [7]

Al usar una clave desconocida para el atacante, una función hash con clave como SipHash previene este tipo de ataque. Si bien es posible agregar una clave a una función hash sin clave ( HMAC es una técnica popular), SipHash es mucho más eficiente.

Las funciones de la familia SipHash se especifican como SipHash- c - d , donde c es el número de rondas por bloque de mensaje yd es el número de rondas de finalización. Los parámetros recomendados son SipHash-2-4 para un mejor rendimiento y SipHash-4-8 para una seguridad conservadora. Algunos lenguajes utilizan Siphash-1-3 para el rendimiento ante el riesgo de futuros ataques DoS.

La implementación de referencia fue lanzada como software de dominio público bajo CC0 . [6]

Uso [ editar ]

SipHash se utiliza en implementaciones de tablas hash de varios software: [8]

Los siguientes programas utilizan SipHash de otras formas:

  • Bitcoin para ID de transacciones breves [14]
  • Bloomberg BDE como un objeto hasher de C ++ [15]
  • IPFS por sus siete hashes de filtro Bloom

Implementaciones

  • C (implementación de referencia de dominio público)
  • Oxido
  • Cripto ++
  • C#
  • Haskell
  • JavaScript
  • VHDL
  • Verilog
  • Ir
  • Rápido
  • PicoLisp

Ver también [ editar ]

  • Filtro Bloom (aplicación para hashes rápidos)
  • Función hash criptográfica
  • Función hash
  • Código de autenticación de mensajes
  • Lista de funciones hash

Referencias [ editar ]

  1. ^ Dobraunig, Christoph; Mendel, Florian; Schläffer, Martin (29 de noviembre de 2014). Criptoanálisis diferencial de SipHash . Taller internacional sobre áreas seleccionadas en criptografía . Apuntes de conferencias en Ciencias de la Computación. 8781 . págs. 165-182. doi : 10.1007 / 978-3-319-13051-4_10 . ISBN 978-3-319-13050-7. Consultado el 28 de febrero de 2018 .
  2. ↑ a b Jean-Philippe Aumasson y Daniel J. Bernstein ( 18 de septiembre de 2012 ). "SipHash: un PRF rápido de entrada corta" .
  3. Lennon, Mike (28 de diciembre de 2011). "La vulnerabilidad de la tabla hash permite ataques DDoS a gran escala" . SecurityWeek .
  4. ^ Entonces, ganó; Narayanan, Ashok; Orán, David; Stapp, Mark (2013). Redes de datos con nombre en un enrutador: reenvío a 20 gbps y más . Actas de la Conferencia ACM SIGCOMM 2013 sobre SIGCOMM . pag. 495. doi : 10.1145 / 2486001.2491699 . ISBN 9781450320566. S2CID  1457918 . Consultado el 28 de febrero de 2018 . El recientemente propuesto SipHash [1] ofrece un buen equilibrio, ya que proporciona resistencia a colisiones y un rendimiento comparable al de los hash no criptográficos
  5. ^ Aumasson, Jean-Philippe; Bernstein, Daniel J .; Boßlet, Martin (8 de noviembre de 2012). DoS de inundación de hash recargado: ataques y defensas (PDF) . Foro de seguridad de aplicaciones - Suiza occidental 2012 .
  6. ^ a b "SipHash: un PRF rápido de entrada corta" . 2016-08-01 . Consultado el 21 de enero de 2017 . Propiedad intelectual: no tenemos conocimiento de ninguna patente o solicitud de patente relevante para SipHash, y no estamos planeando solicitar ninguna. El código de referencia de SipHash se publica bajo una licencia CC0, una licencia de dominio público.
  7. ^ Crosby, Scott A .; Wallach, Dan S. (6 de agosto de 2003). Denegación de servicio mediante ataques de complejidad algorítmica . Simposio de seguridad de Usenix . Washington DC
  8. ^ Jean-Philippe Aumasson; Daniel J. Bernstein (1 de agosto de 2016). "SipHash: un PRF rápido de entrada corta, usuarios" . Consultado el 21 de enero de 2017 .
  9. ^ "Seguridad de Perl - Ataques de complejidad algorítmica" . 2016-05-16 . Consultado el 21 de enero de 2017 .
  10. Christian Heimes (27 de septiembre de 2013). "PEP 456 - Algoritmo hash seguro e intercambiable" . Consultado el 21 de enero de 2017 .
  11. ^ "Implemente SipHash, utilícelo como nuestra función hash con hashvals de 64 bits" . 2018-07-16 . Consultado el 16 de julio de 2018 .
  12. Graydon Hoare (24 de julio de 2012). "Agregue core :: hash que contenga la implementación de SipHash-2-4. Re: # 1616 y # 859" . Consultado el 21 de enero de 2017 .
  13. Lennart Poettering (22 de diciembre de 2013). "compartido: cambia nuestra implementación de tabla hash a SipHash" . Consultado el 21 de enero de 2017 .
  14. ^ "Relé de bloque compacto" . GitHub . Consultado el 27 de septiembre de 2018 .
  15. ^ bslh_siphashalgorithm.h

Enlaces externos [ editar ]

  • Jean-Philippe Aumasson; Daniel J. Bernstein (1 de agosto de 2016). "SipHash: un PRF rápido de entrada corta - Página de proyecto" .
  • Jean-Philippe Aumasson; Daniel J. Bernstein (18 de septiembre de 2012). "SipHash: un PRF rápido de entrada corta" (PDF) .
  • Jean-Philippe Aumasson; Daniel J. Bernstein (15 de agosto de 2012). "SipHash: un PRF rápido de entrada corta - Diapositivas de presentación" (PDF) .
  • Jean-Philippe Aumasson; Daniel J. Bernstein; Martin Boßlet (29 de diciembre de 2012). "Hash-flooding DoS recargado: ataques y defensas" .
  • "Hashing" . El libro de rendimiento de Rust . - describe cuando SipHash no es lo suficientemente rápido