Confidencialidad

Para tratar de conseguir confidencialidad podemos usar la cryptografia , ¿Como?
Imaginemos 2 personas conectadas que tratan de comunicarse entre ellas de forma segura, para conseguirlo han usado una Key y cifrado, el que envia el mensaje lo encripta y el receptor lo decripta. En este caso la confidencialidad depende de la Key.
Para continuar tenemos que entender 2 conceptos importantes, la clave publica y la clave privada.
Public Key "Clave publica": emisor y receptor intercambian dos claves, receptor tiene la clave que sera secreta y la otra es publica, todos pueden verla. Requiere ser generada.
Private Key "Clave privada": se comparte entre emisor y receptor una clave que solo tienen que conocer ellos. tiene que ser random y el intercambio debe ser seguro.


Encriptar : E(KEY , Mensaje) -> cifrado
Decryption : D(KEY, cifrado) -> Mensaje/Error
Con estos dos ultimos conceptos es con los que mas se juega en criptografia, imagina que por ejemplo con E(Key1 , Texto1) consegumos un cifrado que fuse igual que E(Key, Texto2), significaria que podriamos llegar a ver como afecta la key al resultado. Entonces para definir seguridad tendriamos que decir que seguridad consiste en que sea imposible obtener cualquier informacion del cifrado. Solo consideramos que es seguro si el atacante al ver el texto cifrado no tiene mas informacion.
Para el intercambio de claves , hay que tener en cuenta que si las claves son muy pequeñas estadisticamente seria posible obtener la clave con cierta probabilidad alta, y si esta es demasiado grande receptor y emisor no podrian usarla. Para solucionar este problema usamos aritmetica modular tal que :


El problema que tenemos aqui es que si con g contenido en (Zp)*, y un h random de (Zp)*, se encuentra ga = h se podria romper puesto que se podria sacar las claves, entonces el sistema tiene que ser amplio con un N alto.
Pero sigue sin ser lo suficientemente seguro, debemos usar para ello Decisional Diffie-Hellman (DDH). Si se selecciona una g y una p dificiles el sistema tendria que ser resistente.
TLS/SSL: Para realizar el intercambio el protocolo que permite esto es TLS que sopora DH y ECDH (elliptic curves Diffie Hellman - mismo principio pero distinta aritmetica).

Asegurar Seguridad


One Time Pad : K son bits randoms se aplica una operacion de XOR entre la clave y el mensaje. Con esto conseguimos seguridad mientras K solo se utilice una vez. Si se utliza dos veces podria usarse esa segunda para obtener el mensaje. c = K+m, c1 = K + m2 -> c+c1 = m+m1.
Tras el concepto inicial y comprobar que tiene que cumplir que para una misma key puedan usar un mismo algoritmo, tenemos el concepto de "Indistinguishability against chosen-plaintext attacks"- IND-CPA . Segun este un plan es seguro si no hay algún adversario que con un tiempo limitado consigue una probabilidad cerca de 1/2.

Determinista e indeterminista


Determinista : para todo m tal que m, E(K,m) es siempre el mismo valor resultante
Indeterminista: para todo m tal que m, E(K,m) es resultante un valor random. Los IND-CPA tienen que ser indeterministas para ser seguros.

Public key encryption (PKE) Vs Private Key


Private Key requiere llaves compartidas. El intercambio de claves resuelve esto pero necesita un protocolo. Receptor tiene que cambiar las diferentes claves con sus receptores. Con la encriptación clave pública, receptor genera un par de llaves publicas, las publica y se desconecta (sin Intercambio de claves). Puede recibir mensajes de muchos remitentes.
La clave privada es mas rapida , la publica necesita asumir mas problemas matematicos y por ende tenerlo mas en cuenta. La clave publica suele necesitar ser certificada para asegurarno de su autenticidad.
El Gamal PKE: ver mas

RSA

La clave de encriptación es pública y es diferente de la clave de desencriptación que se mantiene en secreto (privado). En rsa, esta asimetría se basa en la dificultad práctica de la factorización del producto de dos grandes números primos.
receptor seleccionan un p y un q primos, N = pxq , luego un e,d talque axd = 1 mod gam(N), sk (secreta)= (p,q,d) y pk (publica)= (N,e).
Se encrypt talque Enc(m,pk) = m^e mod N = c.
Se decrypt talque Dec(c,sk) = c^d mod N = m.
El problema sera por tanto cuando dado un c y (e,N), calcula m tal que m^e = c mod N. Ademas RSA es determinista puesto que es posible identificar que hay distintos m , por tanto es necesario hacerlo random.

Firma digital

La idea es poder asegurar que el emisor del mensaje es el verdadero autor del mensaje.

  • Key generation (landa) -> pk,sk
  • firma (m,sk) -> o
  • Verificacion (m,o,pk) -> 0 o 1 (aceptado)

  • por tanto nadie puede firmar sin sk , y nadie podria modificar sin conocer sk. Pero un atacante podria mirar varios mensajes firmados con la misma sk y podria llegar a utilizar esa informacion. Un atacante gana si puede crear una firma válida sk para un nuevo mensaje M*, que es diferente de cualquier mensaje que ha preguntado antes.
    Usando RSA por ejemplo en un princicipio se encontro que (m1,o1) y (m2,o2) , el atacante puede obtener un m* = m1 x m2 con usar o* = o1 x o2. La solucion fue usar un hash para el mensaje y luego decrypt.
    Se puede usar los algoritmos de el Gamal y DSA.
    Todo esto necesita por tanto que al que le llega el mensaje se fie de la autenticidad de pk, para ellos hay entidades que trabajan en certificar (CA)

    Tecnicas aplicadas a la practica

    Block ciphers "Cifrado en bloque"

    Block cipher es un algoritmo determinista que opera en grupos de bits de longitud fija, llamado bloques, con una transformación invariable especificada por una clave simétrica. Los cifrados de bloque funcionan como elementos importantes en el diseño de muchos protocolos criptográficos, y son ampliamente utilizados para aplicar la codificación de los datos de granel.

  • DES (64bits):
  • AES (128bits):
  • Message Authentication Codes (MACs)


    Toma una llave y un mensaje (plaintext) y productos una etiqueta Mac (k, m) → t.
    Toma una llave, un mensaje y una etiqueta y productos aceptados (1) o Rechazo (0).
    un atacante podria usar un tag visto anteriormente por tanto es necesario usar un HASH:

  • Hash-and-MAC : MAC(K, H(m))
  • MAC-then-Encrypt (used in SSL)
  • Encrypt-then-MAC (used in IPsec)
  • Encrypt-and-MAC (used in SSH)
  • HASH


    Entra un input con un tamaño variable y sale un mensaje con un tamaño fijo
    Decimos que es seguro cuando ese mensaje solo se puede obtener con la clave y el mensaje original. Es decir H(x) = c , no existe otro H(x1) = c, cuando c=c2 decimos que hay colisiones. Ejemplos son MD5,SHA-1,SHA-2,SHA-3.
    By the birthday paradox, a brute-force attack succeeds with probability 2^-L/2 ⇒ output length is critical