miércoles, 12 de febrero de 2020

CRIPTOGRAFÍA


En criptografía , un adversario (rara vez oponente , enemigo ) es una entidad maliciosa cuyo objetivo es evitar que los usuarios del sistema de cifrado logren su objetivo (principalmente privacidad, integridad y disponibilidad de datos). Los esfuerzos de un adversario pueden tomar la forma de intentar descubrir datos secretos, corromper algunos de los datos en el sistema, falsificar la identidad de un remitente o receptor de mensajes o forzar el tiempo de inactividad del sistema.
Los adversarios reales, a diferencia de los idealizados, se conocen como atacantes . El primer término predomina en el criptográfico y el segundo en la literatura de seguridad informática . Eve, Mallory, Oscar y Trudy son personajes adversos ampliamente utilizados en ambos tipos de textos.
Esta noción de adversario ayuda al razonamiento intuitivo y formal sobre los criptosistemas al presentar el análisis de seguridad de los criptosistemas como un "juego" entre los usuarios y un enemigo centralmente coordinado . La noción de seguridad de un criptosistema solo tiene sentido con respecto a ataques particulares (generalmente se supone que son llevados a cabo por tipos particulares de adversarios).
Hay varios tipos de adversarios dependiendo de las capacidades o intenciones que se supone que tienen. Los adversarios pueden ser [1]
  • acotado o no computacionalmente (es decir, en términos de tiempo y recursos de almacenamiento),
  • espionaje o bizantino (es decir, escuchar pasivamente o corromper activamente los datos en el canal),
  • estática o adaptativa (es decir, que tiene un comportamiento fijo o cambiante),
  • móvil o no móvil (por ejemplo, en el contexto de la seguridad de la red )
y así. En la práctica de seguridad real, los ataques asignados a tales adversarios a menudo se ven, por lo que dicho análisis no es meramente teórico.
El éxito de un adversario en romper un sistema se mide por su ventaja . La ventaja de un adversario es la diferencia entre la probabilidad de que el adversario rompa el sistema y la probabilidad de que el sistema pueda romperse simplemente adivinando. La ventaja se especifica en función del parámetro de seguridad .









El cifrado autenticado ( AE ) y el cifrado autenticado con datos asociados ( AEAD ) son formas de cifrado que aseguran simultáneamente la confidencialidad y autenticidad de los datos.

Garantías de seguridad editar ]

Además de proteger la integridad y la confidencialidad del mensaje, el cifrado autenticado puede proporcionar seguridad contra el ataque de texto cifrado elegido . En estos ataques, un adversario intenta obtener una ventaja contra un sistema criptográfico (p. Ej., Información sobre la clave secreta de descifrado) enviando textos cifrados cuidadosamente seleccionados a algún " oráculo de descifrado "."y analizar los resultados descifrados. Los esquemas de cifrado autenticados pueden reconocer textos cifrados construidos incorrectamente y negarse a descifrarlos. Esto, a su vez, evita que el atacante solicite el descifrado de cualquier texto cifrado a menos que se haya generado correctamente utilizando el algoritmo de cifrado, lo que implica que el texto sin formato ya se conoce. Implementado correctamente, el cifrado autenticado elimina la utilidad del oráculo de descifrado, al evitar que un atacante obtenga información útil que el atacante no posee.
Se han desarrollado muchos modos de encriptación autenticados especializados para su uso con cifrados de bloque simétricos Sin embargo, el cifrado autenticado puede construirse genéricamente combinando un esquema de cifrado y un código de autenticación de mensaje (MAC), siempre que:

Interfaz de programación editar ]

Una interfaz de programación típica para una implementación de AE ​​proporciona las siguientes funciones:
  • Cifrado
    • Entrada: texto sin formato , clave y, opcionalmente, un encabezado en texto sin formato que no se cifrará, pero estará cubierto por la protección de autenticidad.
    • Salida: texto cifrado y etiqueta de autenticación ( código de autenticación del mensaje ).
  • Descifrado
    • Entrada: texto cifrado , clave , etiqueta de autenticación y, opcionalmente, un encabezado (si se usa durante el cifrado).
    • Salida: texto sin formato o un error si la etiqueta de autenticación no coincide con el texto cifrado o el encabezado suministrado .
La parte del encabezado está destinada a proporcionar protección de autenticidad e integridad para los metadatos de red o almacenamiento para los cuales la confidencialidad es innecesaria, pero se desea autenticidad.

Historia editar ]

La necesidad de un cifrado autenticado surgió de la observación de que combinar de forma segura los modos de operación de cifrado de bloques de autenticación y confidencialidad separados podría ser propenso a errores y difícil. [1] [2] Esto fue confirmado por una serie de ataques prácticos introducidos en los protocolos y aplicaciones de producción por implementación incorrecta o falta de autenticación (incluyendo SSL / TLS ). [3]
Seis modos de cifrado autenticados diferentes (a saber, OCB  2.0, Key Wrap , CCM , EAX , Encrypt-then-MAC (EtM) y GCM ) se han estandarizado en ISO / IEC 19772: 2009. [4] Se desarrollaron métodos de cifrado más autenticados en respuesta a la solicitud del NIST . [5] Las funciones de esponja se pueden usar en modo dúplex para proporcionar cifrado autenticado. [6]
Bellare y Namprempre (2000) analizaron tres composiciones de cifrado y primitivas MAC, y demostraron que cifrar un mensaje y posteriormente aplicar un MAC al texto cifrado (el enfoque Cifrar-luego-MAC ) implica seguridad contra un ataque adaptado de texto cifrado elegido , siempre que ambos Las funciones cumplen con las propiedades mínimas requeridas. Katz y Yung investigaron la noción bajo el nombre de "cifrado inolvidable" y demostraron que implica seguridad contra los ataques de texto cifrado elegidos. [7]
En 2013, se anunció una competencia para fomentar el diseño de modos de encriptación autenticados. [8]

Cifrado autenticado con datos asociados (AEAD) editar ]

AEAD es una variante de AE ​​que permite a un destinatario verificar la integridad de la información cifrada y no cifrada en un mensaje. [9] AEAD une los datos asociados (AD) al texto cifrado y al contexto donde se supone que debe aparecer para que los intentos de "cortar y pegar" un texto cifrado válido en un contexto diferente sean detectados y rechazados.
Es requerido, por ejemplo, por paquetes de red. El encabezado necesita integridad , pero debe ser visible; la carga útil, en cambio, necesita integridad y también confidencialidad . Ambos necesitan autenticidad .

Enfoques para el cifrado autenticado editar ]

Cifrar-luego-MAC (EtM) editar ]

Enfoque EtM
El texto sin formato se cifra primero, luego se genera un MAC basado en el texto cifrado resultante. El texto cifrado y su MAC se envían juntos. Utilizado en, por ejemplo, IPsec . [10] El método estándar de acuerdo con ISO / IEC 19772: 2009. [4] Este es el único método que puede alcanzar la más alta definición de seguridad en AE, pero esto solo se puede lograr cuando el MAC utilizado es "muy difícil de olvidar". [11] En noviembre de 2014, la extensión TLS y DTLS para EtM se publicó como RFC 7366 . También existen varios conjuntos de cifrado EtM para SSHv2 (por ejemplo,hmac-sha1-etm@openssh.com)
Tenga en cuenta que la separación de claves es obligatoria (se deben usar claves distintas para el cifrado y para el hash con clave), de lo contrario es potencialmente inseguro dependiendo del método de cifrado específico y la función hash utilizada. cita requerida ]

Cifrar y MAC (E&M) editar ]

Enfoque de E&M
Se produce un MAC basado en el texto sin formato, y el texto sin cifrar se cifra sin el MAC. El MAC del texto sin formato y el texto cifrado se envían juntos. Utilizado en, por ejemplo, SSH . [12] A pesar de que no se ha demostrado que el enfoque de E&M sea muy imborrable en sí mismo, [11] es posible aplicar algunas modificaciones menores a SSH para hacerlo muy imborrable a pesar del enfoque. cita requerida ]

MAC-luego-Cifrar (MtE) editar ]

Enfoque MtE
Se produce un MAC basado en el texto sin formato, luego el texto sin formato y el MAC se cifran juntos para producir un texto cifrado basado en ambos. Se envía el texto cifrado (que contiene un MAC cifrado). Utilizado en, por ejemplo, SSL / TLS . [13] A pesar de que el enfoque MtE no se ha demostrado ser muy infalsificable en sí mismo, [11] el SSL / TLS aplicación ha demostrado ser fuertemente infalsificable por Krawczyk, que mostró que SSL / TLS era, de hecho, conseguir debido La codificación utilizada junto con el mecanismo MtE. [14] [ dudoso  ]A pesar de la seguridad teórica, un análisis más profundo de SSL / TLS modeló la protección como MAC-then-pad-then-encrypt, es decir, el texto sin formato se rellena primero con el tamaño de bloque de la función de cifrado. Los errores de relleno a menudo resultan en errores detectables en el lado del receptor, lo que a su vez conduce a ataques de oráculo de relleno , como Lucky Thirteen .








El afín es un tipo de cifrado de sustitución monoalfabética , donde cada letra de un alfabeto se asigna a su equivalente numérico, se cifra mediante una función matemática simple y se convierte de nuevo en una letra. La fórmula utilizada significa que cada letra se cifra en otra letra, y viceversa, lo que significa que el cifrado es esencialmente un cifrado de sustitución estándar con una regla que rige qué letra va a cuál. Como tal, tiene las debilidades de todos los cifrados de sustitución. Cada letra se cifra con la función ax + b ) mod 26 , donde b es la magnitud del cambio.

Descripción editar ]

En el cifrado afín, las letras de un alfabeto de tamaño m se asignan primero a los enteros en el rango 0 ... m - 1 . Luego usa aritmética modular para transformar el número entero al que corresponde cada letra de texto plano en otro número entero que corresponde a una letra de texto cifrado. La función de cifrado para una sola letra es
donde el módulo m es el tamaño del alfabeto y a y b son las claves del cifrado. El valor a debe elegirse de modo que a y m sean coprimos . La función de descifrado es
donde −1 es el inverso multiplicativo modular de un módulo m . Es decir, satisface la ecuación.
El inverso multiplicativo de a solo existe si a y m son coprimos. Por lo tanto, sin la restricción de a , el descifrado podría no ser posible. Se puede mostrar de la siguiente manera que la función de descifrado es la inversa de la función de cifrado,

Debilidades editar ]

Dado que el cifrado afín sigue siendo un cifrado de sustitución monoalfabético, hereda las debilidades de esa clase de cifrados. El cifrado César es un cifrado afín con a = 1 ya que la función de cifrado simplemente se reduce a un desplazamiento lineal. El cifrado Atbash usa a = -1 .
Considerando el caso específico de cifrar mensajes en inglés (es decir, m = 26 ), hay un total de 286 cifrados afines no triviales, sin contar los 26 cifrados triviales de César. Este número proviene del hecho de que hay 12 números que son coprimos con 26 que son menores que 26 (estos son los posibles valores de a ). Cada valor de a puede tener 26 desplazamientos de suma diferentes (el valor b ); por lo tanto, hay 12 × 26 o 312 claves posibles. Esta falta de variedad hace que el sistema sea altamente inseguro cuando se considera a la luz del Principio de Kerckhoffs .
La principal debilidad del cifrado proviene del hecho de que si el criptoanalista puede descubrir (mediante análisis de frecuencia , fuerza bruta , adivinanzas u otros) el texto sin formato de dos caracteres de texto cifrado, entonces la clave se puede obtener resolviendo una ecuación simultánea . Como sabemos que a y m son relativamente primos, esto puede usarse para descartar rápidamente muchas claves "falsas" en un sistema automatizado.
El mismo tipo de transformación utilizado en cifrados afines se utiliza en generadores congruenciales lineales , un tipo de generador de números pseudoaleatorios . Este generador no es un generador de números pseudoaleatorios criptográficamente seguro por la misma razón que el cifrado afín no es seguro.

Ejemplos editar ]

En estos dos ejemplos, uno de cifrado y otro de descifrado, el alfabeto será las letras de la A a la Z, y tendrá los valores correspondientes que se encuentran en la siguiente tabla.
UNsiCremiFsolHyoJKLMETROnorteOPAGQRSTUVWXYZ
0 01234 45 56 67 789 9101112131415dieciséis1718 años19202122232425

Cifrado editar ]

En este ejemplo la encriptación, [1] el texto en claro a cifrar es "AFFINE CIPHER" usando la tabla mencionada anteriormente para los valores numéricos de cada letra, teniendo un ser 5, b a ser 8, y m ser 26 ya que hay 26 caracteres en el alfabeto en uso. Sólo el valor de una tiene una restricción ya que tiene que ser primos entre sí con 26. Los valores posibles que un ser podría son 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, y 25. El valor de b puede ser arbitrario siempre que a no sea igual a 1, ya que este es el cambio del cifrado. Por lo tanto, la función de cifrado para este ejemplo será y = E (x ) = (5 x + 8) mod 26 . El primer paso para cifrar el mensaje es escribir los valores numéricos de cada letra.
Texto sin formatoUNFFyonortemiCyoPAGHmiR
X0 05 55 58134 428157 74 417
Ahora, toma cada valor de x y resuelve la primera parte de la ecuación, (5 x + 8) . Después de encontrar el valor de (5 x + 8) para cada carácter, tome el resto al dividir el resultado de (5 x + 8) por 26. La siguiente tabla muestra los primeros cuatro pasos del proceso de cifrado.
Texto sin formatoUNFFyonortemiCyoPAGHmiR
X0 05 55 58134 428157 74 417
(5 x + 8)8333348732818 años4883432893
(5 x + 8) mod 2687 77 72221218 años225 517215
El último paso para cifrar el mensaje es buscar cada valor numérico en la tabla para las letras correspondientes. En este ejemplo, el texto cifrado sería IHHWVCSWFRCP. La siguiente tabla muestra la tabla completa para encriptar un mensaje en el cifrado Affine.
Texto sin formatoUNFFyonortemiCyoPAGHmiR
X0 05 55 58134 428157 74 417
(5 x + 8)8333348732818 años4883432893
(5 x + 8) mod 2687 77 72221218 años225 517215
texto cifradoyoHHWVCSWFRCPAG

Descifrar editar ]

En este ejemplo de descifrado, el texto cifrado que se descifrará es el texto cifrado del ejemplo de cifrado. La función de descifrado correspondiente es D ( y ) = 21 ( y - 8) mod 26 , donde −1 se calcula que es 21 yb es 8. Para comenzar, escriba los equivalentes numéricos de cada letra en el texto cifrado, como se muestra en la tabla de abajo.
texto cifradoyoHHWVCSWFRCPAG
y87 77 72221218 años225 517215
Ahora, el siguiente paso es calcular 21 ( y - 8) , y luego tomar el resto cuando ese resultado se divide por 26. La siguiente tabla muestra los resultados de ambos cálculos.
texto cifradoyoHHWVCSWFRCPAG
y87 77 72221218 años225 517215
21 ( y - 8)0 0−21−21294273−126210294−63189−126147
21 ( y - 8) mod 260 05 55 58134 428157 74 417
El último paso para descifrar el texto cifrado es usar la tabla para convertir los valores numéricos nuevamente en letras. El texto sin formato en este descifrado es AFINECIPHER. A continuación se muestra la tabla con el paso final completado.
texto cifradoyoHHWVCSWFRCPAG
y87 77 72221218 años225 517215
21 ( y - 8)0 0−21−21294273−126210294−63189−126147
21 ( y - 8) mod 260 05 55 58134 428157 74 417
Texto sin formatoUNFFyonortemiCyoPAGHmiR

Alfabeto completo codificado editar ]

Para que el cifrado y el descifrado sean más rápidos, se puede cifrar todo el alfabeto para crear un mapa uno a uno entre las letras del texto sin cifrar y el texto cifrado. En este ejemplo, el mapa uno a uno sería el siguiente:
letra en el texto claroUNsiCremiFsolHyoJKLMETROnorteOPAGQRSTUVWXYZ
número en el texto claro0 01234 45 56 67 789 9101112131415dieciséis1718 años19202122232425
(5 x + 8) mod 2681318 años2327 712172216 611dieciséis210 05 5101520254 49 91419243
letra de texto cifradoyonorteSXCHMETRORWsisolLQVUNFKPAGUZmiJOTYre

Ejemplos de programación editar ]

Usando el lenguaje de programación Python , el siguiente código puede usarse para crear un alfabeto encriptado usando las letras romanas de la A a la Z.
# Imprime una tabla de transposición para un cifrado afín. 
# a debe ser coprimo para m = 26. 
def  affine ( a :  int ,  b :  int )  ->  Ninguno : 
    para  i  en el  rango ( 26 ): 
        print ( chr ( i + ord ( 'A' ))  +  ":"  +  chr ((( a * i + b ) % 26 ) + ord ( 'A' )))

# Un ejemplo de llamada 
afín ( 5 ,  8 )
O en Java :
público  void  Affine ( int  una ,  int  b )  { 
    para  ( int  num  =  0 ;  num  <  26 ;  num ++) 
        System . a cabo . println ((( char ) ( 'A' + num ))  +  ":"  +  (( char ) ( 'A' + ( a * num  +  b )%  26 ))  ); 
} 
Affine (5 , 8 )
O en Pascal :
Procedimiento  afín ( a , b  :  entero ) ; 
 comenzar 
  por  num  : =  0  a  25  do 
   WriteLn ( Chr ( num + 65 )  ,  ':'  ,  Chr ((( a * num  +  b )  mod  26 )  +  65 ) ; 
 end ;

comenzar 
 Affine ( 5 , 8 ) 
final .
En PHP :
función  affineCipher ( int  $ a ,  int  $ b ) :  void 
{ 
    for  ( $ i  =  0 ;  $ i  <  26 ;  $ i ++ )  { 
        echo  chr ( $ i  +  65 )  .  ''  .  chr ( 65  +  ( $ a  *  $ i  +  $ b )  %  26 )  .  '
' ; 
    } 
}

affineCipher ( 5 ,  8 );

No hay comentarios:

Publicar un comentario