En un post anterior vimos cómo usar gpg en Linux para cifrar datos, pero utilizamos un cifrado simétrico.
Hoy, en cambio, vamos a cifrar de manera asimétrica usando GPG. Veremos cómo:
- Generar un par de claves públicas y privadas
- Exportar la clave pública para que otras personas puedan cifrar archivos con nuestra clave y solo nosotros podamos descifrarlos
- Importar clave pública de otra persona y cifrar datos con la misma
- Desencriptar un archivo con nuestra clave privada
Nota: voy a usar la palabra encriptar y cifrar como sinónimos, así como desencriptar y descifrar.
Generar clave pública y privada
Para generar un par de claves ejecuta el siguiente comando en una terminal:
gpg --full-generate-key
Como en la imagen:
Al ejecutar el comando aparecerá un asistente. Puedes ver mis elecciones resaltadas.
En el primer caso selecciono 1, RSA y RSA
Quiero que la longitud de mi clave sea de 4096 bits
La validez de la clave es de 20 años (20y
); si no se desea que caduque se escribe un 0
. También son válidos los valores como 50 (50 días), 53w
(53 semanas) 15m
(15 meses), etcétera
En el apartado del identificador hay que poner datos reales o que vayamos a recordar. Lo más importante es el correo electrónico, pues así nos van a identificar los demás usuarios cuando importen nuestra clave.
Después pregunta si todo está bien, en caso de que sí, escribimos V
. Si queremos cambiar el nombre escribimos N
, y así por cada opción.
En uno de estos paso nos pedirá la frase de paso o passphrase. Esa es la contraseña que vas a usar para desencriptar, asegúrate de que sea totalmente segura, no la olvides y no la compartas con nadie.
Entropía
Como la generación de la clave debe ser totalmente aleatoria, gpg va a obtener datos realmente aleatorios como la temperatura del CPU o la velocidad del disco; es decir, que no provengan del tiempo o de algo que pueda ser calculado más tarde.
Por eso es que se nos pide hacer acciones mientras se genera la clave, así que debemos abrir otra terminal, navegar en la web un poco, eliminar algunos archivos, etcétera.
Cuando haya suficiente entropía para la longitud de la clave que seleccionamos, las clave serán generadas:
No te preocupes, las claves se guardaron automáticamente.
Nota: recuerda que tu clave privada, como su nombre lo dice, es privada, y no debes compartirla con nadie ni exportarla, al menos que vayas a mudarte a otra computadora.
Exportar la clave pública
Ya tenemos nuestro par de claves y ahora queremos que nuestros amigos nos envíen archivos y datos cifrados con la misma, así que, ¿cómo la exportamos?
Muy fácil. Ejecuta el siguiente comando:
gpg -a --export contacto@parzibyte.me > parzibyte.gpg.asc
Obviamente cambiando tus datos y tu correo. Te explico el comando…
La opción -a
es para que la salida sea ASCII, no en formato binario. La opción --export
es para exportar, y le indicamos el correo o identificador del dueño de la clave pública.
Después redireccionamos la salida a un archivo llamado parzibyte.gpg.asc
cuyo contenido podemos ver y compartir libremente.
Aquí dejo mi clave pública por si quieres importarla (recuerda usarla antes del 2039):
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=hJev
-----END PGP PUBLIC KEY BLOCK-----
Con esta clave, cualquier persona puede cifrar un documento o archivo (abajo veremos cómo) y enviarnos el resultado, el cual solo nosotros (poseedores de la clave privada) podemos desencriptar.
Importar clave de otro usuario
Si otro usuario nos envía su clave pública (o si queremos mostrarle a alguien cómo se importa nuestra clave que acabamos de exportar) la manera de importarla es fácil.
gpg --import nombreDeArchivo
En mi caso:
gpg --import aldair.gpg.key.asc
Si tú vas a importar la clave que acabo de exportar:
gpg --import parzibyte.gpg.asc
Se debe mostrar una confirmación:
Ahora podemos cifrar mensajes con la clave pública de ese usuario, y solo él podrá descifrarlos.
Cifrar archivo de manera asimétrica
Ya sea que otro usuario va a cifrar un archivo con nuestra clave, o nosotros con la que acabamos de exportar, el comando es:
gpg -a -r correo.del.destinatario@asd.com --encrypt nombreDelArchivo
En mi caso es:
gpg -a -r alda@hotmail.com --encrypt secreto.txt
De nuevo, si lo estás haciendo con mi clave, sería:
gpg -a -r contacto@parzibyte.me --encrypt tuArchivo
GPG va a pedir confirmación por la identidad del usuario.
Te explico el comando. La opción -a
es para que la salida sea en ascii, si quieres puedes omitir ese parámetro. Y la -r
es del destinatario, que en este caso es el que tiene su correo en alda@hotmail.com
Finalmente --encrypt
es para encriptar un archivo.
Por cierto, se creará un archivo encriptado con el mismo nombre pero distinta extensión. Ese archivo se lo puedes enviar al dueño de la clave pública y solo él podrá descifrarlo.
Cifrar archivo con nuestra propia clave
Esto tiene poco sentido, pero si no tenemos con quién probar viene de maravilla. Podemos cifrar con nuestra propia clave así:
gpg -a -r tu_correo@dominio.com --encrypt nombreDeArchivo
Es decir, cifras con tu propia clave que registraste.
En la imagen puedes ver una demostración. Primero creo un archivo de texto y luego lo cifro (en realidad se pueden cifrar todo tipo de archivos, no solo los de texto)
Eso va a crear un archivo con el mismo nombre pero con extensión asc. Y al mostrarlo vemos los datos cifrados que solamente el poseedor de la clave privada podrá ver.
Descifrar archivos
Para terminar, veamos cómo se descifran los archivos. Recuerda que solo podemos descifrar aquellos archivos que fueron cifrados por nuestra clave pública.
El comando es:
gpg -a --decrypt archivoEncriptado > archivoDesencriptado
En mi caso voy a descifrar el mismo que cifré con mi clave:
gpg -a --decrypt secreto.txt.asc > desencriptado.txt
En un paso de estos el programa va a solicitar la frase de paso que pusimos cuando generamos el par de claves.
La explicación del comando es casi la misma. La opción -a
es por si se cifró con ascii. Después hacemos un redireccionamiento.
En la imagen se observa que pude desencriptar el archivo exitosamente.
Hola genial el tutorial pero una consulta hay foma de evitar la frase de paso? tanto en generarla como en descriptar entiendo que le da el plus de seguridad pero no le veo sentido.
si en caso deseo encriptar y desencriptar sin esa frase de paso? que recomendación sugiere?
Gracias saludos!
Hola. Me parece que es totalmente posible omitir ese paso, puedes ingresar “nada” cuando te solicite la passphrase
Saludos 🙂
Pingback: Un ransomware para Linux usando GPG - Parzibyte's blog