sharedsecret
Alicia (Tu) quiere enviar un archivo cifrado a Bob (Otra persona) Alicia tiene su propia llave privada y ademas conoce la llave Publica de Bob
Alicia utiliza esta herramienta de para caluclar el secreto compartido entre ambos y utilizar ese mismo secreto como llave
LLaves de Alicia para el ejemplo:
Código:
Private key: 18f619c4d16057d362ddfce772f551d46a2390517698226cff6e5bf67ac4b324 (Desconocida para Bob y para todo el mundo)
Public key : 03af6e50db92ce378c29df0ed9a04d3431bc06762aa37ec3ab42af147083630596 (Publica)
Llaves de Bob para el ejemplo:
Código:
Private key: bc9e78f140a76cbdcdbecc5ab0ec38b4db710edfa40dea342712c8a695fe8b22 (Desconocida for Alicia y para todo el mundo)
Public key : 022c8191049a3f2816bc95077b91caed87900d0cd2af3757004531face9c3b6082 (Publica)
Alicia ejecuta el programa:
Código:
./sharedsecret
A: private key (hex): 18f619c4d16057d362ddfce772f551d46a2390517698226cff6e5bf67ac4b324
B: public key : 022c8191049a3f2816bc95077b91caed87900d0cd2af3757004531face9c3b6082
Secret between A and B: 22fb667f3bc1a2153e3cef75df0ce757a1c86051c07ace6b0c30dc87f3358511 (DON'T SHARE, THIS IS SECRET)
Bob ejecuta el programa
Código:
./sharedsecret
A: private key (hex): bc9e78f140a76cbdcdbecc5ab0ec38b4db710edfa40dea342712c8a695fe8b22
B: public key : 03af6e50db92ce378c29df0ed9a04d3431bc06762aa37ec3ab42af147083630596
Secret between A and B: 22fb667f3bc1a2153e3cef75df0ce757a1c86051c07ace6b0c30dc87f3358511 (DON'T SHARE, THIS IS SECRET)
Alicia y Bob obtienen el mismo secreto, compartiendo unicamente sus llaves PUBLICAS
Alice procede a cifrar el archivo secreto input.txt with the password 22fb667f3bc1a2153e3cef75df0ce757a1c86051c07ace6b0c30dc87f3358511
Código:
openssl aes-256-cbc -salt -pbkdf2 -in input.txt -out input.txt.enc
Bob decifra el archivo secreto utilizando el mismo password: 22fb667f3bc1a2153e3cef75df0ce757a1c86051c07ace6b0c30dc87f3358511:
Código:
openssl aes-256-cbc -d -salt -pbkdf2 -in input.txt.enc -out message.txt
Como funciona esto?
En criptografia asimetrica cada usuario tiene su llave privada y su llave publica.
En curvas elipticas la llave privada es un numero cualquiera, menor que el Orden de la Curva.
Existe un punto generado G(x,y) el cual es la base para todas las llaves publicas de los usurios.
Si tu llave privada es K, tu llave Publica es K*G
Es virtualmente imposible obtener o calcular la llave privada K utilizando la llave Publica K*G, esto es asi por que la multiplicacion en Curvas elipticas no es como la multiplicacion que conocemos.
Alicia tiene su llave Publica: A*G
Bob tiene su llave Publica: B*G
Alicia calcula el secreto compartido entre ella y Bob, multiplicando la llave publica de Bob por su propia Llave Privada obteniendo el nuevo valor: A*B*G
Bob calcula el secreto compartido entre el y Alicia, multiplicando la llave publica de Alicia por su propia Llave Privada obteniendo el nuevo valor: B*A*G
En este caso A*B*G es igual a B*A*G
No es comun que se utilize de la forma que mostre, pero de igual forma funciona, para ejercicio entre personas que estan iniciando en la criptografia viene bastante bien, ademas personalmente creo que las criptomonedas estan llevando la criptografia mas cerca a las personas, aunque muchos no se den cuenta de ello.
Quires probarlo? genera un par de llaves de bitcoin con el programa keygen que tengo en ese mismo repositorio en github y enviame un adjunto cifrado con el secreto compartido, mi publickey de bitcoin esta en mi firma.
Saludos!