El Noise Protocol Framework , a veces denominado " Noise " o " Noise Framework ", es un marco criptográfico de dominio público [ 1 ] para crear protocolos de comunicación seguros basados en el intercambio de claves Diffie-Hellman . [ 2 ] Desarrollado por Trevor Perrin , el marco define una serie de patrones de handshake (secuencias predefinidas de intercambio de mensajes) que describen cómo las partes inician la comunicación, intercambian claves y establecen secretos compartidos . Estos patrones se pueden combinar y personalizar para cumplir con requisitos de seguridad específicos, como la autenticación mutua , el secreto hacia adelante y la protección de la identidad.
Varias aplicaciones y protocolos de software populares , incluidas las plataformas de mensajería WhatsApp y Slack [ 3 ] y el protocolo VPN WireGuard , han utilizado implementaciones del Noise Framework para garantizar el cifrado de extremo a extremo para las comunicaciones de los usuarios. El framework sigue siendo objeto de desarrollo, incluidas adaptaciones post-cuánticas . [ 4 ] Actualmente, el framework se encuentra en la revisión 34, publicada en julio de 2018. [ 1 ]
Historia
La mayoría de los protocolos de canal seguros se basan en el intercambio de claves autenticado (AKE) utilizando firmas digitales (para autenticación ) y Diffie-Hellman (para intercambio de claves ). En las décadas de 2000 a 2010, creció el interés en desarrollar AKE basados puramente en Diffie-Hellman, sin firmas, [ 5 ] lo que condujo a avances tanto teóricos (por ejemplo, Kudla-Paterson, [ 6 ] NAXOS, [ 7 ] Ntor) [ 8 ] como prácticos (por ejemplo, Ntor, [ 8 ] NaCl , CurveCP , DNSCurve , OPTLS). [ 9 ] Estos a menudo se desarrollaron desde cero. El Noise Protocol Framework fue desarrollado por Trevor Perrin, con el apoyo de Moxie Marlinspike , introduciendo dos innovaciones clave: [ 5 ]
- Combinar elementos simples para construir diversos protocolos.
- Utilizando criptografía simétrica “tipo esponja” , inspirada en el marco del protocolo Strobe del criptógrafo Mike Hamburg [ 10 ] . [ 11 ]
El marco de trabajo evolucionó a partir del trabajo realizado inicialmente en Open Whisper Systems , la organización de software de la que surgieron el Protocolo Signal y la aplicación de mensajería Signal . Si bien no guarda relación con el concepto de ruido en el procesamiento de señales , la elección de "Noise" como nombre para este protocolo criptográfico podría ser un juego de palabras que alude al concepto de señal frente a ruido.
Originalmente mantenido como una wiki desde el 10 de febrero de 2013, [ 12 ] el desarrollo del marco comenzó con una confirmación inicial de su especificación el 4 de agosto de 2014. [ 13 ] El marco evolucionó a través de numerosas revisiones siguiendo discusiones de la lista de correo hasta la versión 34 el 11 de julio de 2018. [ 14 ] El Noise Protocol Framework reconoce [ 15 ] la inspiración de diseños criptográficos anteriores (por ejemplo, NaCl , CurveCP o las cadenas KDF utilizadas en el algoritmo Double Ratchet ) y contribuciones de figuras en criptografía y computación (por ejemplo, Jason Donenfeld , Hugo Krawczyk ).
Durante su desarrollo, el Noise Protocol Framework evolucionó junto con TLS 1.3 , incluyendo discusiones en 2015 [ 16 ] que comparaban los protocolos, en particular la propuesta "OPTLS" [ 17 ] . Ambos proyectos se extendieron desde 2014 hasta 2018, con el primer borrador de TLS 1.3 RFC 8446 [ 18 ] publicado en agosto de 2014 y el Estándar Propuesto final en agosto de 2018. El Noise Framework proporcionó un enfoque alternativo, permitiendo la selección de patrones de intercambio de claves y algoritmos criptográficos específicos para diseñar protocolos adaptados a propiedades de seguridad y necesidades de rendimiento específicas.
Las verificaciones formales [ 19 ] del marco del protocolo Noise han evaluado sus propiedades de seguridad . Los estudios han empleado herramientas automatizadas para modelar y verificar varios patrones de intercambio de claves dentro del marco, [ 20 ] [ 21 ] evaluando su resistencia frente a una variedad de ataques .
Descripción general
Un protocolo de canal seguro tiene dos fases:
- La fase de establecimiento de la conexión: autentica y establece claves secretas compartidas mediante el intercambio de claves Diffie-Hellman (DH) para el intercambio de claves autenticado (AKE).
- La fase de transporte: utiliza claves secretas compartidas para cifrar los datos.
El patrón de establecimiento de conexión se puede describir en un diagrama como un conjunto de mensajes, cada uno anotado con una lista de tokens que describen las operaciones criptográficas realizadas sobre el estado de establecimiento de conexión de una de las partes.
Ejemplo de patrón de saludo con 3 mensajes: < - s ... - > e , es , s , ss < - e , ee , se IK
Los nombres de los apretones de manos siguen una fórmula:
I= Clave estática para el iniciador que transmití inmediatamente al respondedor, a pesar de la ocultación de identidad reducida o ausente.K= Clave estática para el iniciador . Conocida por el respondedor.
La(s) línea(s) anterior(es) ...representan un mensaje anterior a DH AKE, como una transferencia fuera de banda de una clave pública.
La especificación enumera tres patrones de protocolo de enlace unidireccionales y 12 patrones fundamentales de protocolo de enlace interactivos. Existen variaciones de algunos de estos:
- patrones diferidos, donde los DH de autenticación se difieren al siguiente mensaje.
1Se utiliza un número después del primer y/o segundo carácter, por ejemploNK1oX1X1 - una clave simétrica precompartida para admitir protocolos donde ambas partes tienen una clave secreta compartida de 32 bytes, por ejemplo
Npsk0oXpsk1 - protocolos compuestos en los que los roles de iniciador y respondedor se invierten como mecanismo de negociación a través del
fallbackmodificador. Un Noise Pipe es un ejemplo que se encuentra en §10.4 [ 22 ].
Un ejemplo del mundo real proviene de WireGuard, cuya construcción en la página 10 del Libro Blanco es Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s.
Cada patrón de intercambio de claves se puede combinar con una de las 16 combinaciones de los 8 algoritmos criptográficos enumerados en la especificación. Estos algoritmos son de calidad comparable y no amplían el espacio de diseño.
La especificación describe una API en el §5 [ 23 ] utilizando los siguientes objetos , cada uno con un pequeño conjunto de métodos :
- Un
CipherStateobjeto contiene k y n variables, que utiliza para cifrar y descifrar textos cifrados. Durante la fase de establecimiento de la conexión, cada parte tiene un único objetoCipherState, pero durante la fase de transporte, cada parte tiene dosCipherStateobjetos: uno para enviar y otro para recibir. - Un
SymmetricStateobjeto contiene las variables a,CipherStateck y h . Se denomina así porque encapsula toda la "criptografía simétrica" utilizada por Noise. Durante la fase de establecimiento de la conexión, cada parte tiene un únicoSymmetricState, que puede eliminarse una vez finalizado el establecimiento de la conexión. - Un
HandshakeStateobjeto contieneSymmetricStatevariables DH ( s , e , rs , re ) y una variable que representa el patrón de handshake. Durante la fase de handshake, cada parte tiene un únicoHandshakeState, que puede eliminarse una vez finalizado el handshake.
La implementación de un protocolo concreto implica el diseño de la representación de mensajes, así como aspectos ajenos al marco de trabajo Noise Framework. Un ejemplo de esto último se da con protocolos que utilizan transportes UDP , como WireGuard , que emplea una ventana deslizante para gestionar la llegada de mensajes fuera de orden.
Las propiedades de seguridad de varios patrones de intercambio de claves se describen en la Especificación y pueden admitir autenticación mutua, secreto hacia adelante, cifrado de ida y vuelta cero, ocultación de identidad y otras características avanzadas. En la literatura académica han aparecido análisis criptográficos formales de patrones de intercambio de claves comunes. [ 24 ] [ 25 ] El segundo esfuerzo ha dado como resultado la herramienta en línea Noise Explorer. [ 26 ]
Gran parte del siguiente texto consiste en extractos de la Especificación con formato:
IKpara nombres de protocolo que constan de patrones de intercambio de claves, criptografía y modificadores- Comprobación de variables en la máquina de estados de protocolo de enlace
- e para tokens en un patrón de mensaje
- El prefijo § hace referencia a secciones de la Especificación.
con el enfoque en:
- patrones de apretón de manos
- Propiedades de seguridad y compensaciones
- Responsabilidades de la aplicación y consideraciones de seguridad
Nombres y modificadores de protocolo §8
Para generar un nombre de protocolo de ruido, Initialize()concatene la cadena ASCII Noise_con cuatro secciones de nombre separadas por guiones bajos, que designan secuencialmente el patrón de intercambio de claves, las funciones DH, las funciones de cifrado y, a continuación, las funciones hash. El nombre resultante debe tener 255 bytes o menos. [ 27 ] Ejemplos:
Noise_XX_25519_AESGCM_SHA256Noise_N_25519_ChaChaPoly_BLAKE2sNoise_IK_448_ChaChaPoly_BLAKE2b
Cada sección del nombre debe constar únicamente de caracteres alfanuméricos (es decir, caracteres en uno de los rangos "A"...Z", "a"...z" y "0"...9"), y los dos caracteres especiales "+" y "/".
Se aplican reglas adicionales a cada sección de nombre, tal y como se especifica a continuación.
Sección §8.1 del patrón de apretón de manos
Una sección de nombre de patrón de saludo contiene un nombre de patrón de saludo más una secuencia de cero o más modificadores de patrón. [ 28 ]
El nombre del patrón de saludo debe ser una cadena ASCII en mayúsculas que contenga solo caracteres alfabéticos o numéricos (por ejemplo, XX1o IK).
Los modificadores de patrón especifican extensiones o modificaciones arbitrarias al comportamiento definido por el patrón de protocolo de enlace. Por ejemplo, se puede aplicar un modificador a un patrón de protocolo de enlace, transformándolo en un patrón diferente según alguna regla. Los modificadores psk0y fallbackson ejemplos de esto y se definirán más adelante en este documento.
Un modificador de patrón se nombra con una cadena alfanumérica ASCII en minúsculas que debe comenzar con un carácter alfabético (no un número). El modificador de patrón se agrega al patrón base como se describe a continuación:
El primer modificador que se agrega a un patrón base simplemente se añade. Por lo tanto fallback, cuando el modificador se agrega al XXpatrón, produce XXfallback. Los modificadores adicionales se separan con un signo más. Así, agregar el psk0modificador daría como resultado la sección de nombre XXfallback+psk0, o un nombre de protocolo completo como Noise_XXfallback+psk0_25519_AESGCM_SHA256.
En algunos casos, el orden secuencial de los modificadores especificará protocolos diferentes. Sin embargo, si el orden de algunos modificadores no importa, entonces se requiere que se ordenen alfabéticamente (esta es una convención arbitraria para garantizar la interoperabilidad).
Secciones de nombres de algoritmos criptográficos §8.2
Las reglas para las secciones de nombres DH, cifrado y hash son idénticas. Cada sección de nombres debe contener uno o más nombres de algoritmos separados por signos más. [ 29 ]
Cada nombre de algoritmo debe constar únicamente de caracteres alfanuméricos y el carácter de barra inclinada ("/"). Se recomienda que los nombres de los algoritmos sean cortos y que se utilice el carácter "/" solo cuando sea necesario para evitar ambigüedades (por ejemplo, SHA3/256es preferible a SHA3256).
En la mayoría de los casos, cada sección de nombre contendrá un único nombre de algoritmo (es decir, sin signos de suma). Solo se utilizan varios nombres de algoritmos cuando lo requiere el patrón o un modificador.
Ninguno de los patrones o modificadores de este documento requiere varios nombres de algoritmos en ninguna sección de nombres. Sin embargo, esta funcionalidad podría ser útil en futuras extensiones. Por ejemplo, se podrían usar varios nombres de algoritmos en la sección DH para especificar el secreto directo post-cuántico "híbrido"; o se podrían especificar varios algoritmos hash para diferentes propósitos.
Algoritmos criptográficos, §12
La especificación enumera 8 algoritmos modernos con los siguientes nombres. [ 30 ] [ 31 ]
La Wiki tiene esta lista de algoritmos no oficiales; [ 32 ] He omitido los Post-Cuánticos ya que las entradas son anteriores al esfuerzo de estandarización de criptografía post-cuántica del NIST que comenzó en 2016 con los tres primeros estándares criptográficos post-cuánticos: FIPS 203, FIP 204 y FIP 205 en 2024.
Aquí documentamos algunos nombres que podrían usarse para algoritmos no estándar, de modo que el uso experimental de estos algoritmos pueda utilizar nombres consistentes (NOTA: Ninguno de estos algoritmos está respaldado para su uso con Noise, úselo bajo su propio riesgo).
Prólogo §6
Los protocolos de ruido tienen una entrada de prólogo que permite que se asignen datos arbitrarios a la variable h mediante una función hash. Si ambas partes no proporcionan datos de prólogo idénticos, el protocolo de enlace fallará debido a un error de descifrado. Esto resulta útil cuando las partes participaron en una negociación previa al protocolo de enlace y desean asegurarse de que comparten puntos de vista idénticos sobre dicha negociación. [ 42 ]
Por ejemplo, supongamos que Bob le comunica a Alice una lista de protocolos de ruido que está dispuesto a admitir. Alice elegirá y ejecutará un único protocolo. Para garantizar que un atacante no modifique la lista de Bob eliminando opciones, Alice y Bob podrían incluir la lista como datos de prólogo.
Cabe señalar que, si bien las partes confirman que sus prólogos son idénticos, no mezclan los datos de los prólogos con las claves de cifrado. Si una entrada contiene datos secretos destinados a reforzar el cifrado, se debe utilizar un protocolo de enlace PSK (véase el apartado 9).
Patrones de apretón de manos
Patrones de apretón de manos: 3 Unidireccionales §7.4
Los siguientes patrones de protocolo de enlace representan protocolos de enlace "unidireccionales" que admiten un flujo de datos unidireccional de un remitente a un destinatario. Estos patrones podrían utilizarse para cifrar archivos, registros de bases de datos u otros flujos de datos no interactivos. [ 43 ]
Después de un intercambio de claves unidireccional, el remitente puede enviar un flujo de mensajes de transporte, encriptando los mensajes con el primer CipherState devuelto por Split()El segundo CipherState de Split()se descarta: el destinatario no debe enviar ningún mensaje usándolo (ya que esto violaría las reglas del §7.3).
Los patrones unidireccionales se nombran con un solo carácter, que indica el estado de la clave estática del remitente:
N= No hay clave estática para el remitenteK= Clave estática para el iniciador . Conocida por el respondedor.X= Clave estática para el remitente X enviada ("transmitida") al destinatario
N:
<- s ... -> e , es
K:
-> s <- s ... -> e , es , ss
X:
<- s ... -> e , es , s , ss
Nes un cifrado de clave pública convencional basado en DH. Los otros patrones añaden autenticación del remitente, donde la clave pública del remitente es conocida por el destinatario de antemano ( K) o se transmite bajo cifrado ( X).
Patrones de apretón de manos, 12 Interacción fundamental §7.5
Los siguientes patrones de saludo representan protocolos interactivos. Estos 12 patrones se denominan patrones de saludo interactivos "fundamentales". [ 44 ]
Los patrones interactivos fundamentales se nombran con dos caracteres, que indican el estado de las claves estáticas del iniciador y del respondedor:
El primer carácter se refiere a la tecla estática del iniciador:
N=No clave estática para el iniciadorK= Clave estática para el iniciadorKconocida por el respondedorX= Clave estática para el iniciadorXenviada ("transmitida") al respondedorI= Clave estática para el iniciadorItransmitida inmediatamente al respondedor, a pesar de la ocultación de identidad reducida o ausente.
El segundo carácter se refiere a la clave estática del respondedor:
N=No clave estática para responderK= Clave estática para el respondedorKconocida por el iniciadorX= Clave estática para el respondedorXenviada ("transmitida") al iniciador
Las dos primeras columnas de la tabla anterior, antes de cada patrón de mensaje, enumeran las propiedades de seguridad para el protocolo de enlace Noise y las cargas útiles de transporte para todos los patrones unidireccionales del §7.4 y los patrones fundamentales del §7.5. A cada carga útil se le asigna una propiedad de "origen" relativa al grado de autenticación del remitente proporcionado al destinatario, y una propiedad de "destino" relativa al grado de confidencialidad proporcionado al remitente.
Para el remitente:
- 0. Sin autenticación . Esta carga útil puede haber sido enviada por cualquier parte, incluido un atacante activo.
Utilizado por: IN#1, IN#2, IN#4, IX#1, KN#2, KN#3, KN#5, KX#2, NK#2, NK#4, NN#1, NN#2, NN#3, NX#1, NX#3, XK#2, XN#1, XN#2, XN#4, XX#1
- 1. La autenticación del remitente es vulnerable a la suplantación de identidad por compromiso de clave (KCI) . La autenticación del remitente se basa en un DH estático-estático ( ss ) que involucra pares de claves estáticas de ambas partes. Si la clave privada a largo plazo del destinatario se ha visto comprometida, esta autenticación puede falsificarse. Cabe destacar que una futura versión de Noise podría incluir firmas, lo que mejoraría esta propiedad de seguridad, pero conlleva otras desventajas.
Utilizado por: IK#2, IN#3, KK#3, KN#4, NK#3, NN# NN2, NX#3, XK#2, #3, XN#2, XN#3, XX#2
- 2. Autenticación del remitente resistente a la suplantación de identidad por compromiso de clave (KCI) . La autenticación del remitente se basa en un DH efímero-estático ( es o se ) entre el par de claves estáticas del remitente y el par de claves efímeras del destinatario . Si las claves privadas correspondientes son seguras, esta autenticación no puede falsificarse.
Utilizado por: IK#2, IK#3, IK#4, IK#5, IN#3, IX#2, IX#3, IX#4, KK#3, KK#4, KK#5, KK#6, KN#4, KX#3, KX#4, KX#5, NK#2, NK#3, NX#2, XK#2, XK#3, XK#4, XK#5, XN#3, XX#2, XX#3, XX#4
Para el destinatario:
- 0. Sin confidencialidad . Esta carga útil se envía en texto plano.
Utilizado por: IN#1, IN#2, IN#4, IX#1, KN#2, KN#3, KN#5, KX#2, NK#2, NK#4, NN#1, NN#2, NN#3, NX#1, NX#3, XK#2, XN#1, XN#2, XN#4, XX#1
- 1. Cifrado a un destinatario efímero . Esta carga útil posee confidencialidad directa, ya que el cifrado implica un cifrado de dominio efímero ( ee ). Sin embargo, el remitente no ha autenticado al destinatario, por lo que esta carga útil podría enviarse a cualquier persona, incluido un atacante activo.
Utilizado por: IK#2, IN#3, KK#3, KN#4, NK#3, NN# NN2, NX#3, XK#2, #3, XN#2, XN#3, XX#2
- 2. Cifrado para un destinatario conocido, confidencialidad directa solo para el remitente comprometido, vulnerable a la repetición . Esta carga útil se cifra únicamente con DH que involucran el par de claves estáticas del destinatario. Si la clave privada estática del destinatario se ve comprometida, incluso posteriormente, esta carga útil puede descifrarse. Este mensaje también puede repetirse, ya que no hay ninguna contribución efímera del destinatario.
Utilizado por: IK#2, IK#3, IK#4, IK#5, IN#3, IX#2, IX#3, IX#4, KK#3, KK#4, KK#5, KK#6, KN#4, KX#3, KX#4, KX#5, NK#2, NK#3, NX#2, XK#2, XK#3, XK#4, XK#5, XN#3, XX#2, XX#3, XX#4
- 3. Cifrado a un destinatario conocido, confidencialidad directa débil . Esta carga útil está cifrada mediante un DH efímero-efímero y también un DH efímero-estático que involucra el par de claves estáticas del destinatario. Sin embargo, el remitente no ha verificado la vinculación entre la supuesta clave pública efímera del destinatario y su clave pública estática, por lo que la supuesta clave pública efímera del destinatario podría haber sido falsificada por un atacante activo. En este caso, el atacante podría comprometer posteriormente la clave privada estática del destinatario para descifrar la carga útil. Cabe señalar que una futura versión de Noise podría incluir firmas, lo que mejoraría esta propiedad de seguridad, pero conllevaría otras desventajas.
Utilizado por: IN#2, IX#2, KN#3, KX#3
- 4. Cifrado a un destinatario conocido, secreto directo débil si la clave privada del remitente se ha visto comprometida . Esta carga útil está cifrada en base a un DH efímero-efímero, y también en base a un DH efímero-estático que involucra el par de claves estáticas del destinatario. Sin embargo, la vinculación entre la supuesta clave pública efímera del destinatario y su clave pública estática solo se ha verificado en base a DH que involucran ambas claves públicas y la clave privada estática del remitente. Por lo tanto, si la clave privada estática del remitente se vio comprometida previamente, la supuesta clave pública efímera del destinatario podría haber sido falsificada por un atacante activo. En este caso, el atacante podría comprometer posteriormente la clave privada estática del destinatario previsto para descifrar la carga útil (esta es una variante de un ataque "KCI" que permite un ataque de "secreto directo débil"). Cabe señalar que una versión futura de Noise podría incluir firmas, lo que podría mejorar esta propiedad de seguridad, pero conlleva otras desventajas.
Utilizado por: IK#3, KK#4
- 5. Cifrado para un destinatario conocido, con confidencialidad directa reforzada . Esta carga útil se cifra mediante una clave DH efímera-efímera y una clave DH efímera-estática con el par de claves estáticas del destinatario. Si las claves privadas efímeras son seguras y el destinatario no está siendo suplantado por un atacante que haya robado su clave privada estática, esta carga útil no se puede descifrar.
Utilizado por: IK#4, IK#5, IN#4, IX#3, IX#4, KK#5, KK#6, KN#5, KX#4, KX#5, NK#4, NX#3, XK#4, XK#5, XN#4, XX#3, XX#4
Propiedad de ocultación de identidad de patrones comunes §7.8
La siguiente tabla enumera las propiedades de ocultación de identidad para todos los patrones de intercambio de claves unidireccionales del §7.4 y los patrones de intercambio de claves fundamentales del §7.5. Además, se enumeran algunos patrones de intercambio de claves diferidos que presentan propiedades de ocultación de identidad diferentes a las del patrón fundamental correspondiente. [ 45 ]
A cada patrón se le asignan propiedades que describen la confidencialidad de la clave pública estática del iniciador y de la clave pública estática del respondedor. Se parte de la premisa de que las claves privadas efímeras son seguras y que las partes interrumpen el protocolo de enlace si reciben de la otra parte una clave pública estática en la que no confían.
Esta sección solo considera la filtración de identidad a través de campos de clave pública estática en los intercambios de claves. Por supuesto, las identidades de los participantes de Noise podrían quedar expuestas por otros medios, como campos de carga útil, análisis de tráfico o metadatos como direcciones IP.
Las propiedades de la clave pública correspondiente son:
- 0. Transmitido en texto plano.
- 1. Encriptado con confidencialidad directa, pero puede ser sondeado por un iniciador anónimo.
- 2. Encriptado con confidencialidad directa, pero enviado a un destinatario anónimo.
- 3. Aunque no se transmite, un atacante pasivo puede comprobar las posibles claves privadas del receptor y determinar si alguna es correcta. Un atacante también podría reproducir un mensaje grabado previamente para un nuevo receptor y determinar si ambos son iguales (es decir, si utilizan el mismo par de claves estáticas) según si el destinatario acepta el mensaje.
- 4. Encriptado con la clave pública estática del respondedor, sin confidencialidad directa. Si un atacante descubre la clave privada del respondedor, puede descifrar la clave pública del iniciador.
- 5. No se transmite, pero un atacante pasivo puede comprobar los candidatos para el par (clave privada del respondedor, clave pública del iniciador) y averiguar si el par candidato es correcto.
- 6. Encriptado, pero con un secreto directo débil. Un atacante activo que se haga pasar por el iniciador sin la clave privada estática del iniciador, y que posteriormente obtenga dicha clave, podrá descifrar la clave pública del respondedor.
- 7. No se transmite, pero un atacante activo que se hace pasar por el iniciador sin la clave privada estática del iniciador, y que posteriormente descubre un candidato para la clave privada del iniciador, puede entonces comprobar si el candidato es correcto.
- 8. Encriptado con confidencialidad directa a una parte autenticada.
- 9. Un atacante activo que se hace pasar por el iniciador y registra una única ejecución del protocolo puede entonces comprobar los candidatos para la clave pública del respondedor.
Patrones de apretón de manos: Interactivo, diferido §7.6
Los patrones fundamentales de handshake en la sección anterior realizan operaciones DH para la autenticación ( es y se ) lo antes posible. [ 46 ]
Se puede describir un conjunto adicional de patrones de intercambio de claves que posponen estos DH de autenticación al siguiente mensaje. Para nombrar estos patrones de intercambio de claves diferidos, 1se utiliza un número después del primer o segundo carácter del nombre del patrón fundamental para indicar que el DH de autenticación del iniciador o del respondedor se pospone al siguiente mensaje.
Los patrones diferidos podrían ser útiles por varias razones:
- Es posible que el iniciador tenga conocimiento previo de la clave pública estática del respondedor, pero no desee enviar datos cifrados con 0-RTT.
- En algunos casos, aplazar la autenticación puede mejorar las propiedades de ocultación de identidad del protocolo de enlace (véase el apartado 7.8).
- Las futuras extensiones de Noise podrían reemplazar las operaciones DH con firmas o textos cifrados KEM, pero solo si el remitente se autentica (firmas) o si autentica al receptor (textos cifrados KEM). Por lo tanto, cada patrón fundamental de intercambio de claves solo permite reemplazar cada operación DH de autenticación con una firma o un texto cifrado KEM, pero las variantes diferidas posibilitan ambos reemplazos.
A continuación se muestran dos ejemplos: a la izquierda, un patrón básico de saludo, y a la derecha, variantes diferidas. El conjunto completo de 23 patrones de saludo diferidos se encuentra en el Apéndice §18. [ 47 ]
Patrones de apretón de manos: Compuesto §10
Fundamentación de los protocolos compuestos §10.1
Hasta ahora hemos asumido que Alice y Bob desean ejecutar un único Protocolo de Ruido elegido por el iniciador (Alice). Sin embargo, existen varias razones por las que Bob podría desear cambiar a un Protocolo de Ruido diferente después de recibir el primer mensaje de Alice. Por ejemplo: [ 49 ]
Es posible que Alice haya elegido un protocolo de ruido basado en un cifrado, una función DH o un patrón de intercambio de claves que Bob no admita.
Es posible que Alice haya enviado un mensaje inicial cifrado con "tiempo de ida y vuelta cero" basado en una versión obsoleta de la clave pública estática (PSK) de Bob.
Para gestionar estos escenarios se requiere un protocolo compuesto en el que Bob cambie del Protocolo de Ruido inicial elegido por Alice a un nuevo Protocolo de Ruido. En dicho protocolo compuesto, los roles de iniciador y respondedor se invertirían: Bob se convertiría en el iniciador del nuevo Protocolo de Ruido y Alice en la respondedora.
Los protocolos compuestos introducen una complejidad significativa, ya que Alice necesita anunciar el Protocolo de Ruido con el que está comenzando y el o los Protocolos de Ruido a los que puede cambiar, y ambas partes tienen que negociar una transición segura.
Estos detalles quedan en gran medida fuera del alcance de este documento. Sin embargo, para ilustrar cómo se pueden construir protocolos compuestos y proporcionar algunos elementos básicos, las siguientes secciones definen un modificador de reserva y muestran cómo se puede utilizar para crear un protocolo compuesto Noise Pipe.
Noise Pipes admite este XXpatrón, pero también permite que Alice almacene en caché la clave pública estática de Bob e intente un IKprotocolo de enlace con cifrado 0-RTT.
En caso de que Bob no pueda descifrar IKel mensaje inicial de Alice, cambiará al XXfallbackpatrón, que esencialmente permite a las partes completar un XXapretón de manos como si Alice hubiera enviado un XXmensaje inicial en lugar de un IKmensaje inicial.
El fallbackmodificador §10.2
El fallbackmodificador convierte un patrón iniciado por Alice en un patrón iniciado por Bob, transformando el mensaje inicial de Alice en un pre-mensaje que Bob debe recibir por algún otro medio (por ejemplo, mediante un IKmensaje inicial de Alice). Tras esta conversión, el resto del patrón de enlace se interpreta como un patrón de enlace iniciado por Bob. [ 50 ]
Por ejemplo, aquí está el fallbackmodificador aplicado para XXproducir XXfallback:
XX:
-> e <- e , ee , s , es -> s , se
XXfallback:
-> e ... <- e , ee , s , es -> s , se
Tenga en cuenta que la función de reserva solo se puede aplicar a patrones de saludo iniciados por Alice, donde el primer mensaje de Alice se puede interpretar como un pre-mensaje (es decir, debe ser e , s o " e , s ").
Protocolos de RTT cero y de ruido §10.3
Un protocolo compuesto típico para el cifrado de RTT cero implica tres protocolos de ruido diferentes: [ 51 ]
- Se utiliza un protocolo completo si Alice no posee información almacenada sobre Bob que permita el cifrado de tiempo de ida y vuelta cero, o si no desea utilizar el protocolo de enlace de tiempo de ida y vuelta cero.
- Un protocolo de tiempo de ida y vuelta cero permite el cifrado de datos en el mensaje inicial.
- Bob activa un protocolo de conmutación si no puede descifrar el primer mensaje de establecimiento de conexión de Alice con RTT cero.
Bob debe tener alguna forma de distinguir entre los casos de RTT completo y cero al recibir el primer mensaje. Si Alice intenta un RTT cero, debe tener alguna forma de distinguir entre los casos de RTT cero y de conmutación al recibir la respuesta.
Por ejemplo, cada mensaje de establecimiento de conexión podría ir precedido de algunos datos de negociación, como un byte de tipo (véase el apartado 13). Estos datos no forman parte del mensaje de ruido propiamente dicho, sino que indican qué protocolo de ruido se está utilizando.
Tuberías acústicas §10.4
Esta sección define el protocolo compuesto Noise Pipe. Los siguientes patrones de handshake satisfacen las funciones completas, de RTT cero y de conmutación analizadas en la sección anterior, por lo que pueden utilizarse para proporcionar un handshake completo con una opción simple de RTT cero: [ 22 ]
XX:
-> e <- e , ee , s , es -> s , se
IK:
<- s ... -> e , es , s , ss <- e , ee , se
XXfallback:
-> e ... <- e , ee , s , es -> s , se
Este XXpatrón se utiliza para un intercambio de claves completo si las partes no se han comunicado previamente, tras lo cual Alice puede almacenar en caché la clave pública estática de Bob.
Este IKpatrón se utiliza para un protocolo de enlace con RTT cero.
Este XXfallbackpatrón se utiliza para un protocolo de enlace de conmutación si Bob no logra descifrar un IKmensaje inicial (quizás debido a que cambió su clave estática).
El lenguaje de negociación NoiseLingo se ejecuta sobre NoiseSocket.
Correo electrónico de Trevor Perrin el 4 de marzo de 2018 [ 52 ]
He creado un borrador de especificación para un marco "NLS" que agrega un lenguaje de negociación ("NoiseLingo") sobre NoiseSocket (de ahí "NoiseLingoSocket"). Esto se basa en ideas de 1. [ 53 ]
Esto necesita un borrador de NoiseSocket ajustado, con modificaciones de 2 [ 54 ] (cambiar el nombre de un par de cosas y modificar el cálculo del prólogo para diferenciar el caso de "reintento" y agregar un prólogo de aplicación):
El borrador del NLS también define algunos "perfiles básicos", que están pensados como protocolos de alto nivel utilizables por los desarrolladores de aplicaciones:
- NoiseLink (protocolo de enlace 1-RTT)
- NoiseZeroLink (protocolo de enlace 0-RTT)
- NoiseShortLink (para sistemas embebidos de gama baja)
- NoiseAnonBox (cifrado de clave pública)
- NoseAuthBox (cifrado de clave pública + autenticación del remitente)
La idea es que NoiseLingo y NLS ofrecen un menú de campos de negociación fáciles de seleccionar para crear perfiles. Además, estos perfiles tendrán mucha similitud y, por lo tanto, potencial de interoperabilidad (por ejemplo, un cliente NoiseZeroLink puede comunicarse con un servidor NoiseLink, recurriendo al protocolo 1-RTT). Y si se empieza con algo sencillo como NoiseLink, es fácil añadir nuevos campos NLS y opciones de negociación a medida que surjan nuevas necesidades.
Responsabilidades de la solicitud §13
Una aplicación construida sobre Noise debe tener en cuenta varios aspectos: [ 57 ]
- Elección de funciones criptográficas :
25519Se recomiendan las funciones DH para usos típicos, aunque448podrían ofrecer seguridad adicional en caso de que se desarrolle un ataque criptoanalítico contra la criptografía de curva elíptica . Las448funciones DH deben usarse con un hash de 512 bits comoSHA512oBLAKE2b. Las25519funciones DH pueden usarse con un hash de 256 bits comoSHA256oBLAKE2s, aunque un hash de 512 bits podría ofrecer seguridad adicional en caso de que se desarrolle un ataque criptoanalítico contra las funciones hash más pequeñas.AESGCMes difícil de implementar con alta velocidad y tiempo constante en software. - Extensibilidad : Se recomienda que las aplicaciones utilicen un formato de datos extensible para las cargas útiles de todos los mensajes (por ejemplo, JSON , Protocol Buffers ). Esto garantiza que se puedan añadir campos en el futuro que las implementaciones anteriores ignoran.
- Se recomienda que las aplicaciones de relleno utilicen un formato de datos para las cargas útiles de todos los mensajes cifrados que permita el relleno. Esto permite que las implementaciones eviten la filtración de información sobre el tamaño de los mensajes. Utilizar un formato de datos extensible, como se indicó anteriormente, puede ser suficiente.
- Finalización de la sesión : Las aplicaciones deben tener en cuenta que un atacante podría truncar una secuencia de mensajes de transporte de Noise. Deben incluir campos de longitud explícitos o señales de finalización dentro de las cargas útiles de transporte para indicar el final de una sesión interactiva o el final de un flujo unidireccional de mensajes de transporte.
- Campos de longitud : Las aplicaciones deben gestionar cualquier campo de longitud adicional o de formato para los mensajes de ruido, teniendo en cuenta que un mensaje de ruido puede tener una longitud de hasta 65535 bytes. Si se requiere un campo de longitud explícito, se recomienda que las aplicaciones añadan un campo de longitud de 16 bits en formato big-endian antes de cada mensaje.
- Datos de negociación : Las aplicaciones podrían necesitar transmitir datos de negociación antes del establecimiento de la conexión y/o antes de cada mensaje de establecimiento de conexión. Estos datos podrían incluir información de versión e identificadores para los protocolos Noise. Por ejemplo, un enfoque sencillo sería enviar un campo de un solo byte antes de cada mensaje de establecimiento de conexión Noise. Enfoques más flexibles podrían enviar estructuras extensibles como protobufs. Los datos de negociación introducen una complejidad significativa y riesgos de seguridad, como ataques de reversión (véase la siguiente sección).
Consideraciones de seguridad §14
Esta sección recopila diversas consideraciones de seguridad: [ 58 ]
- Autenticación : Un protocolo de ruido con claves públicas estáticas verifica que los participantes posean las claves privadas correspondientes, pero es la aplicación la que debe determinar si la clave pública estática de la parte remota es aceptable. Los métodos para lograrlo incluyen certificados que firman la clave pública (y que pueden transmitirse en la información de la comunicación), listas preconfiguradas de claves públicas o enfoques de "fijación" o "continuidad de clave", donde las partes recuerdan las claves públicas que encuentran y verifican si la misma parte presenta la misma clave pública en el futuro.
- Finalización de sesión : Impide que los atacantes trunquen un flujo de datos.
- Reversión : Si las partes deciden un Protocolo Noise basándose en una negociación previa que no se incluye como prólogo, entonces podría ser posible un ataque de reversión. Este es un riesgo particular con los protocolos compuestos y requiere especial atención si el protocolo Noise está precedido por comunicación entre las partes.
- Reutilización de claves estáticas : Un par de claves estáticas utilizado con Noise debe emplearse con un único algoritmo hash. Este par de claves no debe utilizarse fuera de Noise ni con múltiples algoritmos hash. Es aceptable utilizar el par de claves estáticas con diferentes protocolos Noise, siempre que se utilice el mismo algoritmo hash en todos ellos. (Reutilizar un par de claves estáticas de Noise fuera de Noise requeriría un análisis extremadamente minucioso para garantizar que los usos no comprometan la seguridad de los demás y que se conserven las pruebas de seguridad).
- Reutilización de PSK : Una PSK utilizada con Noise debe usarse con un único algoritmo hash. La PSK no debe usarse fuera de Noise ni con múltiples algoritmos hash.
- Reutilización de claves efímeras : Cada participante en un Protocolo Noise debe enviar una clave pública efímera nueva antes de enviar cualquier dato cifrado. Las claves efímeras nunca deben reutilizarse. Incumplir estas reglas puede provocar una reutilización de claves catastrófica. Esta es una de las razones que justifican los patrones descritos en la sección 7 y las reglas de validez de la sección 7.3. También es el motivo por el cual los protocolos de enlace unidireccionales solo permiten el envío de mensajes desde el remitente, no desde el destinatario.
- Uso indebido de claves públicas como secretos : Puede resultar tentador usar un patrón con una clave pública previa al mensaje y asumir que un intercambio de claves exitoso implica que la otra parte conoce la clave pública. Desafortunadamente, esto no es así, ya que establecer claves públicas con valores no válidos puede provocar una salida de DH predecible. Por ejemplo, un
Noise_NK_25519iniciador podría enviar una clave pública efímera no válida para generar una salida de DH conocida de ceros, a pesar de desconocer la clave pública estática del respondedor. Si las partes desean autenticarse con un secreto compartido, este debe usarse como una clave precompartida (PSK). - Enlace de canal : Dependiendo de las funciones de DH, un atacante podría participar en múltiples sesiones que deriven la misma clave secreta compartida al establecer claves públicas con valores no válidos que generen una salida DH predecible (como en el punto anterior). También podría establecer claves públicas con valores equivalentes que generen la misma salida DH para diferentes entradas. Por ello, un protocolo de nivel superior debería usar el hash de handshake ( h ) para un enlace de canal único, en lugar de ck , como se explica en el §11.2.
- Incremento de nonces : Reutilizar un valor nonce para n con la misma clave k para el cifrado sería catastrófico. Las implementaciones deben seguir cuidadosamente las reglas para los nonces. Los nonces no pueden volver a cero debido al desbordamiento de enteros , y el valor máximo de nonce está reservado. Esto significa que las partes no pueden enviar más de 2⁶⁴ - 1 mensajes de transporte.
- Nombres de protocolo : El nombre del protocolo
Initialize()debe identificar de forma unívoca la combinación del patrón de intercambio de claves y las funciones criptográficas para cada clave con la que se utilice (ya sea un par de claves efímeras, un par de claves estáticas o una clave precompartida). Si se reutiliza la misma clave secreta con el mismo nombre de protocolo pero con un conjunto diferente de operaciones criptográficas, podrían producirse interacciones erróneas. - Claves simétricas precompartidas : Las claves simétricas precompartidas deben ser valores secretos con 256 bits de entropía.
- Volumen de datos : La
AESGCMseguridad de las funciones de cifrado disminuye gradualmente a medida que aumenta el volumen de datos cifrados con una sola clave. Por ello, no se recomienda enviar más de 2⁵⁶ bytes (aproximadamente 72 petabytes) cifrados con una sola clave. Si es posible enviar volúmenes de datos tan grandes, se deben elegir funciones de cifrado diferentes. - Colisiones de hash : Si un atacante encuentra colisiones de hash en los datos del prólogo o en el hash del handshake, podría realizar ataques de "colisión de transcripción" que engañan a las partes haciéndoles creer que tienen versiones diferentes de los datos del handshake. Es importante usar Noise con funciones hash resistentes a colisiones y reemplazar la función hash ante cualquier indicio de vulnerabilidad.
- Identificación de la implementación : Si este protocolo se utiliza en entornos con participantes anónimos, se debe garantizar que las implementaciones se comporten de forma idéntica en todos los casos. Esto puede requerir establecer un comportamiento exacto para el manejo de claves públicas DH no válidas.
Implementaciones
protocolos concretos
Véase también
Otros usos del ruido en el sentido criptográfico general:
Referencias
- 1 2 "El marco del protocolo de ruido - IPR" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "Introducción al marco del protocolo Noise" . Cisco Duo . Consultado el 25 de febrero de 2025 .
- 1 2 slackhq/nebula , Slack, 15-12-2024 , consultado el 15-12-2024
- ↑ Angel, Yawning; Dowling, Benjamin; Hülsing, Andreas; Schwabe, Peter; Weber, Fiona Johanna (2022), Post Quantum Noise , 2022/539 , consultado el 25 de febrero de 2025
- 1 2 Criptografía en el mundo real (14 de enero de 2018). El marco del protocolo Noise | Trevor Perrin | RWC 2018. Recuperado el 25 de febrero de 2025 a través de YouTube.
- ^ Chen, Liqun ; Kudla, Carolina; Paterson, Kenneth G. (2004). "Firmas Concurrentes" . En Cachin, Christian; Camenisch, Jan L. (eds.). Avances en Criptología - EUROCRYPT 2004 . Apuntes de conferencias sobre informática. vol. 3027. Berlín, Heidelberg: Springer. págs. 287– 305. doi : 10.1007/978-3-540-24676-3_18 . ISBN 978-3-540-24676-3.
- ↑ "Mayor seguridad del intercambio de claves autenticado" (PDF) . Microsoft .
- 1 2 "Anonimato y autenticación unidireccional en protocolos de intercambio de claves" (PDF) . cacr.uwaterloo.ca .
- ↑ "OPTLS y TLS 1.3" (PDF) . www.ndss-symposium.org .
- ↑ "Mike Hamburg" . iacr.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo Strobe" . www.cryptologie.net . Consultado el 15 de diciembre de 2024 .
- ↑ "Inicio" . GitHub . Consultado el 15 de diciembre de 2024 .
- ↑ "Añadiendo especificación en desarrollo · noiseprotocol/noise_spec@213237c" . GitHub . Consultado el 15-12-2024 .
- ↑ "rev34draft -> rev34 · noiseprotocol/noise_spec@ecdf084" . GitHub . Consultado el 15-12-2024 .
- ↑ "El marco del protocolo de ruido" . noiseprotocol.org . Consultado el 25 de febrero de 2025 .
- ↑ " [ ruido ] TLS 1.3" . moderncrypto.org . Consultado el 15-12-2024 .
- ↑ "El protocolo OPTLS y TLS 1.3" (PDF) . eprint.iacr.org . 09/10/2015.
- ↑ Rescorla, Eric (agosto de 2018). El protocolo de seguridad de la capa de transporte (TLS) versión 1.3 (Informe). Grupo de trabajo de ingeniería de Internet.
- ↑ Kobeissi, Nadim; Nicolas, Georgio; Bhargavan, Karthikeyan (2018), Noise Explorer: Modelado y verificación totalmente automatizados para protocolos de ruido arbitrarios , 2018/766 , consultado el 25 de febrero de 2025
- ↑ Dowling, Benjamin; Rösler, Paul; Schwenk, Jörg (2019), Establecimiento de canal flexible, autenticado y confidencial (fACCE): Análisis del marco del protocolo Noise , 2019/436 , consultado el 25 de febrero de 2025
- ↑ Ho, Son; Protzenko, Jonathan; Bichhawat, Abhishek; Bhargavan, Karthikeyan (2022), Noise*: A Library of Verified High-Performance Secure Channel Protocol Implementations (Long Version) , 2022/607 , consultado el 25 de febrero de 2025
- 1 2 "El marco del protocolo de ruido - Tuberías de ruido" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido: reglas de procesamiento" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ Dowling, Benjamin; Rösler, Paul; Schwenk, Jörg (2020), "Establecimiento de canal flexible, autenticado y confidencial (fACCE): Análisis del marco del protocolo Noise" , Lecture Notes in Computer Science , Cham: Springer International Publishing, pp. 341–373 , doi : 10.1007/978-3-030-45374-9_12 , hdl : 20.500.11850/399156 , ISBN 978-3-030-45373-2, consultado el 17 de mayo de 2024
{{citation}}: CS1 mantenimiento: parámetro de trabajo con ISBN ( enlace ) - ↑ Kobeissi, Nadim; Nicolas, Georgio; Bhargavan, Karthikeyan (junio de 2019). «Noise Explorer: modelado y verificación totalmente automatizados para protocolos de ruido arbitrarios» . Simposio Europeo IEEE de Seguridad y Privacidad (EuroS&P) de 2019. IEEE. págs. 356–370 . doi : 10.1109/eurosp.2019.00034 . ISBN 978-1-7281-1148-3.
- ↑ "Noise Explorer: Explore Patterns" . noiseexplorer.com . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido: nombres y modificadores del protocolo" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "The Noise Protocol Framework - Handshake pattern name section" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo Noise - Secciones de nombres de algoritmos criptográficos" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo Noise: funciones DH, funciones de cifrado y funciones hash" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo Noise - Funciones criptográficas" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "Lista no oficial de algoritmos criptográficos" . GitHub . Consultado el 15 de diciembre de 2024 .
- ↑ "secp256k1" . neuromancer.sk . Consultado el 15-12-2024 .
- ↑ "FourQ" . neuromancer.sk . Consultado el 15 de diciembre de 2024 .
- ↑ "P-256" . neuromancer.sk . Consultado el 15 de diciembre de 2024 .
- ↑ "P-384" . neuromancer.sk . Consultado el 15 de diciembre de 2024 .
- ↑ "P-521" . neuromancer.sk . Consultado el 15 de diciembre de 2024 .
- ↑ «Kravatte» . equipo.keccak . Consultado el 15 de diciembre de 2024 .
- ↑ "Equipo Keccak" . keccak.team . Consultado el 15 de diciembre de 2024 .
- ↑ "KangarooTwelve: hash rápido basado en Keccak-p" . keccak.team . Consultado el 15 de diciembre de 2024 .
- ↑ "¿Por qué KangarooTwelve solo usa 12 rondas?" . Cryptography Stack Exchange . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido - Prólogo" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido: patrones de intercambio de claves unidireccionales" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido: patrones de intercambio de claves interactivos (fundamentos)" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido: ocultación de identidad" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido: patrones de intercambio de claves interactivos (diferido)" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido - Apéndices" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido: protocolos compuestos" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido: fundamentos para los protocolos compuestos" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido: el modificador de reserva" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo Noise: protocolos Zero-RTT y Noise" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ " [ ruido ] NLS?" . moderncrypto.org . Consultado el 15-12-2024 .
- ↑ " [ ruido ] Personalización de NoiseLink" . moderncrypto.org . Consultado el 15 de diciembre de 2024 .
- ↑ " [ ruido ] Estado y planes del documento" . moderncrypto.org . Consultado el 15 de diciembre de 2024 .
- ↑ "nls_spec/output/nls.pdf en master · noiseprotocol/nls_spec" (PDF) . GitHub . Consultado el 15-12-2024 .
- ↑ "noisesocket_spec/output/noisesocket.pdf en master · noiseprotocol/noisesocket_spec" (PDF) . GitHub . Consultado el 15-12-2024 .
- ↑ "Marco del Protocolo de Ruido - Responsabilidades de la aplicación" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ "El marco del protocolo de ruido: consideraciones de seguridad" . noiseprotocol.org . Consultado el 15 de diciembre de 2024 .
- ↑ rweather (2024-12-07), rweather/noise-c , consultado el 2024-12-15
- ^ Mijailovic, Nemanja (18 de noviembre de 2024), Metalnem/ruido , consultado el 15 de diciembre de 2024
- ^ Di Giacomo, Gerardo (16 de noviembre de 2024), gedigi/noisecat , consultado el 15 de diciembre de 2024
- ↑ aeternity/enoise , æternity, 14-09-2024 , consultado el 15-12-2024
- ↑ rweather (27-11-2024), rweather/noise-java , consultado el 15-12-2024
- ↑ Mokrynskyi, Nazar (17 de mayo de 2024), nazar-pc/noise-c.wasm , consultado el 15 de diciembre de 2024
- ↑ haskell-cryptography/cacophony , Grupo de Criptografía de Haskell, 23 de septiembre de 2024 , consultado el 15 de diciembre de 2024
- ↑ flynn/ruido , Flynn, 2 de diciembre de 2024 , consultado el 15 de diciembre de 2024
- ↑ Angel, Yawning (26-11-2024), Yawning/nyquist , consultado el 15-12-2024
- ↑ "NoiseGo/noise en master · mimoo/NoiseGo" . GitHub . Consultado el 15 de diciembre de 2024 .
- 1 2 OuterCorner/Noise , Outer Corner, 18/11/2024 , consultado el 15/12/2024
- ^ Lizończyk, Piotr (7 de diciembre de 2024), plizonczyk/noiseprotocol , consultado el 15 de diciembre de 2024
- ↑ Tarek (12 de noviembre de 2024), tgalal/dissononce , consultado el 15 de diciembre de 2024
- ↑ Yamaguchi (28-06-2024), Yamaguchi/ruido , consultado el 15-12-2024
- ↑ McGinty, Jake (15/12/2024), mcginty/snow , consultado el 15/12/2024
- ↑ Guanhao, Yin (2024-12-05), blckngm/noise-rust , consultado el 2024-12-15
- ↑ Victor (2 de diciembre de 2024). "David Marcus revela por qué se cerró Libra" . Altcoin Buzz . Consultado el 15 de diciembre de 2024 .
- ↑ Hall-Andersen, Mathias; Wong, David; Sullivan, Nick; Chator, Alishah (2019), nQUIC: Protección de paquetes QUIC basada en ruido , consultado el 15 de diciembre de 2024
Enlaces externos
- Sitio web oficial con especificaciones y wiki.
- repositorios de Github
- Diapositivas de una charla de 2017 titulada "El marco del protocolo de ruido".
- Introducción al marco del protocolo de ruido
- Utilización del marco de protocolo Noise para diseñar un sistema de capacidad distribuida
noisecat: la navaja suiza del ruido
Presentaciones:
- Charla de 20 minutos en Real World Crypto 2018 a cargo de Trevor Perrin.
- Charla de 25 minutos a cargo de David Wong.
- Seguridad de la capa de transporte
- protocolos de la capa de presentación
- Primitivas criptográficas