Como crear un par de claves públicas y privadas RSA mediante OpenSSL con linux
crear par de claves privadas

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).

crear par de claves privadas
crear par de claves privadas

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

Fin del post

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Artículos relacionados