Articulo de referencia

Poli1305

Poly1305 es una familia de funciones hash universal diseñada por Daniel J. Bernstein en 2002 para su uso en criptografía . [ 1 ] [ 2 ] Al igual que cualquier familia de funcione...

Poly1305 es una familia de funciones hash universal diseñada por Daniel J. Bernstein en 2002 para su uso en criptografía . [ 1 ] [ 2 ]

Al igual que cualquier familia de funciones hash universales, Poly1305 se puede utilizar como un código de autenticación de mensajes de un solo uso para autenticar un solo mensaje utilizando una clave secreta compartida entre el remitente y el destinatario, [ 3 ] de manera similar a como se puede utilizar una clave de un solo uso para ocultar el contenido de un solo mensaje utilizando una clave secreta compartida entre el remitente y el destinatario.

Originalmente, Poly1305 se propuso como parte de Poly1305-AES, [ 2 ] un autenticador Carter - Wegman [ 4 ] [ 5 ] [ 1 ] que combina el hash Poly1305 con AES-128 para autenticar muchos mensajes usando una sola clave corta y números de mensaje distintos. Posteriormente, Poly1305 se aplicó con una clave de un solo uso generada para cada mensaje usando XSalsa20 en el cifrado autenticado NaCl crypto_secretbox_xsalsa20poly1305, [ 6 ] y luego usando ChaCha en el cifrado autenticado ChaCha20-Poly1305 [ 7 ] [ 8 ] [ 1 ] implementado en TLS en internet. [ 9 ]

Descripción

Definición de Poly1305

Poly1305 requiere una clave secreta de 16 bytes.r{\displaystyle r}y unL{\displaystyle L}-mensaje de bytesmetro{\displaystyle m}y devuelve un hash de 16 bytes.Poli1305r(metro){\displaystyle \operatorname {Poly1305} _{r}(m)}. Para ello, Poly1305: [ 2 ] [ 1 ]

  1. Intérpretesr{\displaystyle r}como un entero de 16 bytes en formato little-endian .
  2. Rompe el mensajemetro=(metro[0],metro[1],metro[2],,metro[L1]){\displaystyle m=(m[0],m[1],m[2],\dotsc ,m[L-1])}en bloques consecutivos de 16 bytes.
  3. Interpreta los bloques de 16 bytes como enteros little-endian de 17 bytes, añadiendo un byte 1 a cada bloque de 16 bytes, que se utilizarán como coeficientes de un polinomio.
  4. Evalúa el polinomio en el puntor{\displaystyle r}módulo el primo21305{\displaystyle 2^{130}-5}.
  5. Reduce el resultado módulo2128{\displaystyle 2^{128}}codificado en little-endian devuelve un hash de 16 bytes.

Los coeficientesdoi{\displaystyle c_{i}}del polinomiodo1rq+do2rq1++doqr{\displaystyle c_{1}r^{q}+c_{2}r^{q-1}+\cdots +c_{q}r}, dóndeq=L/16{\displaystyle q=\lceil L/16\rceil }, son:

doi=metro[16i16]+28metro[16i15]+216metro[16i14]++2120metro[16i1]+2128,{\displaystyle c_{i}=m[16i-16]+2^{8}m[16i-15]+2^{16}m[16i-14]+\cdots +2^{120}m[16i-1]+2^{128},}

con la excepción de que, siL0(mod16){\displaystyle L\not \equiv 0{\pmod {16}}}, entonces:

doq=metro[16q16]+28metro[16q15]++28(Lmod16)8metro[L1]+28(Lmod16).{\displaystyle c_{q}=m[16q-16]+2^{8}m[16q-15]+\cdots +2^{8(L{\bmod {1}}6)-8}m[L-1]+2^{8(L{\bmod {1}}6)}.}

La llave secretar=(r[0],r[1],r[2],,r[15]){\displaystyle r=(r[0],r[1],r[2],\dotsc ,r[15])}está restringido a tener los bytesr[3],r[7],r[11],r[15]{0,1,2,,15}{\displaystyle r[3],r[7],r[11],r[15]\in \{0,1,2,\dotsc ,15\}}, es decir , tener sus cuatro bits superiores libres; y tener los bytesr[4],r[8],r[12]{0,4,8,,252}{\displaystyle r[4],r[8],r[12]\in \{0,4,8,\dotsc ,252\}}, es decir , tener sus dos bits inferiores libres. Por lo tanto, hay2106{\displaystyle 2^{106}}distintos valores posibles der{\displaystyle r}.

Utilizar como autenticador de un solo uso.

Sis{\displaystyle s}es una cadena secreta de 16 bytes interpretada como un entero little-endian, entonces

a:=(Poli1305r(metro)+s)mod2128{\displaystyle a:={\bigl (}\operatorname {Poly1305} _{r}(m)+s{\bigr )}{\bmod {2}}^{128}}

se denomina autenticador del mensajemetro{\displaystyle m}Si un remitente y un destinatario comparten la clave secreta de 32 bytes(r,s){\displaystyle (r,s)}de antemano, elegido uniformemente al azar, entonces el remitente puede transmitir un mensaje autenticado(a,metro){\displaystyle (a,m)}Cuando el destinatario recibe un supuesto mensaje autenticado(a,metro){\displaystyle (a',m')}(que puede haber sido modificado en la transmisión por un adversario), pueden verificar su autenticidad probando si

a=¿(Poli1305r(metro)+s)mod2128.{\displaystyle a'\mathrel {\stackrel {?}{=}} {\bigl (}\operatorname {Poly1305} _{r}(m')+s{\bigr )}{\bmod {2}}^{128}.} Sin conocimiento de(r,s){\displaystyle (r,s)}, el adversario tiene probabilidad8L/16/2106{\displaystyle 8\lceil L/16\rceil /2^{106}}de encontrar alguno(a,metro)(a,metro){\displaystyle (a',m')\neq (a,m)}Eso pasará la verificación.

Sin embargo, la misma clave(r,s){\displaystyle (r,s)}no debe reutilizarse para dos mensajes. Si el adversario se entera

a1=(Poli1305r(metro1)+s)mod2128,a2=(Poli1305r(metro2)+s)mod2128,{\displaystyle {\begin{aligned}a_{1}&={\bigl (}\operatorname {Poly1305} _{r}(m_{1})+s{\bigr )}{\bmod {2}}^{128},\\a_{2}&={\bigl (}\operatorname {Poly1305} _{r}(m_{2})+s{\bigr )}{\bmod {2}}^{128},\end{aligned}}}

parametro1metro2{\displaystyle m_{1}\neq m_{2}}ellos pueden restar

a1a2Poli1305r(metro1)Poli1305r(metro2)(mod2128){\displaystyle a_{1}-a_{2}\equiv \operatorname {Poly1305} _{r}(m_{1})-\operatorname {Poly1305} _{r}(m_{2}){\pmod {2^{128}}}}

y encontrar una raíz del polinomio resultante para recuperar una pequeña lista de candidatos para el punto de evaluación secreto.r{\displaystyle r}y desde ahí el panel secretos{\displaystyle s}El adversario puede entonces utilizar esto para falsificar mensajes adicionales con alta probabilidad.

Uso en Poly1305-AES como autenticador Carter-Wegman

La propuesta original Poly1305-AES [ 2 ] utiliza la estructura Carter-Wegman [ 4 ] [ 5 ] para autenticar muchos mensajes tomandoai:=Hr(metroi)+pagi{\displaystyle a_{i}:=H_{r}(m_{i})+p_{i}}ser el autenticador en el i- ésimo mensajemetroi{\displaystyle m_{i}}, dóndeHr{\displaystyle H_{r}}es una familia de hash universal ypagi{\displaystyle p_{i}}es un valor hash aleatorio uniforme independiente que sirve como una clave de un solo uso para ocultarlo. Poly1305-AES utiliza AES-128 para generarpagi:=AESk(i){\displaystyle p_{i}:=\operatorname {AES} _{k}(i)}, dóndei{\displaystyle i}está codificado como un entero little-endian de 16 bytes.

Específicamente, una clave Poly1305-AES es un par de 32 bytes.(r,k){\displaystyle (r,k)}de un punto de evaluación de 16 bytesr{\displaystyle r}, como se indicó anteriormente, y una clave AES de 16 bytes.k{\displaystyle k}El autenticador Poly1305-AES en un mensajemetroi{\displaystyle m_{i}}es

ai:=(Poli1305r(metroi)+AESk(i))mod2128,{\displaystyle a_{i}:={\bigl (}\operatorname {Poly1305} _{r}(m_{i})+\operatorname {AES} _{k}(i){\bigr )}{\bmod {2}}^{128},}

donde las cadenas de 16 bytes y los enteros se identifican mediante la codificación little-endian. Tenga en cuenta quer{\displaystyle r}se reutiliza entre mensajes.

Sin conocimiento de(r,k){\displaystyle (r,k)}, el adversario tiene una baja probabilidad de falsificar cualquier mensaje autenticado que el destinatario acepte como genuino. Supongamos que el adversario vedo{\displaystyle C}mensajes e intentos autenticadosD{\displaystyle D}falsificaciones, y puede distinguirAESk{\displaystyle \operatorname {AES} _{k}}de una permutación aleatoria uniforme con ventaja en la mayoría de los casosδ{\displaystyle \delta }. (A menos que AES esté roto,δ{\displaystyle \delta }es muy pequeña.) La probabilidad de éxito del adversario en una sola falsificación es como máximo:

δ+(1do/2128)(do+1)/28DL/162106.{\displaystyle \delta +{\frac {(1-C/2^{128})^{-(C+1)/2}\cdot 8D\lceil L/16\rceil }{2^{106}}}.}

El número de mensajei{\displaystyle i}Nunca debe repetirse con la misma clave.(r,k){\displaystyle (r,k)}Si es así, el adversario puede recuperar una pequeña lista de candidatos parar{\displaystyle r}yAESk(i){\displaystyle \operatorname {AES} _{k}(i)}, como con el autenticador de un solo uso, y utilizarlo para falsificar mensajes.

Uso en NaCl y ChaCha20-Poly1305

El cifrado autenticado NaCl utiliza un número de mensaje.crypto_secretbox_xsalsa20poly1305i{\displaystyle i}con el cifrado de flujo XSalsa20 para generar un flujo de claves por mensaje , cuyos primeros 32 bytes se toman como una clave Poly1305 de un solo uso.(ri,si){\displaystyle (r_{i},s_{i})}y el resto se utiliza para cifrar el mensaje. Luego utiliza Poly1305 como autenticador de un solo uso para el texto cifrado del mensaje. [ 6 ]

ChaCha20-Poly1305 utiliza los primeros 32 bytes de la salida del cifrado de flujo ChaCha para generar una clave Poly1305 de un solo uso, descarta los siguientes 32 bytes y utiliza el resto para cifrar el mensaje. [ 8 ] También se ha descrito XChaCha20-Poly1305, que utiliza XChaCha en lugar de ChaCha o XSalsa20. [ 10 ]

Seguridad

La seguridad de Poly1305 y sus derivados contra la falsificación se deriva de su probabilidad de diferencia acotada como una familia de funciones hash universal : Simetro1{\displaystyle m_{1}}ymetro2{\displaystyle m_{2}}son mensajes de hastaL{\displaystyle L}bytes cada uno, yd{\displaystyle d}Si cualquier cadena de 16 bytes se interpreta como un entero little-endian, entonces...

Pr[Poli1305r(metro1)Poli1305r(metro2)d(mod2128)]8L/162106,{\displaystyle \Pr[\operatorname {Poly1305} _{r}(m_{1})-\operatorname {Poly1305} _{r}(m_{2})\equiv d{\pmod {2^{128}}}]\leq {\frac {8\lceil L/16\rceil }{2^{106}}},}

dónder{\displaystyle r}es una clave Poly1305 aleatoria uniforme. [ 2 ] : Teorema 3.3, pág. 8

Esta propiedad a veces se llamaϵ{\displaystyle \epsilon }-casi-Δ-universalidad sobreZ/2128Z{\displaystyle \mathbb {Z} /2^{128}\mathbb {Z} }, oϵ{\displaystyle \epsilon }-AΔU , [ 11 ] dondeϵ=8L/16/2106{\displaystyle \epsilon =8\lceil L/16\rceil /2^{106}}en este caso.

De autenticador de un solo uso

Con un autenticador de un solo usoa=(Poli1305r(metro)+s)mod2128{\displaystyle a={\bigl (}\operatorname {Poly1305} _{r}(m)+s{\bigr )}{\bmod {2}}^{128}}la probabilidad de éxito del adversario en cualquier intento de falsificación(a,metro){\displaystyle (a',m')}en un mensajemetro{\displaystyle m'}de hastaL{\displaystyle L}bytes es:

Pr[a=Poli1305r(metro)+sa=Poli1305r(metro)+s]=Pr[a=Poli1305r(metro)+aPoli1305r(metro)]=Pr[Poli1305r(metro)Poli1305r(metro)=aa]8L/16/2106.{\displaystyle {\begin{aligned}\Pr[&a'=\operatorname {Poly1305} _{r}(m')+s\mathrel {\mid } a=\operatorname {Poly1305} _{r}(m)+s]\\&=\Pr[a'=\operatorname {Poly1305} _{r}(m')+a-\operatorname {Poly1305} _{r}(m)]\\&=\Pr[\operatorname {Poly1305} _{r}(m')-\operatorname {Poly1305} _{r}(m)=a'-a]\\&\leq 8\lceil L/16\rceil /2^{106}.\end{aligned}}}

Aquí la aritmética dentro de laPr[]{\displaystyle \Pr[\cdots ]}se considera que está enZ/2128Z{\displaystyle \mathbb {Z} /2^{128}\mathbb {Z} }por simplicidad.

De NaCl y ChaCha20-Poly1305

Para NaCl crypto_secretbox_xsalsa20poly1305 y ChaCha20-Poly1305 , la probabilidad de éxito del adversario en la falsificación es la misma para cada mensaje de forma independiente que para un autenticador de un solo uso, más la ventaja distintiva del adversario.δ{\displaystyle \delta }contra XSalsa20 o ChaCha como funciones pseudoaleatorias utilizadas para generar la clave por mensaje. En otras palabras, la probabilidad de que el adversario tenga éxito en una sola falsificación despuésD{\displaystyle D}intentos de mensajes hastaL{\displaystyle L}bytes es como máximo:

δ+8DL/162106.{\displaystyle \delta +{\frac {8D\lceil L/16\rceil }{2^{106}}}.}

De Poly1305-AES

La seguridad de Poly1305-AES contra la falsificación se deriva de la estructura Carter - Wegman - Shoup, que instancia un autenticador Carter - Wegman con una permutación para generar el bloc de notas por mensaje. [ 12 ] Si un adversario vedo{\displaystyle C}mensajes e intentos autenticadosD{\displaystyle D}falsificaciones de mensajes de hastaL{\displaystyle L}bytes, y si el adversario tiene ventaja distintiva como máximoδ{\displaystyle \delta }frente a AES-128 como una permutación pseudoaleatoria , entonces la probabilidad de que el adversario tenga éxito en cualquiera de lasD{\displaystyle D}Las falsificaciones son como máximo: [ 2 ]

δ+(1do/2128)(do+1)/28DL/162106.{\displaystyle \delta +{\frac {(1-C/2^{128})^{-(C+1)/2}\cdot 8D\lceil L/16\rceil }{2^{106}}}.}

Por ejemplo, suponiendo que los mensajes son paquetes de hasta 1024 bytes; que el atacante ve 2⁶⁴ mensajes autenticados con una clave Poly1305-AES; que el atacante intenta la asombrosa cantidad de 2⁷⁵ falsificaciones ; y que el atacante no puede romper AES con una probabilidad superior a δ; entonces, con una probabilidad de al menos 0,999999 − δ, los 2⁷⁵ mensajes son rechazados.

Bernstein, Daniel J. (2005) [ 2 ]

Velocidad

Poly1305-AES se puede calcular a alta velocidad en varias CPU: para un mensaje de n bytes, no se necesitan más de 3,1 n + 780 ciclos Athlon, [ 2 ] por ejemplo. El autor ha publicado código fuente optimizado para Athlon , Pentium Pro/II/III/M, PowerPC y UltraSPARC , además de implementaciones de referencia no optimizadas en C y C++ como software de dominio público . [ 13 ]

Implementaciones

A continuación se muestra una lista de bibliotecas de criptografía que admiten Poly1305:

Véase también

  • ChaCha20-Poly1305 : un esquema AEAD que combina el cifrado de flujo ChaCha20 con una variante de Poly1305.

Referencias

  1. 1 2 3 4 Aumasson, Jean-Philippe (2018). «Capítulo 7: Hashing con clave». Criptografía seria: Una introducción práctica al cifrado moderno . No Starch Press. págs. 136–138 . ISBN  978-1-59327-826-7.
  2. 1 2 3 4 5 6 7 8 Bernstein, Daniel J. (29 de marzo de 2005). "El código de autenticación de mensajes Poly1305-AES" . En Gilbert, Henri; Handschuh, Helena (eds.). Cifrado rápido de software: 12.º taller internacional . FSE 2005. Lecture Notes in Computer Science. París, Francia: Springer. doi : 10.1007/11502760_3 . ISBN 3-540-26541-4. Consultado el 14 de octubre de 2022 .
  3. Bernstein, Daniel J. (1 de mayo de 2008). «Protección de las comunicaciones contra la falsificación». En Buhler, Joe; Stevenhagen, Peter (eds.). Teoría algorítmica de números: retículos, campos numéricos, curvas y criptografía . Publicaciones del Instituto de Investigación en Ciencias Matemáticas. Vol. 44. Cambridge University Press. pp. 535–549 . ISBN   978-0521808545. Consultado el 14 de octubre de 2022 .
  4. 1 2 Wegman, Mark N.; Carter, J. Lawrence (1981). "Nuevas funciones hash y su uso en autenticación e igualdad de conjuntos". Journal of Computer and System Sciences . 22 (3): 265– 279. Bibcode : 1981JCoSS..22..265W . doi : 10.1016/0022-0000(81)90033-7 .
  5. 1 2 Boneh, Dan ; Shoup, Victor (enero de 2020). Un curso de posgrado en criptografía aplicada (PDF) (versión 0.5 ed.). §7.4 El MAC Carter-Wegman, págs. 262-269 . Recuperado el 14 de octubre de 2022 . 
  6. 1 2 Bernstein, Daniel J. (10 de marzo de 2009). Criptografía en NaCl (Informe técnico). ID del documento: 1ae6a0ecef3073622426b3ee56260d34.
  7. Nir, Y.; Langley, A. (mayo de 2015). ChaCha20 y Poly1305 para protocolos IETF . IETF . doi : 10.17487/RFC7539 . RFC 7539 .
  8. 1 2 Nir, Y.; Langley, A. (junio de 2018). ChaCha20 y Poly1305 para protocolos IETF . IETF . doi : 10.17487/RFC8439 . RFC 8439 .
  9. Langley, A.; Chang, W.; Mavrogiannopoulos, N.; Strombergson, J.; Josefsson, S. (junio de 2016). Conjuntos de cifrado ChaCha20-Poly1305 para seguridad de la capa de transporte (TLS) . IETF . doi : 10.17487/RFC7905 . RFC 7905 .
  10. Arciszewski, Scott (10 de enero de 2020). "XChaCha: ChaCha con nonce extendido y AEAD_XChaCha20_Poly1305 (borrador de Internet caducado)" . Ietf Datatracker .
  11. Halevi, Shai ; Krawczyk, Hugo . «MMH: Autenticación de mensajes por software a velocidades de Gbit/segundo». En Biham, Eli (ed.). Cifrado rápido por software . FSE 1997. Lecture Notes in Computer Science. Springer. doi : 10.1007/BFb0052345 . ISBN 978-3-540-63247-4.
  12. Bernstein, Daniel J. (27 de febrero de 2005). «Límites de seguridad más robustos para los autenticadores de Wegman-Carter-Shoup» . En Cramer, Ronald (ed.). Avances en criptología EUROCRYPT 2005, 24.ª conferencia internacional anual sobre la teoría y las aplicaciones de las técnicas criptográficas . EUROCRYPT 2005. Lecture Notes in Computer Science. Aarhus, Dinamarca: Springer. doi : 10.1007/11426639_10 . ISBN 3-540-25910-4.
  13. Un código de autenticación de mensajes de última generación en cr.yp.to
  • Implementación de referencia y optimizada de Poly1305-AES por el autor DJ Bernstein
  • Implementación rápida de Poly1305 en C en github.com
  • Autenticador de un solo uso de NaCl y cifrado autenticado mediante Poly1305.