¿Que son las Claves Publicas y Privadas en Blockchain?
El inverso multiplicativo y las claves pública y privada
En matemáticas, un inverso multiplicativo o recíproco para un número X es:
1/ X
Así el inverso de 5 es 1/5, de tal forma que (5) (1/5) = 1
En el artículo 5 de esta serie de criptografía, aprendimos con la matemática modular a enviar un mensaje cifrado con dos funciones exponenciales en formato modular:
función para cifrar: C = me module n
función para descifrar: m = Cd modulo n, donde:
e= es la clave publica
d= es la clave privada
Además “e” y “d” cumplen con la condición de ser inversos multiplicativos en el módulo “n”.
(e) (d)mod n = 1
Ejemplo: Si e= 17 y d son inversos multiplicativos en el módulo n= 589.
Para encontrar el valor de “d”:
Buscar dos números primos que multiplicados den 589.
Estos son p=19 y q=31 porque (19)(31) = 589.
El teorema de Euler dice que en el valor de la función φ(n)= (p-1) (q-1) puedo encontrar dos números que son inversos multiplicativos.
Así (19-1) (31-1) = 540
Utilizar un sitio online poner e=17 y n=540
Hemos encontrado la clave privada d= 413 que corresponde a la clave publica e= 17, porque:
Conocemos el valor del módulo n = 589.
Encontramos con fácilmente los números inversos multiplicativos “e” y “d” en el módulo φ(n) = 540.
En la practica la criptografía de Bitcoin, utiliza las matemáticas en el módulo “n”:
115792089237316195423570985008687907853269984665640564039457584007908834671663
Ejemplos de claves privadas Bitcoin:
Con la programación Bitcoin en lenguaje Python seleccionar números al azar dentro de este módulo, aquí ilustramos tres claves privadas s1, s2 y s3:
Ejemplos de claves publicas:
Multiplicar estos números por el punto generador de la curva elíptica G y se obtienen las claves publicas s1G, s2G y s3G. Estas claves están en formato no comprimido:
Plataformas online para obtener claves
Existen sitios online que te permiten generar claves, dar clic en start:
Generador de claves
Estas claves están en formato comprimido:
Bitcoin Address:
1PGBivpWXTUvEdXZ6FGzXzrSGvc11zpWs8
Private key:
L2SpQKmESVNmcZB3aKyhVRmQNM5uRgd64LERi8sEjTgjiM1Wno3L
Aplicación de las claves en programación Bitcoin
Paso 1: disponer de una clave pública (Address) y su correspondiente privada:
Private key: L1d2uVdAobUjTBU84qB8KWUR13W2wvnDGQcHLpCk85RiUW5gU55u
Address:
36e4yeKShaHEwLQYDDbNE9U4fWR1PEVtAX
Paso 2: Roberto desea enviar un mensaje a Alice y que Alice pueda verificar que es de Roberto:
Paso 3: Mensaje o texto plano:
New York is the most populous city in the United States. With a 2020 population of 8,804,190 spread over 300.46 square miles, New York City is also the most densely populated major city in the United States.
Paso 4: Utilizar un programa en lenguaje JavaScript del protocolo Bitcoin, para firmar el mensaje (cifrar o encriptar):
En la línea 3 en la variable plaintex colocar el mensaje.
En la línea 4 está la clave privada.
En la línea 7 firmar el mensaje.
Paso 5: Al correr el programa en la terminal Git Bash de Microsoft, obtengo el texto cifrado:
Messaje Ciphertex =H1E8apbIZ4plJ8Hx44t+TahH2skW9EV142PXYUKLHdSVJ47bQ0+g6OJlt3KXA89hNHY0QmUQkYXoH/pYfZAhZv8=
Paso 6: Alice recibe por correo electrónico:
El mensaje (texto plano)
El texto cifrado.
Además, conoce la clave publica o dirección de Roberto.
Ejecuta el programa de verificación de firma digital en JavaScript del protocolo Bitcoin:
Y al correr el programa en su terminal git bash, Alice obtiene como respuesta “true”.
Conclusión:
La criptografía de claves pública y privada permite firmar mensajes y verificar que corresponde a la persona que lo envio, este proceso llamado autenticación evita que un atacante envíe mensajes maliciosos dentro de una red de un sistema informático.