Gpg e macosx

From Studiosg
Jump to navigationJump to search

Benvenuti nella pagina Wiki di Simone Giustetti.


Lingue: English - Italiano



GPG per MacOsX

Gnu Pravacy Guard è un programma per la crittografia ad uso personale che gira su di una moltitudine di piattaforme tra cui i sistemi operativi della famiglia Macintosh. Per tale sistema in particolare esistono tre versioni "ufficiali" di GPG:

  • MacGPG è la conversione ufficiale del ramo 1.4 di GPG. Lo sviluppo di tale versione è concluso e i pacchetti forniti servono solo nell'evenienza di dover supportare vecchie installazioni o vecchie versioni di OsX.
  • GPGOsX è la conversione ufficiale del ramo 2.1 di GPG. Include tutte le funzionalità introdotte con la versione 2.0 e la recente 2.1.
  • GPGTools è un'alternativa a GPGOsX basata sula ramo 2.0 di sviluppo. GPGTools ha il vantaggio di includere molte integrazioni al programma di base come i plug-in per Apple Mail ed un'interfaccia grafica funzionante.

Sia GPGOsX che GPGTools supportano solo versioni piuttosto recenti di OsX. La versione minima richiesta per installare i due programmi è la 10.6 oppure la 10.7. MacGPG invece supporta le vecchie architetture ed è pertanto indicato per chi ancora possedesse un Mac basato su architettura PowerPC. Questi ultimi dovranno però prepararsi ad utilizzare la riga di comando dato che il file di installazione non include una interfaccia grafica.

Installazione

La procedura di installazione varia leggermente al variare del programma che si installa. Si rimanda alla documentazione presente sui siti web dei rispettivi programmi per istruzioni dettagliate. Di seguito sono forniti alcuni collegamenti a pagine web che descrivono la procedura di installazione di GPGTools:

Creazione delle Chiavi & Configurazione

Le pagine collegate più sopra contengono indicazioni circa la creazione della coppia di chiavi utilizzate da GPG per cifrare e decifrare i file. Le chiavi sono fondamentali per GPG dato che da esse dipende la robustezza delle informazioni cifrate. Per informazioni esaustive si rimanda alla documentazione del programma mentre più sotto verranno riassunti i concetti fondamentali relativi alla crittografia ed al funzionamento di GPG:

  • GPG utilizza la crittografia asimmetrica anche detta crittografia a chiave pubblica.
  • La crittografia asimmetrica utilizza una coppia di chiavi: una chiave pubblica, che ha la funzione di cifrare le informazioni, ed una chiave privata necessaria per decifrare i dati.
  • La chiave pubblica deve essere distribuita a tutti coloro che desiderano inviarci messaggi o file cifrati.
  • La chiave privata è segreta e non deve essere condivisa con nessuno.
  • Informazioni cifrate con la chiave pubblica possono essere decifrate solo con quella privata.
  • La chiave privata può essere protetta con una passphrase. Anche se sottratta da persone non autorizzate, una chiave protetta risulta inutilizzabile senza conoscere la passphrase.

Le chiavi devono essere create come prima cosa a seguito dell'installazione per consentire il funzionamento del programma. La lunghezza delle chiavi è un aspetto delicato ed oggetto di discussione frequente. Una chiave di lunghezza maggiore garantisce in teoria una maggiore sicurezza, ma il suo impiego comporta svantaggi da prendere in considerazione. GPG consente di impostare una lunghezza massima di 4096 bit per le chiavi, ma si consiglia comunque di impostare il valore standard di 2048 bit. La lunghezza standard rappresenta un buon compromesso tra sicurezza e prestazioni garantendo inoltre la possibilità di utilizzare dispositivi esterni quali le smart card. Le FAQ di GPG (In inglese) contengono una trattazione della lunghezza in cui vengono soppesati i vantaggi e gli svantaggi del ricorso a dimensioni maggiori di 2048 bit.

La procedura per la generazione delle chiavi è descritta di seguito. Seppure alcune versioni di GPG per Mac dispongano di una interfaccia grafica di amministrazione, la riga di comando è l'unica interfaccia comune a tutte e tre perciò se ne farà ricorso.

  • Aprire un terminale.
  • Lanciare il comando gpg --gen-key fornendo tutte le informazioni richieste come nell'esempio sottostante:
  hostname:~ user1$ gpg --gen-key
  gpg (GnuPG) 1.4.9; Copyright (C) 2008 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) DSA and Elgamal (default)
     (2) DSA (sign only)
     (5) RSA (sign only)
  Your selection? 1
  DSA keypair will have 1024 bits.
  ELG-E keys may be between 1024 and 4096 bits long.
  What keysize do you want? (2048) 
  Requested keysize is 2048 bits
  Please specify how long the key should be valid.
           0 = key does not expire
        <n>  = key expires in n days
        <n>w = key expires in n weeks
        <n>m = key expires in n months
        <n>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) <heinrichh@dusseldorf.de>"
  
  Real name: StudioSG
  Email address: studiosg@giustetti.net
  Comment: sg_test_03
  You selected this USER-ID:
     "StudioSG (sg_test_03) <studiosg@giustetti.net>"
  
  Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
  You need a Passphrase to protect your secret key.
  
  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.
  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 CE95C1E9 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:   2  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
  pub   1024R/CE95C1E9 2016-03-22
        Key fingerprint = 4313 91CC F222 161E 3B19  54CE AC09 5248 CE95 C1E9
  uid                  StudioSG (sg_test_03) <studiosg@giustetti.net>
  sub   2048g/1C97007E 2016-03-22

La procedura chiede di inserire un identificatore ed altre informazioni personali utilizzate per distinguere le chiavi. Per ottenere un elenco delle chiavi registrate utilizzare il comando gpg --list-keys:

  hostname:~ user1$ gpg --list-keys
  /home/user1/.gnupg/pubring.gpg
  -----------------------------
  pub   1024D/CE95C1E9 2016-03-22
  uid                  StudioSG (sg_test_03) <studiosg@giustetti.net>
  sub   2048g/1C97007E 2016-03-22

Durante la creazione delle chiavi è possibile digitare una passphrase opzionale per la chiave privata. Si consiglia caldamente di utilizzare sempre una passphrase, che tutela l'utente in caso di furto del dispositivo su cui siano custodite le chiavi. Una password troppo corta o troppo facile potrebbe essere decifrata mediante un attacco di forza bruta. Una passphrase lunga più di otto caratteri contenente lettere, numeri e caratteri speciali salvaguarderà da tale tipo di attacchi.

Il comportamento di GPG varia impostando opportuni valori per le opzioni del programma. In un sistema MacOsX le opzioni di configurazione sono salvate in file di testo modificabili con comune elaboratore di testo. Ogni utenza configurata sul sistema possiede una copia personale dei file di configurazione, che sono salvati nella cartella principale. Il file di configurazione di GPG è /Users/<nome utente>/.gnupg/gpg.conf. Ad esempio il file di configurazione di un ipotetico utente user1 sarà: /Users/user1/.gnupg/gpg.conf. Il punto all'inizio del nome .gnupg impone che la cartella sia nascosta. Per visualizzare la cartella utilizzare l'opzione -a del comando ls:

ls -la

Per leggere o modificare il proprio file di configurazione:

/Applications/TextEdit.app/Contents/MacOS/TextEdit /Users/<nome utente>/.gnupg/gpg.conf

Il file è commentato scrupolosamente, ma si rimanda comunque al manuale del programma per una descrizione di tutte le opzioni ivi contenute. Le opzioni predefinite sono adeguate per la quasi totalità degli usi privati o professionali. Si consiglia di cambiare tali valori solo quando si sia certi del risultato ottenuto.

Il comando gpg deve essere rimpiazzato da gpg2 dagli utenti di GPGOsX o GPGTools che usino la riga di comando invece delle rispettive interfacce grafiche.

Back-up della Coppia di Chiavi

La coppia di chiavi è fondamentale per leggere i file cifrati: la perdita della chiave privata potrebbe rivelarsi una catastrofe essendo impossibile per i processori attualmente in commercio decifrare i file senza di essa. L'intero archivio andrebbe perso assieme alla chiave ed è pertanto buona norma generare una copia delle chiavi da conservare poi in un luogo sicuro, diverso dalla macchina su cui si lavori abitualmente. Tutte le chiavi generate sono contenute all'interno della cartella /Users/<nome utente>/.gnupg in appositi file binari. Un modo semplice ottenere la copia di sicurezza delle chiavi consiste nella creazione di un archivio compresso protetto da password:

zip -er key_backup.zip /Users/<nome utente>/.gnupg

Il comando zip chiederà all'utente di fornire una password per l'archivio e di confermarla immediatamente dopo. L'archivio generato, key_backup.zip, potrà essere aperto solo fornendo la password impostata. La versione del comando zip installata in OsX 10.4 o precedenti non supporta la crittografia. Gli utenti di tali sistemi devono rimuovere l'opzione -e altrimenti il comando fallirà rendendo l'errore "(encryption not supported)":

zip -r key_backup.zip /Users/<nome utente>/.gnupg

Cifrare e Decifrare File

Il lancio dei comandi di GPG per cifrare e decifrare documenti su Mac dipende dal software installato pertanto anche in questo caso si rimanda alla documentazione del programma specifico. Seguono alcuni collegamenti alle pagine del sito di GPGTools:

L'interfaccia a riga di comando ha il vantaggio di essere uniforme per tutti i programmi. È possibile ottenere informazioni ed esempi d'uso nella documentazione ufficiale di GPG, che illustra i comandi e le relative opzioni. Il comando base per cifrare un file è:

gpg --encrypt <file>

GPG chiederà all'utente di fornire un identificatore per la chiave del destinatario del file che verrà utilizzata per cifrare il documento come illustrato nell'esempio sottostante:

  hostname:~ user1$ gpg --encrypt st_test01.pdf
  You did not specify a user ID. (you may use "-r")
  
  Current recipients:
  
  Enter the user ID.  End with an empty line: StudioSG
  
  Current recipients:
  2048g/1C97007E 2016-03-22 "StudioSG (sg_test_03) <studiosg@giustetti.net>"
  
  Enter the user ID.  End with an empty line: 
  
  hostname:~ user1$

Il file così generato avrà il medesimo nome del file origine ed estensione .gpg.

Per impostare molti destinatari diversi bisogna digitarne uno per riga. Una riga vuota indica la fine dell'elenco di destinatari. Un elenco delle chiavi registrate ed utilizzabili per cifrare i file può essere richiamato mediante l'opzione --list-keys:

  hostname:~ user1$ gpg --list-keys
  /Users/user1/.gnupg/pubring.gpg
  -----------------------------
  pub   1024D/CE95C1E9 2016-03-22
  uid                  StudioSG (sg_test_03) <studiosg@giustetti.net>
  sub   2048g/1C97007E 2016-03-22

Per cifrare molti file con un unico comando esiste l'opzione --multi. Nel caso sarà necessario fornire un elenco di destinatari per ogni file. L'operazione potrebbe risultare tediosa e, per semplificarla, GPG offre l'opzione -r che consente di fornire i destinatari direttamente nella riga di comando. Nell'esempio riportato sotto tre documenti sono protetti utilizzando la chiave del destinatario StudioSG:

  hostname:~ user1$ ls -la
  total 48
  drwx------  3 user1 user1 4096 Mar 18 18:50 .
  drwx------ 17 root  admin 4096 Mar 18 18:37 ..
  -rw-------  1 user1 user1 7737 Mar 18 18:50 st_test01.pdf
  -rw-------  1 user1 user1 7844 Mar 18 18:50 st_test02.pdf
  -rw-------  1 user1 user1 7932 Mar 18 18:50 st_test03.pdf
  hostname:~ user1$ gpg -r StudioSG --multi --encrypt st_test0*
  hostname:~ user1$ ls -la
  total 72
  drwx------  3 user1 user1 4096 Mar 18 18:50 .
  drwx------ 17 root  admin 4096 Mar 18 18:37 ..
  -rw-------  1 user1 user1 7737 Mar 18 18:50 st_test01.pdf
  -rw-------  1 user1 user1 7378 Mar 18 18:50 st_test01.pdf.gpg
  -rw-------  1 user1 user1 7844 Mar 18 18:50 st_test02.pdf
  -rw-------  1 user1 user1 7487 Mar 18 18:50 st_test02.pdf.gpg
  -rw-------  1 user1 user1 7932 Mar 18 18:50 st_test03.pdf
  -rw-------  1 user1 user1 7574 Mar 18 18:50 st_test03.pdf.gpg

Per decifrare un file si utilizza il comando gpg seguito dall'opzione --decrypt. GPG chiederà all'utente di fornire una password, ricevuta la quale esporterà il contenuto del file cifrato sull'output della console. Per ottenere un file in chiaro, invece, è necessario utilizzare l'opzione --output e fornire un nome per detto file.

gpg --output <file in chiaro> --decrypt <file cifrato>
  hostname:~ user1$ gpg --output st_test01.pdf --decrypt st_test01.pdf.gpg
  
  You need a passphrase to unlock the secret key for
  user: "StudioSG (sg_test_03) <studiosg@giustetti.net>"
  2048-bit ELG-E key, ID 1C97007E, created 2016-03-22 (main key ID CE95C1E9)
  
  gpg: encrypted with 2048-bit ELG-E key, ID 1C97007E, created 2016-03-22
        "StudioSG (sg_test_03) <studiosg@giustetti.net>"
  hostname:~ user1$ ls -la
  total 56
  drwx------  3 user1 user1 4096 Mar 18 18:50 .
  drwx------ 17 root  admin 4096 Mar 18 18:37 ..
  -rw-------  1 user1 user1 7737 Mar 18 18:50 st_test01.pdf
  -rw-------  1 user1 user1 7378 Mar 18 18:50 st_test01.pdf.gpg
  -rw-------  1 user1 user1 7487 Mar 18 18:50 st_test02.pdf.gpg
  -rw-------  1 user1 user1 7574 Mar 18 18:50 st_test03.pdf.gpg

GPG-AGENT

Gpg-agent è un demone che memorizza in una propria cache tutte le passphrase digitate da un utente fornendole poi ai programmi che le richiedano successivamente. L'utente dovr&agrve; inserire ogni password solo una volta e non all'apertura di ogni documento. Il risparmio di tempo risulterà notevole per il personale di un ufficio che debba leggere e gestire una gran quantità di documenti ogni giorno.

Il demone deve essere esplicitamente avviato ed attivo perchè memorizzi le password e l'ambiente deve essere opportunamente configurato perchè ne avverta la presenza e lo interroghi quando necessario. Per automatizzare l'avvio di gpg-agent in MacOsX è necessario configurare un launch agent:

  • Aprire il terminale.
  • Spostarsi nella cartella del launch agent:
cd ~/Library/LaunchAgents
  • Creare un file che contenga la configurazione di gpg-agent:
/Applications/TextEdit.app/Contents/MacOS/TextEdit org.gnupg.gpg-agent.plist
  • Popolare il file con la configurazione di gpg-agent in formato XML:
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
   <dict>
      <key>Label</key>
      <string>org.gnupg.gpg-agent</string>
      <key>ProgramArguments</key>
      <array>
         <string>/Users/<nome utente>/bin/gpg_agent_start.sh</string>
      </array>
      <key>RunAtLoad</key>
      <true/>
   </dict>
   </plist>
  • Nella cartella del proprio utente creare la sotto-cartella bin ove salvare lo script di avvio di GPG:
mkdir /Users/<nome utente>/bin
  • Creare lo script di avvio:
/Applications/TextEdit.app/Contents/MacOS/TextEdit gpg_agent_start.sh
   if test -f $HOME/.gpg-agent-info && \
      kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
      GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info`
      export GPG_AGENT_INFO
   else
      eval `/usr/local/bin/gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info`
   fi
   export GPG_TTY=`tty`
  • Rendere il file di avvio eseguibile:
chmod 700 gpg_agent_start.sh
  • Aggiornare la configurazione del terminale perchà tutti i comandi siano informati della presenza dell'agente. Il terminale utilizza una shell bash ergo sarà necessario aggiornare il file di configurazione della stessa:
cd
/Applications/TextEdit.app/Contents/MacOS/TextEdit .bash_profile
   export GPG_TTY=$(tty)
   if [[ -f "${HOME}/.gpg-agent-info" ]]; then
      . "${HOME}/.gpg-agent-info"
      export GPG_AGENT_INFO
   fi

I parametri di configurazione di gpg-agent sono contenuti nel file /Users/<nome utente>/.gnupg/gpg-agent.conf. Tra questi vale la pena citare default-cache-ttl che imposta l'intervallo di tempo per cui una password verrà mantenuta nella cache. Scaduto tale limite la password verrà rimossa e chiesta nuovamente all'utente in caso di bisogno. Il tempo di vita standard di una password ammonta a 600 secondi ossia 10 minuti. Per aumentare tale intervallo ad un'ora si modifichi la riga:

  default-cache-ttl 600

in

  default-cache-ttl 3600

e si riavvii il demone gpg-agent.

Gli utenti con versione di OsX 10.4 o meno recente non potranno usufruire dei servizi di gpg-agent essendo lo stesso un componente introdotto con la versione 2.0 di GPG.


Conclusioni

Il presente articolo contiene una breve presentazione delle versioni di Gnu Privacy Guard sviluppate per piattaforma Mac. Sono state descritte la procedura di installazione ed il funzionamento base del programma. Per maggiori informazioni si rimanda al manuale del progetto ed ai numerosi articoli disponibili in rete e in questo stesso sito web. Se foste interessati ai servizi offerti o solo per ottenere maggiori informazioni, per cortesia utilizzate i contatti reperibili nell'apposita pagina.


Per commenti, consigli, domande inviate una e-mail all'indirizzo studiosg [chiocciola] giustetti [punto] net.


Link esterni





Lingue: English - Italiano