En mi práctica aún pequeña en el campo de la seguridad de la información, tuve que enfrentar algunos problemas de criptografía, o más bien encriptación, a los que apenas podía encontrar respuestas claras. Por lo tanto, decidí escribir un breve artículo sobre los conceptos básicos de trabajar con OpenSSL.
Este artículo discutirá los problemas conocidos de generación de claves, así como el problema menos conocido de cifrar archivos de gran tamaño. La certificación está fuera de cuestión aquí.
Empecemos De hecho, todo es simple hasta ahora.
Crea una clave privada con el comando.
openssl genrsa -out key.pem -aes-256-cfb -rand /var/log/messages 4096

Aquí:
genrsa : un parámetro que indica la creación de una clave mediante el algoritmo de cifrado RSA.
fuera : dónde crear la clave.
4096 es la longitud de la clave.
En general, esto es suficiente para crear una clave. Pero la clave privada es mejor encriptar.
aes-256-cfb : algoritmo y modo de cifrado.
rand / var / log / messages : valores aleatorios de cualquier carpeta, es mejor tomar registros, porque con / dev / random o / dev / urandom todo puede colgar, lo tenía.
Al crear una clave, se le solicitará una contraseña. La contraseña es la base de cualquier protección, así que intenta espiarla. Y recuerda
Tenemos una llave Privado Nunca le muestres y escondas a nadie según el principio de Koshchei el Inmortal.
En base a esto, haremos uno público que se pueda exhibir públicamente, al menos en la frente.
openssl rsa -in privatkey.pem -pubout -out publickey.pem

Ahora tenemos un par de llaves. Puede cargar el público al servidor para conectarse a través de ssh utilizando su clave privada. O para cifrar una pequeña cantidad de datos, por ejemplo, un token o frase de contraseña, etc.
La tarea de cifrar un archivo grande tiene una solución diferente.
Para encriptar una gran cantidad de datos, utilizamos, por ejemplo, este archivo pdf con un tamaño de 1.8 Mbytes.

Una gran cantidad de datos se cifra con un algoritmo de cifrado simétrico, como AES. Aquí usaremos encriptación asimétrica para transmitir una clave simétrica, con la cual encriptaremos el texto.
Empecemos
Cree una clave de sesión simétrica (única) con una secuencia aleatoria de caracteres y escríbala en un archivo en la representación de base64.
openssl rand -base64 32 > key.bin
A continuación, ciframos el archivo con esta clave:
openssl enc -aes-256-cfb -salt -in OWASP_Top_10-2017_\(en\).pdf -out OWASP_Top_10-2017_\(en\).pdf.enc -pass file:./key.bin
aes-256-cfb : algoritmo y modo de cifrado. No hablaré sobre los modos aquí. Este es el mejor.
sal - sal para una mayor fuerza criptográfica.
pasar archivo: ./ key.bin - clave de cifrado.
A continuación, encriptamos la clave simétrica con nuestra clave pública "asimétrica".
openssl rsautl -encrypt -inkey publickey.pem -pubin -in key.bin -out key.bin.enc

Tengo un archivo encriptado y una clave simétrica. Puedes enviárselo a tu amigo para descifrarlo. Pero nos lo enviaremos a nosotros mismos, porque esto es tarea con nosotros mismos.
¡Ahora elimine la clave simétrica original! Para que nadie lo encuentre nunca.
shred -u key.bin
En la imagen de abajo ya no está allí.

Ahora desciframos la clave simétrica con nuestra clave asimétrica privada.
openssl rsautl -decrypt -inkey privatkey.pem -in key.bin.enc -out key.bin
Y nosotros, los afortunados, nuevamente tenemos una clave simétrica para descifrar nuestro texto, que todavía está encriptado.
La imagen está nuevamente debajo, hay una clave nuevamente.

Ahora desciframos el archivo cifrado con el cifrado de cifrado simétrico por nuestro recién cifrado, pero luego desciframos usando el cifrado asimétrico, clave simétrica.
openssl enc -d -aes-256-cfb -in OWASP_Top_10-2017_\(en\).pdf.enc -out OWASP_Top_10-2017_\(en\)decrypt.pdf -pass file:./key.bin
Prueba a continuación.

Ahora: ¿por qué es tan complicado? ¿Por qué no puedes tomar y hacer todo con cifrado asimétrico?
Intentamos, ir directamente al rastrillo;)
Tenemos!
Archivo y claves.

Encriptamos
openssl rsautl -encrypt -inkey publickey.pem -pubin -in OWASP_Top_10-2017_\(en\).pdf -out OWASP_Top_10-2017_\(en\).pdf.enc
POW - POW - POOOOOOOOOOOOH. El error Demasiados datos para el tamaño de la clave. Para el cifrado asimétrico, el tamaño de la clave debe ser mayor o igual que el texto sin formato.
OpenSSL, como en un trato con el diablo, te dio lo que pediste, pero no lo que querías. Es cierto que el archivo cifrado estaba vacío.

Pero puede cifrar un archivo más pequeño que la clave. Probémoslo.
Crea un archivo pequeño.
Por ejemplo, hice esto:
echo "hellow world my name is admin is a secret text nobody know it hahahahaahah" > text.txt

Lo encriptaremos con nuestra clave pública, que todos conocen en el mundo.
openssl rsautl -encrypt -inkey publickey.pem -pubin -in text.txt -out text.txt.enc
Como puede ver en la imagen inferior, el archivo está encriptado. ¡Nada está claro! ¿Quién entiende quién eres?

Ahora desciframos, habiendo eliminado previamente el archivo fuente para la pureza del experimento.
openssl rsautl -decrypt -inkey privatkey.pem -in text.txt.enc -out text.txt

Tenemos un archivo descifrado. Todo es genial
Para transferir todo este bien cifrado, es mejor codificar este último en base64. En consecuencia, antes de descifrar, primero debe decodificar.
Codificado
openssl enc -base64 -in text.txt.enc -out text.txt.bs64

Decodificado
openssl enc -base64 -d -in text.txt.bs64 -out text.txt.enc

¡Y nuevamente tenemos un beleberd que nadie entiende! Si entiendes, ¡este documento no es para ti!
Así es como funciona el cifrado al crear claves y cifrado de datos utilizando la utilidad OpenSSL como ejemplo.
Más adelante voy a describir los modos de cifrado de cifrados simétricos de bloque.