Criptografía

De ALDEA WIKI
Ir a la navegación Ir a la búsqueda
CRIPTOGRAFIA.png

Criptografía es la ciencia de la escritura secreta. Se ha definido, tradicionalmente, como el ámbito de la criptología que se ocupa de las técnicas de cifrado o codificado destinadas a alterar las representaciones lingüísticas de ciertos mensajes con el fin de hacerlos ininteligibles a receptores no autorizados.

Para una visión más genérica de criptografía, referirse a Criptografía. Este artículo se enfoca en presentar algunos conceptos básicos necesarios para el entendimiento de la criptografía y definirla en el ámbito de las blockchains, específicamente en la blockchain de Cardano.

Conceptos básicos de criptografía

Encriptación y desencriptación

La información que puede ser leída y entendida sin ningún tipo de medida o intervención adicional es conocida como texto sin formato o texto claro.

El método de cambiar el texto sin formato, que es legible y entendible, de tal forma que se esconda el contenido de su mensaje se llama encriptación. El resultado de la encriptación es un texto ilegible para los seres humanos conocido como texto cifrado. El propósito de la encriptación es el de esconder la información de cualquier persona que lo intercepte, que no sea el destinatario final del mensaje, de tal forma que no pueda entenderlo.

El proceso de convertir el texto cifrado a texto sin formato se conoce como desencriptación.

¿Qué es la criptografía moderna?

La criptografía, en el ámbito de la criptología, es la ciencia que utiliza métodos matemáticos y algoritmos computacionales para encriptar y desencriptar la información. La criptografía permite guardar o transmitir información a través de canales inseguros de tal forma que no pueda ser leída y comprendida por nadie excepto por su destinatario original. La criptografía supone que el destinatario final tendrá una forma específica para desencriptar el mensaje y poder conocer su contenido.

Un algoritmo criptográfico o de cifrado es una función matemática utilizada en el proceso de encriptación o desencriptación. Sin embargo, el algoritmo matemático trabaja en combinación con una llave o varias llaves (una palabra, un número, una frase) para encriptar el texto sin formato. Esto quiere decir que el mismo texto genera un distinto texto cifrado cuando se utilizan distintas llaves.

Funciones Hash

Una función hash es una función matemática que toma cualquier texto o cualquier tipo de datos y lo convierte en una secuencia de números enteros. Estas funciones matemáticas tienen ciertas propiedades que le confieren cualidades ideales en criptografía.

  • Irreversibilidad: a partir del hash no se puede derivar matemáticamente el texto.
  • Resistente a colisiones: un mismo hash no puede generarse a partir de dos textos distintos.
  • Longitud fija: independientemente de la longitud de entrada en el texto, la salida de la función siempre tendrá la misma longitud.

Un ejemplo de un hash con la función sha3_256 aplicado a la cadena de caracteres “AldeaWiki” genera como resultado:

SHA3-256('AldeaWiki') = '8fdb565bff1a6bb257e8fe17c9f7257b80dddb79e39201eb68b607487f79733a'

No existe una forma eficiente de encontrar el mensaje “AldeaWiki” a partir del hash recién generado.

Las funciones hash son utilizadas en diversas aplicaciones hoy en día como:

  • Checksums: aplicando hash a un archivo se puede verificar su integridad y confirmar que el archivo no ha sido cambiado o vulnerado ya que el hash cambiaría.
  • Guardar contraseñas en bases de datos tradicionales.
  • Generar IDs únicos: algunas direcciones utilizadas en blockchains son hashes.

Algoritmos más conocidos de hash:

  • Familia SHA-2: basados en el concepto criptográfico Merkle-Damgard
    • SHA-256
    • SHA-512
  • Familia SHA-3: basados en el concepto criptográfico Sponge construction
    • SHA3-256
    • SHA3-512
    • Keccak-256
  • BLAKE2 / BLAKE2s / BLAKE2b
    • 160-bit
    • 224-bit
    • 256-bit
    • 384-bit
    • 512-bit
  • RIPEMD-160
    • 160-bit
    • 128-bit
    • 256-bit
    • 320-bit

En criptografía moderna existen muchos más algoritmos y combinaciones.

Encriptación con llaves simétricas o criptografía convencional

Se conoce como encriptación con llaves simétricas a los métodos que utilizan la misma llave secreta tanto para encriptar como para desencriptar.

El Cifrado de César es un ejemplo común de criptografía convencional que utiliza el cifrado por sustitución en donde se mueven las letras del alfabeto una cierta cantidad de caracteres. En este caso, la llave secreta es el número de caracteres a mover y por lo tanto al cambiar la llave secreta, el texto cifrado cambia igualmente.

La criptografía con llaves simétricas es un método rápido y eficiente de encriptado y es útil en la encriptación de información que no necesita ser transmitida ni expuesta a través de un canal de comunicación. Esto es debido a que la llave única de encriptación necesita ser expuesta o transmitida junto con el mensaje encriptado para permitir su cifrado, lo cual implica una vulnerabilidad si dicha llave es interceptada.

Algunos de los métodos de cifrado más conocidos en criptografía convencional son:

  • AES
  • ChaCha20
  • RC6
  • Twofish
  • CAST

Por lo general utilizan una combinación de otros algoritmos como métodos adicionales para generación de llaves simétricas más robustas (algoritmos conocidos como derivaciones de llaves a partir de contraseñas como Scrypt y Argon2). Las llaves simétricas son conocidas por ser quantum-resistant, o resistentes a la computación cuántica, si números suficientemente grandes en su generación son utilizados.

Encriptación con llaves asimétricas o criptografía pública

El problema de la distribución de una llave privada se ha resuelto con el uso de llaves públicas cuyo concepto fue introducido por Whitfield Diffie y Martin Hellman en 1975.

Fundamentalmente, la criptografía pública es un método que utiliza un juego de llaves asimétricas para la encriptación: una llave pública que encripta la información y su correspondiente llave privada o secreta para la desencriptación. Cualquier persona o máquina con una llave pública puede encriptar un mensaje, el cual no puede volver a ser desencriptado con esta. Únicamente el poseedor de la llave privada está en la capacidad de desencriptar el mensaje.

Con la capacidad computacional actual no es posible deducir la llave privada a partir de la llave pública. Esto ha simplificado la transmisión de mensajes de forma segura entre entidades que no deban tener un acuerdo de seguridad previo, tal como se hace necesario en la encriptación simétrica, ya que la necesidad de transmitir una llave secreta para encriptar y desencriptar es eliminada.

Algunos de los métodos de encriptación más conocidos y utilizados actualmente son:

  • Diffie-Hellman
  • RSA ó Ron Rivest, Adi Shamir, Leonard Adleman quienes fueron los inventores del algoritmo
  • DSA ó Digital Signature Algorithm, que significa Algoritmo de Firma Digital y fue inventado por David Kravitz

La encriptación con llaves asimétricas es unas 1000 veces más lenta que la encriptación convencional, especialmente para paquetes de información grandes. Es por esto, que métodos como PGP combinan las ventajas de velocidad en uno y seguridad en otro.

Un ejemplo de combinación entre criptografía pública y convencional sería el siguiente:

  1. El mensaje se comprime y el archivo comprimido se encripta con una llave simétrica que es generada al instante y utilizada una sola vez.
  2. La llave recién generada se encripta con la llave pública (llave asimétrica) del receptor del mensaje.
  3. Tanto la llave encriptada como el mensaje cifrado se envían.
  4. El receptor desencripta la llave simétrica con su llave privada.
  5. Una vez recuperada la llave simétrica, el receptor desencripta el mensaje.

Ninguna aplicación moderna, como por ejemplo la criptografía en blockchains, utiliza un solo método de los listados anteriormente, sino que son una combinación de todos los anteriores para explotar las ventajas que cada uno presenta.

Criptografía en Cadenas de Bloques

El hash es la pieza fundamental sobre la cual una blockchain basa su seguridad y además logra características únicas de inmutabilidad.

Hash para PoW

El SHA-256 es utilizado ampliamente en Bitcoin por ejemplo para identificar las transacciones o para la prueba de esfuerzo realizada por los mineros. La prueba de esfuerzo utiliza un tipo de hash cuya derivación requiere de mucho esfuerzo computacional. Este tipo de funciones están diseñadas para consumir muchos recursos computacionales y mucha memoria de tal forma que sea muy difícil de lograr de forma eficiente para hardware convencional.

Entre los algoritmos de hash asociados se encuentran los siguientes, cuyas funciones toman una considerable cantidad de tiempo en calcularse:

  • ETHash
  • Equihash
  • CryptoNight
  • Cooko Cycle.

Criptografía en Cardano

La criptografía en Cardano y en extensión su seguridad están basadas en el esquema de firmas y juegos de llaves.

Esquema de firmas

Cardano utiliza la metodología de encriptación con llaves asimétricas sobre la cual basar la seguridad de sus transacciones. Sin embargo, no depende de un esquema en particular en la generación de llaves, ya que desde su principio de diseño, entendió que no existe un solo método completamente incorruptible, puesto que cada método es susceptible de ser vulnerado en algún punto. Un ejemplo, es que los esquemas criptográficos utilizados en las décadas de los años 70s y 80s, como los DES - Data Encryption Standard ya han sido hackeados, de tal forma que se espera que los esquemas de criptografía actuales sean quebrantados en algún punto.

Con el fin de evitar un punto único de fallo, Cardano ha implementado un esquema de criptografía mixto comenzando por la derivación de llaves con curvas elípticas, en particular la curva Ed25519. Igualmente, utiliza la metodología de billeteras del tipo HD, de acuerdo a la especificación BIP32-Ed25519.

Así mismo, Cardano entiende que estos esquemas pueden ser vulnerados en algún punto y su diseño permite integrar más esquemas o algoritmos de firmas a través de soft forks o actualizaciones.

Fundamentalmente existen dos tipos de pares de Llaves en Cardano: las de direcciones, asociadas a las transacciones y al staking; y las de nodos, asociadas a la producción de bloques.

En cuanto a las de nodos, en particular los operadores de Stake Pools necesitan generar algunas de estas llaves:

  • Un par de llaves frías: Llaves que confieren la posibilidad de firma de bloque a las llaves KES.
  • Un par de llaves KES o “Key Evolving Signature”: Llaves utilizadas para firmar los bloques. Se llaman evolutivas pues tienen una fecha de expiración y estas deben ser rotadas o generadas antes de su vencimiento para poder seguir firmando bloques.
  • Un par de llaves VRF o “Verifiable Random Function”: utilizadas para identificar si el nodo es un líder para firma de bloque en el slot en curso.

Las llaves entonces, se utilizan en la creación de certificados operacionales y en la verificación de si un nodo es líder para la firma de bloques.

Libsodium es un componente importante en la criptografía de Cardano y es utilizado como una librería para implementar todos los algoritmos de encriptación y derivación de llaves en Cardano.

Referencias


v1.0 - Escrito por MoxiePool, revisado por MRTN - 01-05-2022