OpenSSL es un kit de herramientas de usos comercial para protocolos de seguridad en la capa de transporte (TLS) y de la capa de conexión segura (SSL), por eso vamos a ver cómo crear un par de claves públicas y privadas
También es una biblioteca de croptografía de uso general. Se puede obtener la herramienta y usarla para fines comerciales y no comerciales libremente (Salvo algunas condiciones de licencia).

comando openssl genrsa
Para generar una clave privada RSA de 2,048 bit se realiza con el comando:
openssl genrsa -out private_key.pem 2048
Dará el resultado:
Generating RSA private key, 2048 bit long modulus (2 primes)
…………….+++++
……………………………………+++++
e is 65537 (0x010001)
- Este comando crea una clave RSA de 2,048 bits, llamada “private_key.pem”
- El nombre de la clave se especifica después de la marca “-out”
- El número de bits se especifica con el último argumento
- Para ver la nueva clave privada, se debe usar “cat” para mostrarla en la pantalla.
Ver clave privada en Linux con OpenSSL
cat private_key.pem
Dará un resultado similar a:
MIIEowIBAAKCAQEA4kNMSmssCSYbOnq/UAHGH5xx9gjZaOiST3JQQtJO11L/YeBO
8DOHc7UawNADA/XDBAnGZih1M8T1PGc6Vk5SW2Lb8FMf9zG2XhYpCACFFPJAW00q
s4s1JesdugOprHZ8Jmm/QJl4KuCjlY/XdviCvcbxROIQ2mglR8nW1QWrhECQNBfo
dRSuTwmW3qBSW/Xd5pmTpP4GHCyUfRO9YCF/tZYtVMYg4FOqdGaTHRZbs6peMV4D
lSjZHDonnsGK0UJpxQNbtJEcG7vr7Vl8ziVWY5RUDND7nZYlQlbqxvvqbPPt+px3
4pAZ58eyOqeAmYBc8mwNoXp4YrC2deFng7zrKwIDAQABAoIBAB6SR0Ga33VQ/8bU
BPtzceidg8xhf7asDfDMGkodDmgLn9QCscfEvp2Er9uzf2TOlQ37oCH3f3aCOzxx
GjHFHV2Zquv630vQHLrztZGOOG0PGmD7uTRPL9wyu26BxjA2RioOibfZxKHOfmvb
5pn9k/S+Z6UOAobwIXFktTFNNdKFgalax813FlxFfmmoOC8kE30W6mP6iecP+ojm
xf577RhwR+PdE5zNNvm2F8j5ZWP39pboX7e3eYUCsEyPmVu1MSMTXrHHg6KNhCty
Qu1JfrAaisch+6vrAzfuP7t0WiILzieQgZzFDpI9HziwwOtCw+EKQhHCOPurWcO6
ByZUBzkCgYEA9aEprwqutbXB5H3QinxqXLInAH+wy8oTAMS6nV1sisIos6dD3CLO
u2fLRegv8PEUopASnzyv5PWU/iS+VJjdBCco59hmwW+7CVpaOJXlJ1qpznPVJmyx
pWsinM9Ug23GDd/jd61yKux22773RSGCYs9N7FVww5WYcDlWHLUFPk0CgYEA69DQ
h2iFuDSPonG8GPS6hf/KVRQaJZqGAINCk/2txTWmaz9VPdWT25+rxBzIoQOYAC4P
NjPHo/gJLrO/y6X6lAKBCje/Otb9E7GZwH0pFc7MxtQVR4ik6/7To3ancXNmawHe
owWZHDBRK+Ot33nZ+tYvAq48zE7rxNxsctZ9O1cCgYASsd12UR3S/q5vMZQ5thZy
T6zgQNe36v1fRZneeEnWlch7Q/PKQWvyn4e9Hlrnv7GOXeDM9dV9W6OnZCyIS8om
ksRuQO4xMsvNfm73d5ElWaUq7W3/qq4qpOjRfoY0Kpq0W6H4bd8OnUi+mN5BCLff
xV9s6WPXvv8HK5X+QVjQ0QKBgBrMqGY7IrdEge5cLpxHc8s2vq/ckPwlC4WTZUWc
VttKtZcKo41bcGpNQyAOhV6HIgcjNOdcCxw/XAvKsclbG5cmkbOvkjQFqs1KKccO
clTgI7WU9LYkeVm4pCS3n1/tVX5jwAGW6Uei1ha+0UvMdVFkdgM/+fjeHz1IL6r9
ZU4RAoGBALi33UjlJUYVMXPZc/JyFk8yyvRpYMRhmW7mQxR8gx0i1rNolPSccRkj
3NO+e1k86yyk3RsqBdixGKYDp2JqS+Aj7eHlxvUcrCAnpk9l96q8yuhQ4mJUWqs7
/hW6bxUPjDZ9BxprGZRL4ZLgPL+6C4Q4rE8TZu/5qQYDIy+ab03t
—–END RSA PRIVATE KEY—–
–
Las claves privadas siempre son distintas, por lo que el anterior solo es un ejemplo.
Generar clave pública en Linux con OpenSSL
A continuación, para generar una clave publica con la clave privada que hemos obtenido, utilizaremos el siguiente comando:
–
openssl rsa -in private_key.pem -outform PEM -pubout -out public_key.pem
y tendrá con resultado la siguiente respuesta:
writing RSA key
–
Al igual que la clave privada, se puede ver como la clave pública con el comando:
cat public_key.pem
y tendrás un resultado similar al siguiente:
—–BEGIN PUBLIC KEY—–
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4kNMSmssCSYbOnq/UAHG
H5xx9gjZaOiST3JQQtJO11L/YeBO8DOHc7UawNADA/XDBAnGZih1M8T1PGc6Vk5S
W2Lb8FMf9zG2XhYpCACFFPJAW00qs4s1JesdugOprHZ8Jmm/QJl4KuCjlY/XdviC
vcbxROIQ2mglR8nW1QWrhECQNBfodRSuTwmW3qBSW/Xd5pmTpP4GHCyUfRO9YCF/
tZYtVMYg4FOqdGaTHRZbs6peMV4DlSjZHDonnsGK0UJpxQNbtJEcG7vr7Vl8ziVW
Y5RUDND7nZYlQlbqxvvqbPPt+px34pAZ58eyOqeAmYBc8mwNoXp4YrC2deFng7zr
KwIDAQAB
—–END PUBLIC KEY—–
–
Claro está que nuestra clave privada será distinta al del ejemplo anterior.
Ahora sí podemos encriptar y desencriptar mensajes con nuestras claves.
Encriptar texto plano en Linux con OpenSSL
Vamos a crear un archivo de texto con información que vamos a encriptar para que nadie más que nosotros sepamos qué es. Para crear el archivo, ingresamos el siguiente comando:
–
echo ‘This is a secret message, for authorized parties only’ > secret.txt
–
Posteriormente lo vamos a encriptar con la clave pública, para eso utilizaremos el siguiente comando:
–
openssl rsautl -encrypt -pubin -inkey public_key.pem -in secret.txt -out secret.enc
–
Ahora tenemos nuestro archivo encriptado con el nombre “secret.enc” que es la versión encriptado de nuestro texto “secret.txt”. Si intentas ver el texto, verás algo distorsionado, así que no te preocupes por eso.
Si quieres ver el texto, solo deberás utilizar el siguiente comando:
–
nano ~/secret.enc
y el resultado es algo similar a lo siguiente:
^? < e ^@vmD ^B% r*M o^R ^O 8 X { ^\(^B ^}= 1i T 9~ ^RT^\^Px ^T^l n ^G ^O ^i iN (W [ ^$
^a^d~m , d Tq L < J ^Q bdQ
=Q R[^kT ^G iq GG ^T { UZ^dV8^A ^~O#koj^N^^ K vT ^O3 ^Tn^oP^l^Pa ^u3^G^N^i0=c{ ^tR09 o@^d$
<br>
<br>
<br>
<br>
<br>
<br>
<br>
^G Get Help ^O Write Out ^W Where Is ^K Cut Text ^J Justify ^C Cur Pos
^X Exit ^R Read File ^\ Replace ^U Uncut Text ^T To Spell ^_ Go To Line
–
Recuerda que para salir del editor de texto nano utilizas la combinación de teclas “Ctrl + X”
Desencriptar mensaje cifrado con clave privada
Ahora para desencriptar este mensaje cifrado, lo harás con la clave privada, para eso utilizaremos el siguiente comando:
–
openssl rsautl -decrypt -inkey private_key.pem -in secret.enc
–
¡Qué maravilla, ahora tienes el mensaje en tu pantalla!
Pero eso no es todo, vamos a generar un hash d elos mensajes, crearemos una firma digital del resumen y verificaremos la firma del resumen para garantizar que el mensaje no se haya modificado ni falsificado.
Generar un hash en Linuz
Para generar un hash del mensaje utilizamos el comando:
–
openssl dgst -sha256 -sign private_key.pem -out secret.txt.sha256 secret.txt
–
Con esto creamos un archivo con el nombre “secret.txt.sha256” con la clave privada, que incluye el hash del archivo de texto secreto.
Con esto, cualqueira puede usar tu clave pública y el hash para verificar que el archivo no se haya modificado desde que lo creaste y generaste el hash.
Para validar esto, vamos a lanzar el siguiente comando:
–
openssl dgst -sha256 -verify public_key.pem -signature secret.txt.sha256 secret.txt
Dará como resultado el siguiente mensaje, que significa que la verificación es correcta y que no se modificó el archivo:
Verified OK
0 comentarios