En esta guía, profundizaremos en la criptografía simétrica y asimétrica y la ciencia detrás de la criptografía de las criptomonedas.
Las criptomonedas como Bitcoin y Ethereum utilizan un sistema descentralizado de igual a igual para realizar transacciones. Dado que todo el proceso está en línea, existe el temor de que las transacciones puedan ser volátiles y pirateadas. Lo que veremos en esta guía es cómo la criptomoneda usa la criptografía para hacer que sus transacciones sean extremadamente seguras.
Firmas digitales
Una de las herramientas criptográficas más importantes que se utilizan en las criptomonedas es el concepto de firmas. ¿Qué es una firma en la vida real y cuáles son sus propiedades? Imagina un papel que has firmado con tu firma, ¿qué debe hacer una buena firma?
- Debe proporcionar verificación. La firma debe poder verificar que es usted quien realmente firmó el documento.
- Debe ser no falsificable. Nadie más debería poder falsificar y copiar su firma.
- No repudio. Si ha firmado algo con su firma, entonces no debería poder retirarlo ni reclamar que otra persona lo haya hecho en su lugar.
En el mundo real, sin embargo, no importa cuán intrincada sea la firma, siempre hay posibilidades de falsificación, y realmente no se pueden verificar las firmas usando ayudas visuales simples, es muy ineficiente y no confiable.
La criptografía nos da una solución a esto mediante “firmas digitales” que se realiza mediante el uso de “claves”. Entonces, ¿qué son las llaves? ¿Y cómo se usan en blockchain? Antes de explorarlos, es importante saber más sobre la criptografía básica.
¿Qué es la criptografía de criptomonedas?
La criptografía es un método para utilizar principios matemáticos avanzados para almacenar y transmitir datos en una forma particular, de modo que solo aquellos a quienes está destinada puedan leerlos y procesarlos. La criptografía se ha utilizado durante miles y miles de años por las personas para transmitir mensajes sin detección. De hecho, el primer uso de la criptografía se vio en la tumba tomada del Reino Antiguo en Egipto alrededor de 1900 a. C. La criptografía ha existido en la sociedad moderna de una forma u otra.
El cifrado es una de las herramientas más críticas que se utilizan en criptografía. Es un medio por el cual un mensaje puede volverse ilegible para un lector no deseado y solo puede ser leído por el remitente y el destinatario. En la tecnología moderna, hay tres formas de cifrado que se utilizan ampliamente: criptografía simétrica, criptografía simétrica y hash.
Criptografía simétrica
La criptografía simétrica es el método criptográfico más antiguo conocido por el hombre. El concepto es muy simple y si lo dividiéramos en pasos, así es como se verá:
- Tiene un mensaje M que desea enviar a su amigo.
- Cifras el mensaje con una clave y obtienes un texto cifrado C.
- Tu amigo obtiene tu texto cifrado C.
- Luego, descifra el texto cifrado con la misma clave para recuperar el mensaje M.
Si tuviéramos que mostrar una representación visual del proceso, así se vería.
Crédito de la imagen: SSL2BUY
Hay dos tipos de criptografía simétrica:
- Stream Ciphers.
- Bloquear cifrados.
¿Qué son los cifrados de flujo?
El cifrado de flujo básicamente significa usar una clave fija que reemplaza el mensaje con una cadena de caracteres pseudoaleatoria. Básicamente es el cifrado de cada letra de una en una.
Vamos a discutir 3 tipos de cifrados de flujo en esta guía para darle una idea de cómo funcionan los cifrados de flujo:
- Bloc de notas de una sola vez con alfabetos.
- Pad de un solo uso con puerta XOR.
- Registro de desplazamiento de retroalimentación lineal.
Bloc de notas de una sola vez con alfabetos
Para realizar esta encriptación, necesitamos tener una clave que tenga el mismo número de caracteres que el mensaje y debe usarse una sola vez (de ahí el término “almohadilla de un solo uso”).
Supongamos que para este ejemplo vamos a enviar un mensaje, “ENCUÉNTAME FUERA” a nuestro amigo Bob. Pero no queremos que nadie intercepte nuestro mensaje. Por eso, Bob y nosotros hemos decidido utilizar un pad de un solo uso que dice así:
“B D U F G H W E I U F G W”
Como puede ver, el pad tiene la misma cantidad de caracteres que el mensaje, es decir, 13.
Ahora, este es un ejemplo muy simple del pad de una sola vez, lo estamos usando porque creemos que es el mejor ejemplo para comprender esta táctica.
Ahora, una cosa más que debe tener en cuenta, cada alfabeto será reemplazado por su equivalente numérico durante el proceso.
El mapeo numérico es el siguiente:
Durante el proceso, habrá 6 piezas de datos que necesitamos que son: Básicamente, el equivalente numérico de cada alfabeto. Bien, ahora que hemos construido los cimientos, pasemos al proceso real.
- Mensaje original (OM): El mensaje original por el que estamos pasando. En este caso “CONOCEME FUERA”.
- Mensaje numérico original (NOM): el equivalente numérico del mensaje original,
- OTP: el bloc de notas de un solo uso.
- OTP numérico (NOTP): El equivalente numérico de la OTP.
- NCT: El texto cifrado numérico que es NOM + NOTP mod 26
- CT: El texto cifrado que es el equivalente alfabético de los números en el NCT.
Por lo tanto, debemos enviar el mensaje “MEET ME OUTSIDE” y debemos usar el bloc de notas de un solo uso para cifrarlo.
El proceso de encriptación
Entonces, comencemos poniendo el mensaje en el OM
Pusimos el mensaje “MEET ME OUTSIDE” en la fila OM. Ok, ¿qué pasó aquí?
A continuación, usamos la tabla de mapeo numérico para obtener el equivalente numérico de cada alfabeto. Entonces, consultemos la tabla de mapeo y veamos lo que obtenemos:
En la fila OTP ingresamos la clave que ya nos dieron, que es, en caso de que lo hayas olvidado, “B D U F G H W E I U F G W”. Es una simple sustitución, tomaremos estos valores y los colocaremos en la fila NOM.
Ahora, en la fila NOTP usamos la misma tabla de mapeo de números y encontramos los valores numéricos equivalentes de la clave que son:
“1, 3, 20, 5, 6, 7, 22, 4, 8, 20, 5, 6, 22”.
En la nueva fila, para el texto cifrado numérico (NCT) agregamos el NOTP y NOM y modificamos el resultado por 26 para obtener nuestro NCT.
Entonces, finalmente, el mensaje “MEET ME OUTSIDE” se convierte en una serie pseudoaleatoria de caracteres “N H Y Y S L K Y B M N J A”. Así es como encuentras los valores de NCT y luego usas la tabla de mapeo y encuentras los alfabetos correspondientes que son: “N H Y Y S L K Y B M N J A”.
Así es como funciona el proceso de encriptación.
El proceso de descifrado
Ahora veremos cómo podemos descifrar el mensaje usando exactamente la misma clave.
Veamos los datos que Bob tiene consigo:
- Tiene el mensaje encriptado que le he enviado.
- Él tiene la clave que compartimos los dos.
- Tiene la tabla de mapeo para encontrar los equivalentes numéricos.
- Entonces, ¿cómo descifrará el mensaje usando estos datos?
Mapeará los valores numéricos tanto de la clave como del mensaje cifrado para obtener NCT y NOTP.
- Luego calculará el NOM (valor numérico del mensaje original) haciendo este cálculo: NOM = NCT – NOTP mod 26.
- Utilizará la tabla de mapeo para recuperar los alfabetos correspondientes.
Entonces, veamos cómo funciona el cálculo de NOM.
Ahora, si asignamos el NOM a su equivalente alfabético usando la tabla de mapeo, obtenemos:
“CONOCEME FUERA”
Y así, el mensaje se cifra y se descifra con la misma clave.
Pad de un solo uso con puerta XOR
XOR u “O exclusivo” es una puerta lógica. ¿Qué es una puerta lógica? Una puerta lógica generalmente toma 2 entradas y emite 1 salida. Las entradas y salidas son valores binarios, lo que significa que pueden ser 1 o 0. Una puerta lógica XOR toma 2 entradas binarias y emite una salida alta SÓLO cuando las entradas son diferentes. Es decir, si A y B se ingresan en una puerta XOR, entonces la salida C será 1 SOLAMENTE cuando A no sea igual a B.
La puerta XOR se ve así:
El proceso de encriptación
Suponga que tiene datos de texto sin formato que desea enviar a su amiga Alice. Primero, lo convertirá a su forma binaria. Suponga que el mensaje que tiene es este: 00011110
Ahora tiene la clave, la clave que comparte con su destinatario y suponga que ha pasado la clave a través de un algoritmo que le da el resultado binario equivalente: 01001010.
Entonces, ahora que tiene la clave, va a XOR cada uno de los bits individuales correspondientes para obtener la salida de texto cifrado resultante.
Texto cifrado = Tecla XOR de texto sin formato
Entonces, si XOR ambos datos, la clave que obtendrá es:
“01010100”
Este es el texto cifrado que Alice obtendrá de usted.
El proceso de descifrado
Entonces, ¿cómo descifrará Alice su mensaje y recuperará el original?
Estos son los datos que tiene:
- El texto cifrado
- La clave.
- Entonces, ¿qué va a hacer ella? Es simple.
Ella simplemente XOR la clave y el texto cifrado y recuperará el mensaje original. Ver por ti mismo:
Y así, recuperará el mensaje original.
Registro de desplazamiento de retroalimentación lineal
¿Qué es un registro de desplazamiento de retroalimentación lineal? Es una función cuya salida futura depende completamente de su estado anterior (o actual). Esto se hará más claro a medida que sigas leyendo, ¡así que no te asustes!
La idea de este estilo de cifrado de flujo es predeterminar una clave con su destinatario, que será una función de registro de desplazamiento de retroalimentación lineal que usted utilizará para determinar el código. Suponga que habla con su amigo Bob y determina que esta es la fórmula con la que ambos quieren ir (crédito a Daniel Rees de Youtube por esta fórmula).
Mi (yo + 3) = Mi (yo + 1) + 2E (yo + 2) mod 26.
Y supongamos también que antes de enviar este mensaje, usted y Bob determinaron que E (1) = 2 y E (2) = 4.
Ahora puede ver que en esta ecuación, todas las salidas futuras dependen de las salidas anteriores.
Entonces, suponga que el mensaje que desea enviarle a Bob es “MEET ME”. Dado que hay 6 caracteres, necesitamos determinar 6 valores de E () para que actúen como clave. Ya hemos predeterminado los valores de E (1) y E (2). Ahora necesitamos calcular E (3) a E (6).
- E (3) = E (1) + 2E (2) mod 26 = 10.
- E (4) = E (2) + 2E (3) mod 26 = 24.
- E (5) = E (3) + 2E (4) mod 26 = 6.
- E (6) = E (4) + 2E (5) mod 26 = 10.
Entonces, ahora que tenemos las claves, comencemos con el descifrado.
El proceso de encriptación
Entonces, ahora que tenemos la clave y el mensaje, creemos la tabla:
Para obtener el texto cifrado numérico, agregas la clave y el valor numérico correspondiente del alfabeto que mapeas de esta tabla que ya hemos visto antes:
Ahora, para obtener el valor numérico de los textos cifrados, agregue la clave y el valor numérico del mensaje original y modifique con 26.
Entonces obtienes:
Ahora use la tabla de mapeo nuevamente para encontrar los alfabetos correspondientes y obtendrá “OIORSO”. Ese es el mensaje encriptado.
El descifrado de este mensaje es realmente difícil, especialmente si no tiene la clave. Sin embargo, un experto podría detectar un patrón. Necesitará computadoras para generar este código.
Ejemplos de cifrados de flujo utilizados en el mundo real.
El cifrado Rivest 4 del RC4
- Se utiliza en WEP, también conocido como protocolo equivalente cableado para la seguridad de la red inalámbrica.
- También es una opción en TLS / HTTPS para cifrar el tráfico web.
- Dado que se ha agrietado tantas veces, ya no se recomienda su uso.
- El A5 / 1
- Se utiliza para cifrar los datos y las comunicaciones del teléfono GSM (Sistema global para comunicaciones móviles).
- Edward Snowden en sus filtraciones reveló que la NSA rutinariamente sigue rompiendo GSM con fines de vigilancia, por lo que ya no es un modo seguro de cifrado.
- Entonces, eso se trata básicamente de cifrados de flujo, es hora de pasar a bloquear cifrados.
¿Qué son los cifrados en bloque?
Los cifrados de bloque son una forma de criptografía simétrica que utiliza una clave de longitud fija para cifrar un bloque de longitud fija. Comencemos por revisar un cifrado de sustitución muy común que debe haber visto antes:
Entonces, si alguien le dijera que recibió un mensaje que dice “EFBD” y quiere que lo descifre y obtenga el mensaje original, ¿cómo lo hará?
Simplemente verá la tabla, verá qué alfabetos corresponden a cuál y luego simplemente sustituya, ¿verdad? Entonces “EFBD” es el cifrado de “FACE”.
Ahora echemos un vistazo al texto sin formato y el texto cifrado y compárelos:
- Llanura: A B C D E F
- Cifrado: F A B C D E
Entonces, como puede ver, el texto cifrado es básicamente el texto sin formato desplazado a la derecha en uno. Entonces, en este caso particular:
- EFBD = CARA desplazada en 1
- Eso, en esencia, es un cifrado en bloque. Dado un texto sin formato de entrada y una clave, puede generar un texto cifrado único. Una cosa más que es extremadamente importante y debe tenerse en cuenta. Dada la clave, cualquiera puede descifrar el texto cifrado del texto sin formato y viceversa. Los ejemplos que damos aquí son todos extremadamente simplistas, el cifrado de bloques ocurre con GRANDES trozos de datos.
Si estamos buscando una representación visual de un cifrado de bloque, este es el aspecto que tendrá:
Otra propiedad interesante del cifrado en bloque es que si la clave cambia, el texto del cifrado de salida cambia de forma bastante drástica. Hagamos una prueba con los datos que tenemos ahora.
Ahora, tenemos 3 claves para los 3 textos cifrados diferentes.
En el texto cifrado 1, nos desplazamos a la derecha una vez.
En el texto cifrado 2, nos desplazamos dos veces hacia la derecha.
En el texto cifrado 3, nos desplazamos tres veces hacia la derecha.
Entonces, veamos qué sucede cuando analizamos la entrada “FACE” a través de todos estos cifrados diferentes.
Cuando clave = 1, FACE se convierte en EFBD
Cuando clave = 2, FACE se convierte en DEAC
Cuando clave = 3, FACE se convierte en CDFB
Como puede ver, el texto cifrado de salida cambia cada vez que cambia la clave. En el ejemplo tenemos muy pocos datos, imagina hacer esto con GRANDES cantidades de datos, la salida cambiará drásticamente cada vez.
Hay dos reglas para que un cifrado de bloque se considere válido:
Debe poder derivar el texto sin formato del texto cifrado y viceversa con una clave.
La función debe ser eficientemente computable.
Hay una cosa más importante que debe tener en cuenta cuando se trata de cifrar en bloque. Los tamaños de los bloques son fijos, por lo que el texto sin formato de entrada debe ser del mismo tamaño que el tamaño del bloque. Si la entrada es más grande que el bloque, entonces debe descomponerse para obtener el tamaño correcto, si la entrada es más pequeña, entonces debe rellenarse con algunos datos basura para ajustarse al tamaño del bloque.
Ejemplos de cifrados en bloque
Estándar de cifrado de datos (DES)
Tamaños de bloque de 64 bits.
Tamaño de clave de 56 bits.
Fue el estándar del gobierno hasta 2001.
Estándar de cifrado avanzado (AES)
Tamaño de bloque de 128 bits.
Tamaño de clave de 128, 192 o 256 bits.
Considerado muy seguro y ampliamente utilizado hoy en día.
La ventaja de la criptografía simétrica
Aunque la criptografía simétrica tiene algunos problemas importantes (que discutiremos en un momento), la mayor ventaja de la criptografía simétrica es que requiere muy poca sobrecarga. Solo necesita compartir una sola clave con su destinatario para seguir adelante con este método.
Incluso ahora, una gran cantidad de software utiliza este método junto con la criptografía asimétrica para proporcionar servicios de cifrado / descifrado rápidos y eficientes.
Los problemas de la criptografía simétrica
Aunque la sobrecarga es significativamente menor, existen muchos problemas con la criptografía simétrica.
Problema n. ° 1: la clave compartida
El hecho de que el cifrado y descifrado se realice con una sola clave es un gran problema. En primer lugar, el intercambio de la clave debe hacerse de una manera muy segura, si alguien obtiene la clave, todos sus datos se verán comprometidos.
Problema n. ° 2: no es escalable
Otro gran problema con la criptografía simétrica es que no es escalable en absoluto. Suponga que Alice administra un centro de información y envía datos mediante criptografía de clave simétrica. Está bien si solo trata con 3 o 4 clientes. Pero cuantos más clientes obtenga, más claves públicas únicas tendrá que manejar y cuidar. Con el tiempo, será demasiado difícil de manejar.
Debido a estas vulnerabilidades de la criptografía de clave simétrica, se necesitaba una solución, y finalmente llegó en la década de 1970.
El avance de James Ellis
En 1970, el matemático e ingeniero británico James Ellis tuvo una idea basada en un concepto simple. ¿Qué pasaría si el cifrado y el descifrado fueran operaciones inversas basadas en 2 claves diferentes? En la criptografía tradicional, es decir, la criptografía simétrica, el mensaje tenía que enviarse junto con la clave a la persona prevista para que descifrara el mensaje, pero esto presentaba la idea muy real de que un atacante consiguiera la clave.
Ellis imaginó que el receptor del mensaje no podía ser una parte pasiva, y tenían que tener un “candado” y una “llave” para ellos mismos. El candado podía enviarse a cualquier persona del mundo, pero la clave debía mantenerse en privado. Entonces, cualquiera puede enviar un mensaje al receptor cerrándolo con su candado y como solo el receptor tiene la llave, solo ellos pueden abrirla.
Ahora, esta era la teoría, tenía que haber una forma práctica de esta teoría, y eso se debió a dos principios brillantes:
- La función de trampilla.
- El intercambio de claves Diffie-Hellman.
¿Qué es la función de trampilla?
Una función de trampilla, también conocida como función unidireccional, es una función en la que es fácil pasar de un estado, también conocido como dominio, al otro estado, también conocido como rango, pero es difícil volver del rango al dominio a menos que tenga conocimiento de un clave que se llama función de trampilla.
Diagramáticamente se representa así:
Las funciones de la trampilla se basan en la idea de llaves. Donde la clave pública (K) se usa para ir del dominio al rango. Para volver al dominio desde el rango, tenemos que usar una función de trampilla que también se conoce como clave privada (k). También está implícito que la clave privada y la clave pública están relacionadas matemáticamente entre sí y también tienen que relacionarse entre sí a través de otra función de trampilla f () de manera que K = f (k) para que la clave privada no sea factible. determinado por la clave pública.
Un ejemplo simple de esto es una multiplicación de números grandes. Suponga que tiene dos números 171 y 118, entonces es simple determinar que 171 * 118 = 20178. Sin embargo, si solo conoce 20178, entonces es difícil para usted determinar cuáles fueron los números iniciales a menos que tenga una clave con usted, en en este caso, el conocimiento de solo uno de los dos números, para determinar el segundo.
¿Qué es el intercambio de claves Diffie-Hellman?
Supongamos que hay dos personas, Alice y Bob, y quieren atacar un banco. Sin embargo, están a ambos lados del banco y solo pueden comunicarse entre sí a través de una línea compartida que está siendo intervenida por el banco.
Algo como esto.
Tenga en cuenta que todo lo que Alice y Bob se digan será escuchado por el banco. Entonces, ¿cómo pueden ambos decidir una fecha para atacar el banco sin que el banco se entere y sin que Alice y Bob intercambien explícitamente esa información?
Este enigma puede resolverse mediante el intercambio de claves Diffie-Hellman; es un concepto mediante el cual dos partes pueden hacerse con información secreta sin compartirla.
Para comprender cómo funciona el Diffie-Hellman, debemos utilizar una de las aplicaciones más famosas de esta teoría, el intercambio de color secreto.
Para ello hay 3 cosas que debes tener en cuenta:
- Alice y Bob están de acuerdo públicamente en que el amarillo será la pintura común que ambos usarán.
- Alice luego se reserva en secreto que también usará naranja junto con amarillo.
- Bob decide en secreto que usará aguamarina junto con amarillo.
- La etapa uno
Dado que se declaró públicamente que el amarillo será el color de elección:
- Banco: tiene amarillo
- Alice: tiene amarillo
- Bob: tiene amarillo
- Etapa dos
Ahora Alice mezcla su color privado también conocido como naranja con amarillo y obtiene un color compuesto que llamaremos CA.
Al mismo tiempo, Bob mezcla su color privado aqua con amarillo y crea el color compuesto CB.
Entonces, al final de la etapa dos, así es como se ven las cosas:
- Banco: amarillo
- Alice: CA
- Bob: CB
- Etapa tres
Ahora, Alice y Bob se enviarán entre sí sus respectivos colores, que el banco marcará de inmediato. Sin embargo, el banco ahora enfrenta un problema.
Las combinaciones de colores son una función de trampilla.
Si bien es fácil para alguien combinar dos colores y generar un tercer color, no es factible para ellos determinar los dos primeros colores del tercer color dado. Entonces, el banco se apoderará de CA y CB, pero no tendrá idea de cuáles son los colores que se utilizaron en su creación.
Entonces, así es como se ven las cosas en este momento:
- Banco: Amarillo, CA, CB.
- Alice: CB
- Bob: CA.
- Etapa cuatro
Ahora, Alice y Bob volverán a mezclar sus colores secretos en la mezcla que han recibido de la otra persona, así que ahora ambos tendrán una mezcla de amarillo, naranja y agua, que es marrón. El banco, sin embargo, solo tendrá CA y CB porque no tienen idea de cuáles son los colores secretos.
Entonces, así es como se ven las cosas ahora:
- Banco: Amarillo, CA y CB.
- Alice: Marrón.
- Bob: Marrón.
Y aquí es donde radica el truco, al no revelar sus colores secretos, tanto Bob como Alice tienen, en su poder, el color marrón, aunque nunca intercambiaron explícitamente el marrón entre sí.
Así es como se ve el diagrama de todo este intercambio:
Esta es la representación del intercambio Diffie-Hellman, pero se necesitaba un medio matemático para asegurarse de que también pudiera haber aplicaciones prácticas de esto. Por esta razón, se utilizó la función de módulo.
La forma matemática del intercambio Diffie-Hellman
Suponga que hay un generador g para un campo finito de tamaño n. Y en ese campo, elegimos dos valores aleatorios ay b. Será difícil para un atacante determinar g ^ ab dado solo g, g ^ a y g ^ b. Esta es la condición que activa la función de trampilla. Dada esta condición, dos partes pueden intercambiar mensajes y llegar a la misma conclusión sin comunicarse explícitamente entre sí.
Entonces, matemáticamente esto es lo que sucede.
Alice elige un valor aleatorio “a” del campo n y determina un mensaje M1 tal que:
M1 = g ^ a mod n.
De manera similar, Bob elige un valor aleatorio “b” del campo ny crea el mensaje M2 de manera que:
M2 = sol ^ b mod n.
Tanto Alice como Bob ahora pueden transmitirse el mensaje entre sí.
Alice ahora determina el mensaje especial K haciendo lo siguiente:
K = M2 ^ a mod n = g ^ ab mod n.
Bob ahora determina el mismo mensaje K por:
K = M1 ^ a mod n = g ^ ab mod n.
Entonces, tanto Alice como Bob llegaron a la misma conclusión sin compartir explícitamente esta información.
Este intercambio de claves Diffie-Hellman fue invaluable en la formación de criptografía asimétrica:
¿Qué es la criptografía asimétrica?
La criptografía asimétrica utiliza dos claves, una pública y una privada para cifrar y descifrar datos en particular. El uso de una tecla anula el uso de la otra.
La representación esquemática de la misma se ve así:
Hay dos usos en el mundo real de la criptografía asimétrica que analizaremos en esta guía y ambos son importantes por sus propias razones:
El algoritmo Rivest-Shamir-Adleman también conocido como RSA.
La criptografía de curva elíptica.
¿Qué es el algoritmo RSA?
El algoritmo RSA es el algoritmo criptográfico asimétrico más utilizado y popular de la historia. Lleva el nombre de los profesores del MIT Rivest, Shamir y Adleman que descubrieron este algoritmo. Ahora bien, ¿cómo funciona? La idea se deriva de los avances que tuvo Diffie-Hellman.
Entonces, estas son las variables con las que trabajaremos:
Suponga que tiene el mensaje secreto “m”. “M” elevado a la potencia de un número aleatorio e y luego el módulo de ese con un número aleatorio N le dará el texto cifrado c.
Básicamente. m ^ e mod N = c
Tome nota, es FÁCIL realizar esta función para obtener la salida c, PERO dado solo c, ey N, es difícil obtener el mensaje “m”. Requerirá mucho ensayo y error. Esta es la función de trampilla unidireccional que aplicaremos para encontrar “m”.
Pero ahora, la idea de la función de trampilla es tener una clave que hará que el proceso inverso (el descifrado) sea sencillo para el destinatario. Entonces, para eso necesitaremos encontrar una variable aleatoria “d” que hará posible este proceso:
c ^ d mod N = m.
Ahora tenga en cuenta, c = m ^ e mod N, así que sustituya.
m ^ e ^ d mod N = m.
O
m ^ ed mod N = m
Entonces, en las ecuaciones anteriores:
- Clave pública = e y N.
- Clave privada = d.
Ahora, incluso antes de que comencemos a ver el método detrás de la locura, hagamos un cálculo simple para ver cómo funciona todo el proceso. (Llame al canal de YouTube de Anthony Vance para este ejemplo).
Suponga que el mensaje que tiene que enviar es 42. En otras palabras, m = 42.
Junto con eso:
e = 17.
N = 3233.
d = 2753
El proceso de encriptación
c = m ^ e mod N.
Usando sustitución simple:
c = 42 ^ 17 mod 3233 = 2557.
Entonces, el texto cifrado es 2557.
El proceso de descifrado
Hagamos c ^ d mod N.
2557 ^ 2753 mod 3233
Esto nos da el valor de m que es 42.
Genio, ¿no?
Ahora, recuerde que cuando hablamos de las funciones de trampilla llegamos a la conclusión de que la clave pública y la privada deben ser derivadas matemáticas entre sí de una manera que:
F (clave privada) = clave pública, donde F () es otra función de trampilla.
Debería ser difícil para cualquiera determinar la clave privada a partir de la clave pública. De hecho, debería ser tan difícil que la computadora más poderosa del mundo tardará décadas y décadas en derivar una de la otra.
Para responder a este acertijo, retrocedemos siglos y conocemos a nuestro próximo genio, Euclides.
Euclides y factorización prima
Euclides descubrió hace siglos que cualquier número> 1 puede escribirse como producto de números primos.
P.ej. 15 se puede escribir como 5 * 3.
255 se puede escribir como 5 * 17 * 3.
Volvamos a nuestras dos ecuaciones:
C = m ^ e mod N.
Aquí, N es la clave en la función de trampilla. Si bien N puede ser conocido públicamente, debería ser difícil determinar los factores primos que componen el número N. Si conoce los factores primos, entonces es un juego de niños descubrir el producto N.
P.ej. Puede utilizar su navegador web para multiplicar dos números enormes y encontrar el producto en menos de un segundo:
Tomó menos de un segundo, 0.22 segundos, hacer el cálculo. Y cuanto mayor sea el número, tomará un poco más de tiempo, pero aún así, los cálculos se harán súper rápido.
Sin embargo, si ingresa un número enorme y le pide a su computadora que encuentre sus factores primos, entonces puede llevar días, meses e incluso años encontrar los factores primos.
Esta es la función de trampilla que usaron los criptógrafos para determinar el valor de N. Este es básicamente el meollo del truco.
Esto es lo que debe hacer para utilizar el algoritmo RSA:
- Primero, genere un gran número primo aleatorio P1.
- Genere un segundo número primo aleatorio grande P2.
- Encuentre N calculando P1 y P2.
- Oculte los valores de P1 y P2 y haga público N.
- N debería ser un número enorme y las máquinas más sofisticadas del mundo tardarán décadas en encontrar los valores de P1 y P2.
- Entonces, para resumir, N es la trampilla y sus factores primos P1 y P2 son las claves de la trampilla.
Bien, ahora hemos determinado cómo se calcula N y la trampilla que funciona en él. Pero todavía no hemos determinado el valor de “e” y “d” y todavía no hemos visto cómo la clave privada se deriva de la clave pública. Para generar todos estos valores restantes, necesitamos encontrar una función que dependa de conocer la factorización de N. Y para eso tenemos que ir a visitar a nuestro próximo genio, Leonhard Euler.
Euler y rompibilidad
En 1760, el matemático suizo Leonhard Euler realizó algunos estudios innovadores. Estudió la naturaleza de los números y más específicamente la ruptura de los números a los que llamó función phi.
Básicamente, dado phi (N) donde N es un número entero aleatorio, el valor de N será el número de números entre 1 y N que no comparten ningún factor común con N.
Entonces, si N es 8 entonces:
Los números entre 1-8 son: 1, 2, 3, 4, 5, 6, 7 y 8.
Entre estos números, solo 1, 3, 5 y 7 no comparten ningún factor con 8 excepto 1.
Es decir, phi (8) = 4.
Ahora bien, calcular la función phi es difícil excepto en un caso. Para saber esto, consulte el siguiente gráfico. El gráfico rastrea la distribución de los valores de phi en números enteros hasta 1000.
¿Ves esa línea verde recta en la parte superior que está convenientemente dispuesta? Ese es el phi de los números primos. Dado que la definición de un número primo es que no se puede factorizar aparte de sí mismo, para cualquier número primo p el phi (p) = p-1.
Veamos esto en la práctica. Suponga que tiene un número primo 7.
Los números entre 1 y 7 son: 1,2,3,4,5,6,7.
El único número que comparte un factor con 7 en esta serie es… ¡7!
Entonces phi (7) = 6.
De manera similar, si tuviera que encontrar el phi de un número primo grande, digamos 541, entonces:
Phi (541) = 541-1 = 540.
Resulta muy sencillo calcular la phi de un número primo. Y esto gana, aún más, importancia cuando se considera la naturaleza multiplicativa de las funciones phi. ¿Cuál es la naturaleza multiplicativa de las funciones phi?
Para dos números A y B cualesquiera:
Phi (A * B) = phi (A) * phi (B).
Ahora, volvamos a los algoritmos. Alice ha determinado dos números primos grandes P1 y P2 y ha determinado un número N haciendo P1 * P2.
Entonces, usando la propiedad multiplicativa de las funciones phi:
Phi (N) = phi (P1) * phi (P2).
O
Phi (N) = (P1-1) * (P2-1).
Y así, hemos descubierto la función de trampilla para phi. Si conocemos los factores primos de N, entonces es fácil calcular el phi (N).
Por ej. el número 77 tiene factores primos 7 y 11.
Entonces phi (77) = (7-1) * (11-1) = 60.
Se vuelve muy fácil cuando conoces los factores primos de N.
Ahora, se requería un último fragmento de magia matemática. Tenemos la función phi y tenemos las funciones de exponenciación modular que hemos determinado antes, necesitamos unir estas dos en una ecuación ordenada.
Y para ello, acudimos a Euler en busca de ayuda una vez más.
El teorema de Euler
El teorema de Euler establece que:
Para dos números cualesquiera myn que no comparten un factor:
m ^ phi (n) ≡ 1 mod n
Es decir, para dos números cualesquiera myn, siempre que no compartan un factor, m elevado a phi (n) dividido por n siempre dejará un resto de 1. Veamos esto en un ejemplo.
Suponga que m = 8 y n = 5.
Phi (5) = 4
Entonces, 8 ^ 4 = 4096.
Reemplazando esto en la ecuación del teorema de Euler:
4096 ≡ 1 mod 5 es cierto porque 4096 al dividirse entre 5 deja un resto de 1.
Ahora, la ecuación: m ^ phi (n) ≡ 1 mod n debe modificarse un poco antes de obtener nuestra solución final.
Modificación n. ° 1
1 ^ k = 1 para todo k.
Entonces, teniendo esto en cuenta, si en m ^ phi (n) ≡ 1 mod n multiplicamos el exponente phi (n) con cualquier número k, la solución final será 1 ^ k que sigue siendo 1.
Ahora, esto modifica la ecuación de esta manera:
m ^ k * phi (n) ≡ 1 mod n
Modificación # 2
Para todo m, m * 1 = m.
Entonces, en nuestra ecuación modificada, si multiplicamos ambos lados por m obtenemos:
m * m ^ k * phi (n) ≡ m * 1 mod n
Que se convierte en:
m ^ k * phi (n) +1 ≡ m mod n
Ahora, esta es la forma final de nuestra ecuación.
Antes de continuar, recuperemos las antiguas ecuaciones para refrescar nuestra memoria:
c = m ^ e mod N.
m = c ^ d mod N
m ^ e * d mod N = m
Ahora, revise la última ecuación, ¿no se parece a nuestra nueva ecuación modificada?
m ^ k * phi (n) +1 ≡ m mod n
Y este es el gran avance.
Al comparar las dos ecuaciones, obtenemos:
e * d = k * phi (n) + 1
FINALMENTE tenemos una ecuación donde el valor de eyd depende de phi (n).
Ahora, como ya conocemos el valor de e, es fácil calcular d, la clave privada, SÓLO si se conoce la factorización de N (que es un secreto que Alice se ha guardado para sí misma).
Entonces, d = (k * phi (n) + 1) / e.
Esta es la trampilla que deshará el cifrado realizado por sus claves privadas ey n.
Ejemplo para ver cómo funciona todo esto.
Suponga que Bob y Alice están intercambiando mensajes.
Bob quiere enviar un mensaje M a Alice donde M = 89.
Ahora, Alice necesita generar sus claves.
Ella usa los números primos p1 y p2 donde:
P1 = 53.
P2 = 59.
N = P1 * P2 = 53 * 59 = 3127.
Phi (N) = Phi (P1) * Phi (P2) = (P1 – 1) * (P2 – 1) = 52 * 58 = 3016
Ahora, necesita generar un valor e que no tendrá factores con el valor de phi (N).
Entonces, ella decide e = 3.
Ahora, generará su clave privada d:
d = (k * phi (N) + 1) / e
Tomando k = 2 obtenemos:
d = (2 * 3016 + 1) / 3 = 2011.
Ahora, bloqueará todos los valores excepto N y e, que son su clave pública, y hará que el conocimiento de estos dos sea global.
Bob encripta el mensaje
Ahora, Bob necesita enviar el mensaje M, que es 89, y necesita calcular el texto cifrado c de modo que:
c = M ^ e mod N.
Ahora, sabemos que: M = 89, e = 3 y N = 3127.
Entonces: c = 89 ^ 3 mod 3127 = 1394.
Luego se lo envía a Alice.
Alice descifra el mensaje
Alice obtiene el texto cifrado y todo lo que tiene que hacer es descifrarlo usando su clave privada d, que sabemos que es 2011.
Entonces, Alice hace este cálculo: c ^ d mod N
1394 ^ 2011 mod 3127 que es 89 también conocido como el mensaje original M.
Y este es el algoritmo RSA, el algoritmo criptográfico más utilizado
¿Qué es la criptografía de curva elíptica?
La criptografía de curva elíptica es lo que utilizan bitcoin, ethereum, etc. para sus fines de cifrado. Entonces, ¿qué es una curva elíptica? Una curva elíptica es cualquier curva que satisface la siguiente ecuación:
Y ^ 2 = x ^ 3 + ax + b
Donde (x, y) es un punto en la curva y ayb son constantes.
Hay infinitas curvas que puedes hacer. A continuación, se muestra cómo se ve una de estas curvas, en general:
¿Cuáles son las propiedades de una curva elíptica?
- La curva es simétrica a lo largo del eje x.
- Cualquier línea que pase por 2 puntos de la curva se cruzará con la curva en un tercer punto.
- Cualquier tangente en la curva se cruzará con la curva en un punto más.
- Realización de matemáticas en la curva.
Propiedad de suma de la curva
Suponga que hay dos puntos en la curva V y A. Tracemos los de la curva y coloquemos una línea a través de ellos. Esto cruzará la curva en un tercer punto.
A este tercer punto lo llamaremos X, y lo reflejaremos en la curva así:
El reflejo de X es un punto que por cierto será (V + A). Ésta es la propiedad aditiva de la curva elíptica.
Nota interesante. Si sumamos dos reflejos entre sí, también conocido como si tuviéramos que sumar X y V + A en el gráfico anterior, obtendremos infinito. La razón de esto es que la línea que pasa por X y (V + A) se cruzará con la curva en el infinito.
Propiedad de multiplicación de la curva
- Ahora bien, ¿qué pasa si queremos agregar un número a sí mismo? Supongamos que tenemos un punto V, ¿qué hacemos para encontrar 2V? Ejecutaremos una tangente a través de V y la intersecaremos en un punto de la gráfica y luego encontraremos el reflejo del punto en la curva. Ese reflejo será de 2V.
Esta es también la propiedad multiplicativa de la gráfica porque estamos encontrando puntos que son básicamente la multiplicación de un número entero con el punto mismo. Ahora suponga que queremos encontrar 3V. Uniremos V y 2V y luego reflejaremos el punto de intersección, así:
¿Ves cómo los puntos recorren el gráfico? Eso es lo que le da seguridad.
- Propiedades matemáticas de una curva elíptica
- Propiedad n. ° 1: los puntos de la curva forman un grupo abeliano
Las propiedades del grupo abeliano son las siguientes:
- Tienen identidad.
- Tienen reflejos inversos también conocidos como reflejos.
- Los puntos tienen un significado asociativo para tres puntos A, B y C en la curva: (A + B) + C = A + (B + C).
- Los puntos están cerrados en la curva.
- Los puntos tienen un significado conmutativo para dos puntos A y B. A + B = B + A.
- Propiedad n. ° 2: la multiplicación en la curva es rápida
Toda la multiplicación realizada en la curva se puede hacer muy rápido. Ahora suponga que tenemos un punto P y queremos encontrar 100P. En lugar de sumar el número a sí mismo 100 veces, podemos hacer lo siguiente:
- Suma el punto P a sí mismo para obtener 2P.
- Agregue 2P y P para obtener 3P.
- Agregue 3P a sí mismo para obtener 6P.
- Agregue 6P a sí mismo para obtener 12P.
- Agregue 12P a sí mismo para obtener 24P.
- Agregue 24P y P para obtener 25P.
- Agregue 25P a sí mismo para obtener 50P.
- Agregue 50P a sí mismo para obtener 100P.
- Entonces, en lugar de seguir los 99 pasos, lo acorta todo a solo 8 pasos.
Propiedad n. ° 3: la división en la curva es lenta
Si bien la multiplicación es rápida, la división es muy lenta. Suponga que tenemos Q = nP y queremos encontrar el valor de n dividiendo Q por P. Realmente no podemos hacer eso. Tendremos que revisar manualmente los números uno por uno para encontrar un valor que satisfaga la ecuación. Esto lo hace muy lento. Esto se llama problema logarítmico discreto y esto es lo que le da a las curvas su función de trampilla, es decir, es fácil multiplicar ny P para obtener Q, pero dados Q y P no es factible obtener n.
El intercambio de claves de curva elíptica Diffie-Hellman
Entonces, hasta ahora hemos visto las diversas propiedades de la curva y también hemos visto que la curva tiene una función de trampilla. Ahora bien, ¿cómo determinamos si se puede utilizar para criptografía o no? Probémoslo con el intercambio de claves Diffie-Hellman. Supongamos que tenemos a Alice y Bob y ambos quieren inventar un secreto común sin que nadie sepa cuál es y sin intercambiar explícitamente su información entre ellos. ¿Cómo lo harán a través de curvas elípticas?
- En primer lugar, se pondrán de acuerdo públicamente sobre una curva a utilizar y un punto P en la curva. Esto será de conocimiento público y estará disponible para todos.
- Sin embargo, en secreto, Alice elegirá un punto secreto “a” y Bob elegirá un punto secreto “b”.
- Alice calculará “aP” y se lo enviará a Bob. Cualquiera puede interceptar este mensaje, sin embargo, incluso con el conocimiento de P nunca podrá determinar el valor de “a” porque, como ya hemos determinado, hay una función de trampilla que hará inviable la división.
- De manera similar, Bob obtendrá el valor “bP” y se lo enviará a Alice.
- Alice luego multiplicará su clave secreta por el mensaje que recibe de Bob para obtener un (bP). Bob hará lo mismo y obtendrá b (aP). Dado que todos los puntos de la curva son abelianos: a (bP) = b (aP). Y así, se han encontrado con una información secreta compartida.
- Como podemos ver. La curva satisface el intercambio de claves Diffie-Hellman.
Entonces, ¿cómo funciona la verificación de firmas en las curvas elípticas?
(Nota: esto es lo que sucede específicamente en bitcoin)
Antes de ver cómo funciona el proceso, revisemos ciertas variables y su significado de que usaremos las siguientes ecuaciones.
Clave privada = d.
Mensaje = z.
Clave pública = Q.
G será un punto constante en el gráfico que será proporcionado por bitcoin.
“K” es un número aleatorio que se generará automáticamente para cada firma única.
“N” es otra constante que proporcionará bitcoin.
Bien, ahora veamos cómo funcionan las matemáticas detrás de la verificación.
Firmar un mensaje
Clave pública Q = dG. (es imposible obtener la clave privada de Q y G porque la división no es factible).
Ahora multiplicaremos la G con el número aleatorio “k” y trazaremos ese punto en la gráfica. Las coordenadas de ese punto son (x, y). es decir (x, y) = kG
A continuación, determinamos dos valores rys tales que:
r = x mod n.
s = (z + rd) k ^ -1 mod n
La razón por la que generamos rys es porque estas son las coordenadas de nuestra firma.
Entonces, enviamos el punto (r, s) para verificación.
Verificando un mensaje
Los verificadores realizarán una ecuación simple:
z * s ^ -1 * G + r * s ^ -1 * Q
El valor de esta ecuación nos dará el punto (x, y).
Ahora, los verificadores pueden simplemente comparar las coordenadas x. No tienen la coordenada x proporcionada directamente por el remitente, PERO tienen los valores de r y n.
Y como ya sabemos que r = x mod n, entonces simplemente pueden resolver para x.
Si los valores de x coinciden, significa que la firma está verificada.
Bono: una mirada más profunda a las matemáticas
Veamos la ecuación que los verificadores tendrán que hacer una vez más:
Paso 1: z * s ^ -1 * G + r * s ^ -1 * Q
Sabemos que Q = d * G, simplemente sustituyamos el valor.
Paso 2: z * s ^ -1 * g + r * s ^ -1 * d * G
Podemos tomar (z + r * d) común
Paso 3: (z + r * d) * s ^ -1 * G
Ahora recuerde, ya hemos establecido que s = (z + r * d) * k ^ -1 mod n, sustituyamos los valores aquí:
Paso 4: (z + r * d) * (z + r * d) ^ – 1 * k * G
Los (z + r * d) * (z + r * d) ^ – 1 se cancelan entre sí y nos queda:
Paso 5: k * G, que es la coordenada (x, y) que envió originalmente el remitente.
¿Qué podría salir mal en las curvas elípticas?
Si bien no hace falta decir que las curvas elípticas son el mejor modo de criptografía que existe, el hecho es que todavía tiene pocas vulnerabilidades:
¿Qué pasa si se eligió una curva incorrecta? Si la curva tiene un bucle, existe la posibilidad de que 1001P = P para cualquier punto P de la curva.
Quizás se elija una curva débil en la que se pueda dividir.
Tiene sus debilidades, pero son debilidades bastante manejables.
RSA frente a EEC. ¿Por qué bitcoin y ethereum eligieron curvas elípticas?
La razón por la que se eligió EEC sobre RSA es porque ofrece el mismo nivel de seguridad que RSA al consumir muchos menos bits. P.ej. para que una clave de 256 bits en EEC ofrezca el mismo nivel de seguridad, RSA deberá proporcionar una clave de 3072 bits. De manera similar, para una clave de 384 bits en EEC, el RSA tendrá que proporcionar una clave de 7680 bits para brindar el mismo nivel de seguridad. Como puede verse, EEC es mucho más eficiente que RSA.
Dato curioso: la NSA ha declarado que una clave de 384 bits en EEC es lo suficientemente fuerte y segura como para cifrar documentos secretos de alto nivel.
¿Cómo funcionan las claves en blockchain?
Como se mencionó anteriormente, bitcoin y ethereum usan criptografía de curva elíptica. Entonces, ¿qué sucede cuando alguien te envía dinero en la cadena de bloques? Te envían el dinero a tu dirección pública, que es básicamente el hash de tu clave pública y alguna información adicional. Como hemos visto anteriormente, la clave pública se deriva matemáticamente de su clave privada.
Las claves públicas y privadas son valores enteros grandes y se representan, en aras de la brevedad, mediante el formato de importación de billetera (WIF) que consta de letras y números. Un ejemplo de clave privada y dirección pública se ve así en WIF:
¡Obviamente, no debes compartir tu clave privada con el mundo como acabamos de hacerlo! La clave privada se utiliza para firmar la transacción que el usuario desea realizar. Por lo tanto, si alguien tiene acceso a su clave privada, puede firmar transacciones con su clave privada y, en esencia, robarle. Además, como puede ver, la clave privada es más larga que la dirección pública.
Entonces, ¿cómo se deriva una clave pública de la clave privada en la cadena de bloques? Tomemos el ejemplo de bitcoin para este ejemplo específico.
Supongamos que Alice quiere generar sus claves para poder realizar transacciones en la cadena de bloques. Esto es lo que ella hará:
Primero, generará su clave privada de 256 bits. Puede hacerlo manualmente O utilizará un generador automático. Este es un ejemplo de un generador de direcciones privadas que puede encontrar en wallet-generator.net:
- A continuación, tendrá que generar la dirección pública que el algoritmo dentro de esa billetera hará automáticamente siguiendo estos pasos.
- Primero, su clave privada se analizará mediante el algoritmo de hash SHA 256 para obtener un hash.
- Luego, el hash se analizará a través de la función RIPE MD 160 y se generará un nuevo hash y se guardará una copia, llamemos a esto PARTE A.
- Luego, el hash se procesará a través de SHA 256 para generar otro hash.
- Luego, el nuevo hash se procesará nuevamente a través de SHA 256 para generar otro hash. Los primeros 7 bits de este hash se guardarán, llamémoslo PARTE B.
- La PARTE A y la PARTE B se sumarán y el resultado será la dirección pública.
No es factible que este proceso se invierta de manera que la dirección pública pueda usarse para generar la clave privada. ¡La computadora más poderosa del mundo tardará 40000000000000000000000000000000 años en completar este cálculo! Es seguro decir que su dirección y clave están seguras.
Entonces, ¿cómo funciona el proceso de firma (una descripción general simple)?
Supongamos que Alice quiere enviar 500 BTC a Bob. Seguirá los siguientes pasos:
- Ella creará la transacción y la cerrará con su clave privada.
- Ella enviará la transacción a la dirección pública de Bob.
- Luego, Bob puede descifrar el mensaje utilizando la clave pública de Alice para verificar que fue Alice quien le envió los bitcoins y que la transacción se considera completa.
- Si esto se mostrara en una imagen, así es como se verá:
Criptografía de criptomonedas: Conclusión
Entonces, como se puede ver, la criptografía de clave pública, también conocida como criptografía asimétrica, es uno de los pilares de la criptomoneda. Es imposible siquiera imaginar cómo bitcoin y ethereum habrían estado seguros sin él. Cada vez que realice una transacción, agradezca a todos los matemáticos y criptógrafos que han hecho posible este maravilloso medio.