Salsa20 y el ChaCha estrechamente relacionado son cifrados de flujo desarrollados por Daniel J. Bernstein . Salsa20, el cifrado original, se diseñó en 2005 y luego se sometió al proceso de validación criptográfica eSTREAM de la Unión Europea por parte de Bernstein. ChaCha es una modificación de Salsa20 publicada en 2008. Utiliza una nueva función de ronda que aumenta la difusión y aumenta el rendimiento en algunas arquitecturas. [4]
General | |
---|---|
Diseñadores | Daniel J. Bernstein |
Publicado por primera vez | 2007 (diseñado en 2005) [1] |
Sucesores | ChaCha |
Relacionado con | Rumba20 |
Certificación | Cartera de eSTREAM |
Detalle de cifrado | |
Tamaños de clave | 128 o 256 bits |
Tamaño del estado | 512 bits |
Estructura | ARX |
Rondas | 20 |
Velocidad | 3.91 cpb en un Intel Core 2 Duo [2] |
Mejor criptoanálisis público | |
El criptoanálisis de 2008 rompe 8 de 20 rondas para recuperar la clave secreta de 256 bits en 2 251 operaciones, utilizando 2 31 pares de flujo de claves. [3] |
Ambos cifrados se basan en una función pseudoaleatoria basada en operaciones de agregar-rotar-XOR (ARX): operaciones de suma de 32 bits, suma a nivel de bits (XOR) y rotación . La función principal asigna una clave de 256 bits , un nonce de 64 bits y un contador de 64 bits a un bloque de 512 bits del flujo de claves (también existe una versión Salsa con una clave de 128 bits). Esto le da a Salsa20 y ChaCha la ventaja inusual de que el usuario puede buscar eficientemente cualquier posición en el flujo de claves en tiempo constante. Salsa20 ofrece velocidades de alrededor de 4 a 14 ciclos por byte en software en procesadores x86 modernos , [5] y un rendimiento de hardware razonable. No está patentado y Bernstein ha escrito varias implementaciones de dominio público optimizadas para arquitecturas comunes. [6]
Estructura
Internamente, el cifrado utiliza la suma de bits ⊕ ( OR exclusivo ), la suma de 32 bits mod 2 32 ⊞ y las operaciones de rotación de distancia constante (<<<) en un estado interno de dieciséis palabras de 32 bits. Usar solo operaciones add-rotate-xor evita la posibilidad de ataques de tiempo en implementaciones de software. El estado interno está formado por dieciséis palabras de 32 bits dispuestas como una matriz de 4 × 4.
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 |
El estado inicial se compone de ocho palabras clave, dos palabras de posición de la corriente, dos palabras de nonce (esencialmente bits de posición de flujo adicionales), y cuatro palabras fijas:
"expa" | Clave | Clave | Clave |
Clave | "nd 3" | Mientras tanto | Mientras tanto |
Pos. | Pos. | "2 por" | Clave |
Clave | Clave | Clave | "te k" |
Las palabras constantes deletrean "expandir 32 bytes k" en ASCII (es decir, las 4 palabras son "expa", "nd 3", "2-by" y "te k"). Este es un ejemplo de un número de nada bajo la manga . La operación principal en Salsa20 es el cuarto de ronda QR(a, b, c, d)
que toma una entrada de cuatro palabras y produce una salida de cuatro palabras:
b ^ = (a + d) <<< 7;c ^ = (b + a) <<< 9;d ^ = (c + b) <<< 13;a ^ = (d + c) <<< 18;
Las rondas con números impares se aplican QR(a, b, c, d)
a cada una de las cuatro columnas en la matriz de 4 × 4, y las rondas con números pares se aplican a cada una de las cuatro filas. Dos rondas consecutivas (ronda de columna y ronda de fila) juntas se denominan ronda doble:
// Ronda imparQR (0, 4, 8, 12) // columna 1QR (5, 9, 13, 1) // columna 2QR (10, 14, 2, 6) // columna 3QR (15, 3, 7, 11) // columna 4// Incluso redondoQR (0, 1, 2, 3) // fila 1QR (5, 6, 7, 4) // fila 2QR (10, 11, 8, 9) // fila 3QR (15, 12, 13, 14) // fila 4
A continuación, aparece una implementación en C / C ++.
#include #define ROTL (a, b) (((a) << (b)) | ((a) >> (32 - (b)))) #define QR (a, b, c, d) (\ b ^ = ROTL (a + d, 7), \ c ^ = ROTL (b + a, 9), \ d ^ = ROTL (c + b, 13), \ a ^ = ROTL (d + c, 18)) #define RONDAS 20 void salsa20_block ( uint32_t fuera [ 16 ], uint32_t const en [ 16 ]) { int i ; uint32_t x [ 16 ];para ( i = 0 ; i < 16 ; ++ i ) x [ i ] = en [ i ]; // 10 bucles × 2 rondas / bucle = 20 rondas para ( i = 0 ; i < ROUNDS ; i + = 2 ) { // Ronda impar QR ( x [ 0 ], x [ 4 ], x [ 8 ], x [ 12 ]); // columna 1 QR ( x [ 5 ], x [ 9 ], x [ 13 ], x [ 1 ]); // columna 2 QR ( x [ 10 ], x [ 14 ], x [ 2 ], x [ 6 ]); // columna 3 QR ( x [ 15 ], x [ 3 ], x [ 7 ], x [ 11 ]); // columna 4 // QR redondo par ( x [ 0 ], x [ 1 ], x [ 2 ], x [ 3 ]); // fila 1 QR ( x [ 5 ], x [ 6 ], x [ 7 ], x [ 4 ]); // fila 2 QR ( x [ 10 ], x [ 11 ], x [ 8 ], x [ 9 ]); // fila 3 QR ( x [ 15 ], x [ 12 ], x [ 13 ], x [ 14 ]); // fila 4 } para ( i = 0 ; i < 16 ; ++ i ) out [ i ] = x [ i ] + in [ i ]; }
En la última línea, la matriz mixta se agrega, palabra por palabra, a la matriz original para obtener su bloque de flujo de claves de 64 bytes. Esto es importante porque las rondas de mezcla por sí solas son invertibles . En otras palabras, la aplicación de las operaciones inversas produciría la matriz 4 × 4 original, incluida la clave. Agregar la matriz mixta al original hace que sea imposible recuperar la entrada. (Esta misma técnica se usa ampliamente en funciones hash desde MD4 hasta SHA-2 ).
Salsa20 realiza 20 rondas de mezcla en su entrada. [1] Sin embargo, también se han introducido variantes de rondas reducidas Salsa20 / 8 y Salsa20 / 12 con 8 y 12 rondas respectivamente. Estas variantes se introdujeron para complementar el Salsa20 original, no para reemplazarlo, y funcionan incluso mejor [nota 1] en los puntos de referencia de eSTREAM que Salsa20, aunque con un margen de seguridad correspondientemente más bajo.
XSalsa20 con nonce de 192 bits
En 2008, Bernstein propuso una variante de Salsa20 con nonces de 192 bits llamada XSalsa20. [7] [8] XSalsa20 es probadamente seguro si Salsa20 es seguro, pero es más adecuado para aplicaciones donde se desean nonces más largos. XSalsa20 alimenta la clave y los primeros 128 bits del nonce en un bloque de Salsa20 (sin la adición final, que puede omitirse o restarse después de un bloque Salsa20 estándar), y utiliza 256 bits de la salida como clave para el estándar. Salsa20 usando los últimos 64 bits del nonce y la posición del flujo. En concreto, los 256 bits de salida utilizados son los correspondientes a las porciones no secretas de la entrada: índices 0, 5, 10, 15, 6, 7, 8 y 9.
eSTREAM selección de Salsa20
Salsa20 ha sido seleccionado como un diseño de Fase 3 para el Perfil 1 (software) por el proyecto eSTREAM , recibiendo la puntuación de votación ponderada más alta de cualquier algoritmo del Perfil 1 al final de la Fase 2. [9] Salsa20 había sido previamente seleccionado como Focus de Fase 2 diseño para el Perfil 1 (software) y como diseño de la Fase 2 para el Perfil 2 (hardware) por el proyecto eSTREAM, [10] pero no avanzó a la Fase 3 para el Perfil 2 porque eSTREAM consideró que probablemente no era un buen candidato para entornos de hardware con recursos limitados. [11]
Criptoanálisis de Salsa20
A partir de 2015[actualizar], no hay ataques publicados sobre Salsa20 / 12 o el Salsa20 / 20 completo; el mejor ataque conocido [3] rompe 8 de las 12 o 20 rondas.
En 2005, Paul Crowley informó de un ataque a Salsa20 / 5 con una complejidad de tiempo estimada de 2 165 y ganó el premio de US $ 1000 de Bernstein por el "criptoanálisis de Salsa20 más interesante". [12] Este ataque y todos los ataques posteriores se basan en un criptoanálisis diferencial truncado . En 2006, Fischer, Meier, Berbain, Biasse y Robshaw reportó un ataque a Salsa20 / 6 estimando complejidad de tiempo de 2 177 , y un ataque de clave relacionados con el Salsa20 / 7 estimando complejidad de tiempo de 2 217 . [13]
En 2007, Tsunoo et al. anunció un criptoanálisis de Salsa20 que rompe 8 de 20 rondas para recuperar la clave secreta de 256 bits en 2 255 operaciones, utilizando 2 pares de secuencias de claves de 11,37 . [14] Sin embargo, este ataque no parece competir con el ataque de fuerza bruta.
En 2008, Aumasson, Fischer, Khazaei, Meier y Rechberger reportó un ataque contra cryptanalytic Salsa20 / 7 con un tiempo de complejidad 2 153 , y se reportó el primer ataque contra Salsa20 / 8 con una complejidad hora estimada de 2 251 . Este ataque hace uso del nuevo concepto de bits clave neutrales probabilísticos para la detección probabilística de un diferencial truncado. El ataque se puede adaptar para romper Salsa20 / 7 con una clave de 128 bits. [3]
En 2012, el ataque de Aumasson et al. fue mejorado por Shi et al. contra Salsa20 / 7 (clave de 128 bits) a una complejidad de tiempo de 2 109 (clave de 256 bits) y Salsa20 / 8 a 2 250 . [15]
En 2013, Mouha y Preneel publicaron una prueba [16] de que 15 rondas de Salsa20 eran seguras de 128 bits contra el criptoanálisis diferencial. (Específicamente, no tiene una característica diferencial con una probabilidad mayor que 2 −130 , por lo que el criptoanálisis diferencial sería más difícil que el agotamiento de la clave de 128 bits).
Variante ChaCha
General | |
---|---|
Diseñadores | Daniel J. Bernstein |
Publicado por primera vez | 2008 |
Derivado de | Salsa20 |
Relacionado con | Rumba20 |
Detalle de cifrado | |
Tamaños de clave | 128 o 256 bits |
Tamaño del estado | 512 bits |
Estructura | ARX |
Rondas | 20 |
Velocidad | 3.95 cpb en un Intel Core 2 Duo [4] : 2 |
En 2008, Bernstein publicó la familia de cifrados ChaCha estrechamente relacionada , cuyo objetivo es aumentar la difusión por ronda mientras se logra el mismo rendimiento o un poco mejor. [17] Aumasson et al. el papel también ataca a ChaCha, logrando una ronda menos: para 256 bits, ChaCha6 con complejidad 2 139 y ChaCha7 con complejidad 2 248 . ChaCha6 de 128 bits dentro de 2 107 , pero afirma que el ataque no logra romper ChaCha7 de 128 bits. [3]
El estado inicial de ChaCha es similar al estado inicial de Salsa20, sin embargo existen algunas diferencias. El estado inicial de ChaCha incluye una constante de 128 bits, una clave de 256 bits, un contador de 32 bits y un nonce de 96 bits, dispuestos como una matriz de 4 × 4 de palabras de 32 bits. [18] ChaCha también reordena algunas de las palabras en el estado inicial:
"expa" | "nd 3" | "2 por" | "te k" |
---|---|---|---|
Clave | Clave | Clave | Clave |
Clave | Clave | Clave | Clave |
Encimera | Mientras tanto | Mientras tanto | Mientras tanto |
La constante es la misma que Salsa20 ("expandir 32 bytes k"). ChaCha reemplaza el cuarto de vuelta de Salsa20 QR(a, b, c, d)
con
a + = b ; d ^ = a ; d <<< = 16 ; c + = d ; b ^ = c ; b <<< = 12 ; a + = b ; d ^ = a ; d <<< = 8 ; c + = d ; b ^ = c ; b <<< = 7 ;
Tenga en cuenta que esta versión actualiza cada palabra dos veces, mientras que la cuarta ronda de Salsa20 actualiza cada palabra solo una vez. Además, los difusores de cuarto de ronda de ChaCha cambian más rápidamente. En promedio, después de cambiar 1 bit de entrada, el cuarto de vuelta de Salsa20 cambiará 8 bits de salida mientras que ChaCha cambiará 12,5 bits de salida. [4]
El cuarto de vuelta de ChaCha tiene el mismo número de adiciones, xors y rotaciones de bits que el cuarto de vuelta de Salsa20, pero el hecho de que dos de las rotaciones sean múltiplos de 8 permite una pequeña optimización en algunas arquitecturas, incluido x86. [19] Además, el formato de entrada se ha reorganizado para admitir una optimización de implementación SSE eficiente descubierta para Salsa20. En lugar de alternar los redondeos hacia abajo de las columnas y las filas, se realizan hacia abajo de las columnas y a lo largo de las diagonales. [4] : 4 Al igual que Salsa20, ChaCha organiza las dieciséis palabras de 32 bits en una matriz de 4 × 4. Si indexamos los elementos de la matriz de 0 a 15
0 | 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 |
Entonces una ronda doble en ChaCha es:
// Ronda impar QR ( 0 , 4 , 8 , 12 ) // 1ra columna QR ( 1 , 5 , 9 , 13 ) // 2da columna QR ( 2 , 6 , 10 , 14 ) // 3ra columna QR ( 3 , 7 , 11 , 15 ) // 4ta columna // Par redondo QR ( 0 , 5 , 10 , 15 ) // diagonal 1 (diagonal principal) QR ( 1 , 6 , 11 , 12 ) // diagonal 2 QR ( 2 , 7 , 8 , 13 ) // diagonal 3 QR ( 3 , 4 , 9 , 14 ) // diagonal 4
ChaCha20 usa 10 iteraciones de la doble ronda. [20] A continuación se muestra una implementación en C / C ++.
#define ROTL (a, b) (((a) << (b)) | ((a) >> (32 - (b)))) #define QR (a, b, c, d) (\ a + = b, d ^ = a, d = ROTL (d, 16), \ c + = d, b ^ = c, b = ROTL (b, 12), \ a + = b, d ^ = a, d = ROTL (d, 8), \ c + = d, b ^ = c, b = ROTL (b, 7)) #definir RONDAS 20 void chacha_block ( uint32_t fuera [ 16 ], uint32_t const en [ 16 ]) { int i ; uint32_t x [ 16 ];para ( i = 0 ; i < 16 ; ++ i ) x [ i ] = en [ i ]; // 10 bucles × 2 rondas / bucle = 20 rondas para ( i = 0 ; i < ROUNDS ; i + = 2 ) { // Ronda impar QR ( x [ 0 ], x [ 4 ], x [ 8 ], x [ 12 ]); // columna 0 QR ( x [ 1 ], x [ 5 ], x [ 9 ], x [ 13 ]); // columna 1 QR ( x [ 2 ], x [ 6 ], x [ 10 ], x [ 14 ]); // columna 2 QR ( x [ 3 ], x [ 7 ], x [ 11 ], x [ 15 ]); // columna 3 // QR par redondo ( x [ 0 ], x [ 5 ], x [ 10 ], x [ 15 ]); // diagonal 1 (diagonal principal) QR ( x [ 1 ], x [ 6 ], x [ 11 ], x [ 12 ]); // diagonal 2 QR ( x [ 2 ], x [ 7 ], x [ 8 ], x [ 13 ]); // diagonal 3 QR ( x [ 3 ], x [ 4 ], x [ 9 ], x [ 14 ]); // diagonal 4 } para ( i = 0 ; i < 16 ; ++ i ) out [ i ] = x [ i ] + in [ i ]; }
ChaCha es la base de la función hash de BLAKE , finalista en la competencia de la función hash de NIST , y los sucesores de BLAKE2 / 3 sintonizados para una velocidad aún mayor. También define una variante que utiliza dieciséis palabras de 64 bits (1024 bits de estado), con constantes de rotación ajustadas correspondientemente.
XChaCha
Aunque no lo anunció Bernstein, la prueba de seguridad de XSalsa20 se extiende directamente a un cifrado análogo de XChaCha . Use la clave y los primeros 128 bits del nonce (en las palabras de entrada 12 a 15) para formar un bloque de entrada ChaCha, luego realice la operación del bloque (omitiendo la adición final). Las palabras de salida 0-3 y 12-15 (aquellas palabras que corresponden a palabras que no son claves de la entrada) forman la clave utilizada para ChaCha ordinario (con los últimos 64 bits de nonce y 64 bits de contador de bloque). [21]
Adopción de ChaCha20
Google ha seleccionado ChaCha20 junto con el código de autenticación de mensajes Poly1305 de Bernstein como reemplazo de RC4 en TLS , que se utiliza para la seguridad de Internet. [22] La implementación de Google asegura el tráfico HTTPS ( TLS / SSL ) entre el navegador Chrome en los teléfonos Android y los sitios web de Google. [23]
Poco después de la adopción de TLS por parte de Google, los algoritmos ChaCha20 y Poly1305 también se utilizaron para un nuevo cifrado [email protected] en OpenSSH . [24] [25] Posteriormente, esto hizo posible que OpenSSH evitara cualquier dependencia de OpenSSL , a través de una opción de tiempo de compilación. [26]
ChaCha20 también se usa para el generador de números aleatorios arc4random en los sistemas operativos FreeBSD , [27] OpenBSD , [28] y NetBSD [29] , en lugar del RC4 roto , y en DragonFly BSD [30] para la subrutina CSPRNG del kernel. [31] [32] A partir de la versión 4.8, el kernel de Linux usa el algoritmo ChaCha20 para generar datos para el dispositivo / dev / urandom sin bloqueo . [33] [34] [35]
Se ha publicado una referencia de implementación para ChaCha20 en RFC 7539 . La implementación del IETF modificó el algoritmo publicado de Bernstein al cambiar el contador de bloques nonce de 64 bits y el contador de bloques de 64 bits a nonce de 96 bits y contador de bloques de 32 bits, [36] El nombre no se cambió cuando se modificó el algoritmo, ya que es criptográficamente insignificante (ambos forman lo que un criptógrafo reconocería como un nonce de 128 bits), pero el cambio de interfaz podría ser una fuente de confusión para los desarrolladores. Debido al contador de bloques reducido, la longitud máxima del mensaje que la variante del IETF puede cifrar de forma segura es de 2 32 bloques de 64 bytes (256 GiB ). Para aplicaciones en las que esto no es suficiente, como el cifrado de archivos o discos, RFC 7539 propone utilizar el algoritmo original con nonce de 64 bits.
Se ha propuesto el uso de ChaCha20 en IKE e IPsec para la estandarización en RFC 7634 . La estandarización propuesta de su uso en TLS se publica como RFC 7905 .
ChaCha20 generalmente ofrece un mejor rendimiento que el algoritmo estándar de cifrado avanzado (AES) más común en sistemas donde la CPU no cuenta con aceleración AES (como el conjunto de instrucciones AES para procesadores x86). Como resultado, a veces se prefiere ChaCha20 sobre AES en ciertos casos de uso que involucran dispositivos móviles , que en su mayoría usan CPU basadas en ARM . [37] [38]
En 2018, RFC 7539 quedó obsoleto por RFC 8439 . [39]
ChaCha20 es el algoritmo exclusivo utilizado por el sistema WireGuard VPN, a partir de la versión del protocolo 1. [40]
Ver también
- Speck : un cifrado add-rotate-xor desarrollado por la NSA
Notas
- ^ Dado que la mayor parte del trabajo consiste en realizar las rondas repetidas, el número de rondas es inversamente proporcional a la actuación. Es decir, reducir a la mitad el número de rondas duplica aproximadamente el rendimiento. Las variantes de ronda reducida son, por tanto, considerablemente más rápidas.
Referencias
- ^ a b Daniel J. Bernstein (24 de diciembre de 2007). "La familia de cifrados de flujo Salsa20" (PDF) . Cite journal requiere
|journal=
( ayuda ) - ^ Daniel J. Bernstein (16 de mayo de 2013). "Salsa 20 velocidades; software Salsa20" .
- ^ a b c d Jean-Philippe Aumasson, Simon Fischer, Shahram Khazaei, Willi Meier y Christian Rechberger (14 de marzo de 2008). "Nuevas características de los bailes latinos" (PDF) . Cite journal requiere
|journal=
( ayuda )Mantenimiento de CS1: utiliza el parámetro de autores ( enlace ) - ^ a b c d Bernstein, Daniel (28 de enero de 2008), ChaCha, una variante de Salsa20 (PDF) , consultado el 3 de junio de 2018
- ^ Daniel J. Bernstein (16 de mayo de 2013). "Snuffle 2005: la función de cifrado Salsa20" .
- ^ "Salsa20: Velocidad del software" . 2007-05-11.
- ^ Daniel J. Bernstein. "Ampliando el nonce Salsa20" (PDF) . Consultado el 22 de agosto de 2017 .
- ^ "Página Salsa20 / 12 ECRYPT II" . Consultado el 22 de agosto de 2017 .
- ^ "El Proyecto eSTREAM: Fin de la Fase 2" . eSTREAM . 2008-04-29.
- ^ Hongjun Wu (30 de marzo de 2007). "eSTREAM FASE 3: Fin de la Fase 1" . eSTREAM.
- ^ "eSTREAM: Informe breve sobre el final de la segunda fase" (PDF) . eSTREAM. 2007-03-26.
- ^ Paul Crowley (9 de febrero de 2006). "Criptoanálisis diferencial truncado de cinco rondas de Salsa20" .
- ^ Simon Fischer, Willi Meier, Côme Berbain, Jean-François Biasse, MJB Robshaw (2006). "No aleatoriedad en eSTREAM Candidates Salsa20 y TSC-4". Progresos en Criptología - INDOCRYPT 2006 . Indocrypt 2006 . Apuntes de conferencias en Ciencias de la Computación. 4329 . págs. 2-16. CiteSeerX 10.1.1.121.7248 . doi : 10.1007 / 11941378_2 . ISBN 978-3-540-49767-7.Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
- ^ Yukiyasu Tsunoo, Teruo Saito, Hiroyasu Kubo, Tomoyasu Suzaki y Hiroki Nakashima (2007-01-02). "Criptoanálisis diferencial de Salsa20 / 8" (PDF) . Cite journal requiere
|journal=
( ayuda )Mantenimiento de CS1: utiliza el parámetro de autores ( enlace ) - ^ Zhenqing Shi, Bin Zhang, Dengguo Feng, Wenling Wu (2012). "Ataques de recuperación de claves mejorados en Salsa20 de ronda reducida y ChaCha". Seguridad de la información y criptología - ICISC 2012 . Actas de ICISC'12 de la 15ª Conferencia Internacional sobre Seguridad de la Información y Criptología . Apuntes de conferencias en Ciencias de la Computación. 7839 . págs. 337–351. doi : 10.1007 / 978-3-642-37682-5_24 . ISBN 978-3-642-37681-8.Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
- ^ Nicky Mouha; Bart Preneel (2013). "Hacia la búsqueda de características diferenciales óptimas para ARX: aplicación a Salsa20" (PDF) . Cite journal requiere
|journal=
( ayuda ) - ^ Daniel J. Bernstein (25 de abril de 2008). "La familia de cifrados de flujo de ChaCha" .
- ^ "ChaCha20 y Poly1305 para protocolos IETF" . Grupo de trabajo de ingeniería de Internet . 2 de mayo de 2021. Archivado desde el original el 2 de mayo de 2021 . Consultado el 2 de mayo de 2021 .
- ^ Neves, Samuel (2009-10-07), Implementaciones más rápidas de ChaCha para procesadores Intel , recuperado el 2016-09-07 ,
dos de estas constantes son múltiplos de 8; esto permite una rotación de 1 instrucción en Core2 y CPU Intel posteriores usando la instrucción pshufb
- ^ Y. Nir (Check Point), A. Langley (Google Inc.) (mayo de 2015). "ChaCha20 y Poly1305 para protocolos IETF: RFC 7539" .Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
- ^ Arciszewski, Scott. "XChaCha: ChaCha extendido-nonce y AEAD_XChaCha20_Poly1305" . tools.ietf.org .
- ^ A. Langley, W. Chang, N. Mavrogiannopoulos, J. Strombergson, S. Josefsson (16 de diciembre de 2015). "Conjuntos de cifrado ChaCha20-Poly1305 para la seguridad de la capa de transporte (TLS)" . Borrador de Internet .Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
- ^ "Google intercambia cifrados criptográficos en OpenSSL" . InfoSecurity. 2014-04-25. Archivado desde el original el 7 de noviembre de 2018.
- ^ Miller, Damien (3 de mayo de 2016). "ssh / PROTOCOL.chacha20poly1305" . Referencia cruzada BSD de superusuario: PROTOCOL.chacha20poly1305 . Consultado el 7 de septiembre de 2016 .
- ^ Murenin, Constantine A. (11 de diciembre de 2013). Desconocido Lamer (ed.). "OpenSSH tiene un nuevo cifrado - Chacha20-poly1305 - de DJ Bernstein" . Slashdot . Consultado el 7 de septiembre de 2016 .
- ^ Murenin, Constantine A. (30 de abril de 2014). Soulskill (ed.). "OpenSSH ya no tiene que depender de OpenSSL" . Slashdot . Consultado el 7 de septiembre de 2016 .
- ^ "Revisión 317015" . 2017-04-16 . Consultado el 16 de marzo de 2018 .
Reemplace el algoritmo RC4 para generar números aleatorios seguros en el kernel con Chacha20
- ^ guenther (Philip Guenther), ed. (13 de septiembre de 2015). "libc / crypt / arc4random.c" . Referencia cruzada BSD del superusuario: arc4random.c . Consultado el 7 de septiembre de 2016 .
Generador de números aleatorios basado en ChaCha para OpenBSD.
- ^ riastradh (Taylor Campbell), ed. (25 de marzo de 2016). "libc / gen / arc4random.c" . Referencia cruzada BSD del superusuario: arc4random.c . Consultado el 7 de septiembre de 2016 .
API arc4random (3) heredada de OpenBSD reimplementada usando ChaCha20 PRF, con estado por subproceso.
- ^ "kern / subr_csprng.c" . Referencia cruzada BSD del superusuario: subr_csprng.c . 2015-11-04 . Consultado el 7 de septiembre de 2016 .
chacha_encrypt_bytes
- ^ "Uso y despliegue de ChaCha" . 2016-09-07 . Consultado el 7 de septiembre de 2016 .
- ^ "arc4random (3)" . Páginas del manual de NetBSD . 2014-11-16 . Consultado el 7 de septiembre de 2016 .
- ^ Corbet, Jonathan. "Reemplazo de / dev / urandom" . Noticias semanales de Linux . Consultado el 20 de septiembre de 2016 .
- ^ "Combinar etiqueta 'random_for_linus' de git.kernel.org/pub/scm/linux/kernel/git/tytso/random" . Árbol de fuentes del kernel de Linux . Consultado el 20 de septiembre de 2016 .
aleatorio: reemplace el grupo sin bloqueo con un CRNG basado en Chacha20
- ^ Michael Larabel (25 de julio de 2016). "/ dev / random Ver mejoras para Linux 4.8" . Phoronix . Consultado el 3 de octubre de 2016 .
- ^ "ChaCha20 y Poly1305 para protocolos IETF" (PDF) . Consultado el 7 de agosto de 2017 .
Cambios de ChaCha regular. La división del número de secuencia de nonce: block se cambió de 64:64 a 96:32
- ^ "¿Cuál es el atractivo de usar ChaCha20 en lugar de AES?" . Intercambio de pila de criptografía . 2016-04-12.
- ^ "Estudio de rendimiento de AES-NI SSL @ Calomel.org" .
- ^ Encabezado de RFC 7539.
- ^ "Protocolo y criptografía" . WireGuard . Jason A. Donenfeld . Consultado el 4 de julio de 2018 .
enlaces externos
- Snuffle 2005: la función de encriptación Salsa20
- Especificación Salsa20 ( PDF )
- Salsa20 / 8 y Salsa20 / 12 (PDF)
- El proyecto eSTREAM: Salsa20
- La familia de cifrados de flujo ChaCha
- Uso e implementación de Salsa20