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:
Nota: voy a usar la palabra encriptar y cifrar como sinónimos, así como desencriptar y descifrar.
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.
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.
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):
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.
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.
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.
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.
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.
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…
El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Esta web usa cookies.
Ver comentarios
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 :)