Oggi ritorno al tema della crittografia e della sicurezza e, in particolare, vi mostrerò come crittografare semplicemente un file con GnuPG , questo può essere davvero utile per cifrare un singolo file in cui avete le vostre password o altre informazioni personali che si desidera mantenere più sicure.
GNU Privacy Guard (GnuPG o GPG) è un software sotto licenza GPL alternativo alla suite di software di crittografia PGP. GnuPG è compatibile con la RFC 4880, che è l’attuale IETF specifica che traccia gli standard di OpenPGP. Le attuali versioni di PGP (e Veridis Filecrypt) sono interoperabili con GnuPG e altri sistemi compatibili con OpenPGP.
Questo software è spesso integrato con client di posta in modo che firmi, cripti o faccia entrambe le azioni sulla posta elettronica inviata e ricevuta, ma adesso vedremo come usarlo sulla riga di comando per cifrare un file.
Soluzione 1 – Cifrare con una chiave simmetrica
Questo è il modo più semplice per cifrare un file, si utilizza una “password” per cifrare il file e quando si vuole decifrare il testo cifrato si deve utilizzare la stessa password.
La chiave, in pratica, rappresenta un segreto condiviso tra due o più parti che può essere utilizzata per mantenere una informazione privata, in generale, questa soluzione è buona quanto la password scelta, può essere una buona soluzione per inviare un documento tramite posta elettronica e comunicare la password con un altro supporto (telefono, messaggi istantanei, chat).
In questo esempio uso un semplice file, mysecretdocument.txt
che contiene secret 1234
mint-desktop tmp # cat mysecretdocument.txt secret 1234 |
Ora siamo in grado di utilizzare l’opzione gpg -c
(o --symmetric
) per cifrare con un algoritmo di cifratura simmetrica utilizzando una passphrase. L’algoritmo simmetrico predefinito è CAST5, ma può essere scelto con l’opzione -cipher-algo
:
mint-desktop tmp # gpg -c mysecretdocument.txt gpg: directory `/root/.gnupg' created gpg: new configuration file `/root/.gnupg/gpg.conf' created gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run gpg: keyring `/root/.gnupg/pubring.gpg' created |
Questo era il mio primo uso di gpg su questo computer, e così ha creato la directory /root/.gnupg
e alcuni file, questo è normale, se non avete mai usato gpg, dopo avermi chiesto per due volte la passphrase mi ha creato il nuovo file ed ora nelal directory ho anche questo nuovo file:
mint-desktop tmp # ls -alrt -rw-r--r-- 1 root root 12 Jan 10 23:13 mysecretdocument.txt -rw-r--r-- 1 root root 67 Jan 10 23:14 mysecretdocument.txt.gpg |
Siamo ora in grado di fare un cat
del nuovo file, per verificare che sia stato cifrato, il comportamento predefinito è quello di mantenere lo stesso nome del file originale e aggiungere alla fine il suffisso .gpg :
mint-desktop tmp # cat mysecretdocument.txt.gpg |
Questo mostrerà un gruppo di caratteri non stampabili, questo va bene.
Ora siamo in grado di tenere il nostro file segreto e cancellare il testo in chiaro, o inviarlo via e-mail e una volta che abbiamo bisogno di rivedere il nostro segreto, si può utilizzare il comando:
mint-desktop tmp # gpg -d mysecretdocument.txt.gpg gpg: keyring `/root/.gnupg/secring.gpg' created gpg: CAST5 encrypted data gpg: gpg-agent is not available in this session gpg: encrypted with 1 passphrase secret 1234 gpg: WARNING: message was not integrity protected |
gpg con l’opzione -d
stampa l’output direttamente su standard output, per scriverlo in un file è possibile utilizzare l’opzione gpg -o outputfile.txt
:
mint-desktop tmp # gpg -o mynewfile.txt -d mysecretdocument.txt.gpg mint-desktop tmp # ls -l my* -rw-r--r-- 1 root root 12 Jan 10 23:37 mynewfile.txt -rw-r--r-- 1 root root 12 Jan 10 23:13 mysecretdocument.txt -rw-r--r-- 1 root root 67 Jan 10 23:14 mysecretdocument.txt.gpg |
Soluzione 2 – Cifratura con una chiave pubblica
C’è anche un altro approccio alla crittografia, GPG consente di utilizzare una cifratura a chiave pubblica-privata per cifrare e decifrare i file su Windows e Linux. Il vantaggio della cifratua con chiave pubblico-private è che si può mantenere la vostra chiave pubblica in mezzo alla rete, e utilizzarla da qualsiasi luogo per cifrare i file. Una volta cifrati con la chiave pubblica, i file possono essere decifrati solo con la chiave privata.
Quindi, nell’esempio adotteremo un sistema che utilizza un certificato che si compone di due chiavi distinte, una pubblica e una privata.
La chiave privata dovrebbe rimanere esclusivamente nelle mani del proprietario del certificato.
Il proprietario la userà per decifrare i file che gli vengono inviati, che ora possono essere inviati anche con protocolli insicuri (e-mail, ftp, http upload)
La chiave pubblica può essere distribuita a tutto il mondo, senza incorrere in alcun rischio di pericolo. Essa verrà utilizzata per crittografare i file rivolti al titolare del certificato, solo il proprietario della relativa chiave privata è in grado di decifrare il file.
La chiave pubblica può essere distribuita a chiunque, senza alcun controllo. Il fatto che cada in mani straniere non costituisce alcun pericolo. La massima attenzione deve essere data esclusivamente alla chiave privata, che deve rimanere rigorosamente nelle mani dei legittimi proprietari.
Come prima cosa, è necessario generare una coppia di chiavi pubblica/privata. Questa coppia di chiavi viene generata con l’opzione --gen-key
di gpg:
$ gpg --gen-key gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) 4096 Requested keysize is 4096 bits Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Key is valid for? (0) 0 Key does not expire at all Is this correct? (y/N) y You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " Real name: Linuxaria admin Email address: admin@linuxaria.com Comment: You selected this USER-ID: "Linuxaria admin " Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key. gpg: gpg-agent is not available in this session We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need 26 more bytes) ...........+++++ ........+++++ We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. gpg: key A7B8B4DD marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub 4096R/A7B8B4DD 2013-01-11 Key fingerprint = AF7B 310A 57FF 0524 91A6 E483 83F7 FE98 A7B8 B4DD uid Linuxaria admin sub 4096R/E427331B 2013-01-11 |
In questo esempio ho creato una chiave RSA lunga 4096 bit ed impostato come user ID della chiave, che consiste nel vostro vero nome, indirizzo di posta elettronica e facoltativamente un commento, “Linuxaria admin “, posso verificare le nuove chiavi con le opzioni -list-keys
e -list-secret-keys
mint-desktop ~ # gpg --list-keys; /root/.gnupg/pubring.gpg ------------------------ pub 4096R/A7B8B4DD 2013-01-11 uid Linuxaria admin sub 4096R/E427331B 2013-01-11 mint-desktop ~ # gpg --list-secret-keys /root/.gnupg/secring.gpg ------------------------ sec 4096R/A7B8B4DD 2013-01-11 uid Linuxaria admin ssb 4096R/E427331B 2013-01-11 |
Cifrare con la chiave pubblica
E ora possiamo cifrare un file con la chiave pubblica, nella vita reale si invia la propria chiave pubblica via e-mail, o la si pubblica su un sito web in modo che gli altri possano dare questo comando:
gpg -e -r admin@linuxaria.com mysecretdocument.txt |
Ancora una volta avremo un nuovo file con nome mysecretdocument.txt.gpg, ma molto più grande di quella dell’esempio precedente, questa volta abbiamo usato le opzioni -e e -r che stanno per:
-e Cifrare i dati.
-r Cifra per destinatario nome id utente. Se non viene specificata questa opzione o –hidden-recipient, GnuPG chiede l’id utente salvo sia configurato un destinatario predefinito.
Decifrare con la chiave privata
Per decodificare il file, è possibile utilizzare le opzioni -d e -o che abbiamo usato anche nel precedente esempio:
mint-desktop tmp # gpg -d mysecretdocument.txt.gpg -o myfile.txt You need a passphrase to unlock the secret key for user: "Linuxaria admin <admin @linuxaria.com>" 4096-bit RSA key, ID E427331B, created 2013-01-11 (main key ID A7B8B4DD) gpg: gpg-agent is not available in this session gpg: encrypted with 4096-bit RSA key, ID E427331B, created 2013-01-11 "Linuxaria admin </admin><admin @linuxaria.com>" </admin> |
Questo comando creerà il file myfile.txt
con i nostri contenuti in chiaro.
Importazione di nuove chiavi
Per essere in grado di crittografare i file e spedirli ad altri dovrete importare le loro chiavi pubbliche nel vostro portachiavi, e gli altri faranno lo stesso per la vostra chiave pubblica, per importare una chiave, eseguire:
gpg --import KEYFILE |
Quando si importa una chiave pubblica su un altro computer, potrebbe essere necessario configurare gpg per fidarsi della chiave. In caso contrario, quando si utilizza quella chiave per fare cifrare, è possibile che si visualizzi un messaggio come questo:
It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. Use this key anyway? (y/N) |
Per autorizzare la chiave, eseguire:
gpg --edit-key NAME |
GPG mostrerà delle informazioni, ed una riga tipo:
trust: undefined validity: unknown |
You will be at a console, and you have to type “trust”:
Command> trust Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) 1 = I don't know or won't say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menu Your decision? 5 Do you really want to set this key to ultimate trust? (y/N) y |
Scrivete “quit
” per uscire. Se ora eseguite ancora gpg --edit-key NAME
, si vedrà una linea come quella qui sotto, il che significa che la chiave è ora attendibile.
trust: ultimate validity: ultimate |
Riferimenti :
Gnu Privacy Guard (GnuPG) Mini Howto
Notes for using GPG to encrypt and decrypt backup files
Encrypting and decrypting files with GnuPG
Popular Posts:
- None Found
Gia’ il fatto che il tutto viene fatto come root, la dice lunga…
Scusami, ma a me non tanto.
Che differenza c’e’ nel fare un esempio di cifratura di un file con utenza root o normale ?
$ ccrypt [file]
$ ccrypt -R [directory]
$ ccrypt -d [file]
$ ccrypt -d -R [directory]
wow, thanks for this clear article! now i can learn how to use GPG. excellent article! keep up the good work you’re doing!
Grazie mille, sei stato utilissimo, complimenti per la chiarezza e la completezza!!! Bravo!
Can it possible to get the count the record of encryted (.gpg) file without decryt the file in linux ?
Hi,
Is it possible to encrypt only part of file via gpg. For example, say I have file test.txt and and it has below content
USERNAME=system
PASSWORD=passw0rd
I know we can encrypt the complete test.txt with gpg but can I encrypt only password inside the test.txt and keep everything as it is?
Regards,
Anish
Great, very helpfull!!!!!