ΕΛ/ΛΑΚ | creativecommons.gr | mycontent.ellak.gr |
freedom

Μια μικρή εισαγωγή στο GnuPG

Η ηλεκτρονική σας αλληλογραφία είναι ένας από τους βασικούς τρόπους επικοινωνίας σας και η ασφάλεια της είναι σημαντική.

Οι κίνδυνοι παραβίασης του προσωπικού σας απόρρητου είναι πολλοί και μπορεί να προέρχονται από κακόβουλους χρήστες και “περίεργους” μέχρι και τον “Μεγάλο αδελφό” κάποιων “καλόβουλων” υπηρεσιών :

  • Ανάγνωση του περιεχόμενου της αλληλογραφίας σας
  • Ανάγνωση του θέματος του μηνύματος σας
  • Καταγραφή όλων των επαφών σας και πόσο συχνά επικοινωνείτε μαζί τους
  • Πλαστοπροσωπία: Κάποιος τρίτος προσποιείται ότι είναι εσείς ή ο παραλήπτης της αλληλογραφίας σας.

Οι περισσότεροι από εσάς έχουν ήδη κάνει κάποια βασικά βήματα προστασίας όπως να χρησιμοποιούν δύσκολους και ισχυρούς κωδικούς πρόσβασης σε έναν αξιόπιστο πάροχο υπηρεσίας ηλεκτρονικής αλληλογραφίας , αλλά αυτό δεν είναι αρκετό:

Κάθε μήνυμα ηλεκτρονικού ταχυδρομείου που στέλνεται μέσα από το ∆ιαδίκτυο περνάει από πολλά υπολογιστικά συστήματα στην πορεία προς τον παραλήπτη του και το περιεχόμενο του είναι ευάλωτο σε υποκλοπές. Ακόμη και αν νομίζετε ότι δεν έχετε τίποτε να κρύψετε : Εκτίθενται και εκείνοι με τους οποίους επικοινωνείτε και το παραμικρό σας προσωπικό ή επαγγελματικό σας μυστικό και λεπτομέρεια είναι κάπου αποθηκευμένα για οποιαδήποτε χρήση.

Η κρυπτογράφηση είναι η λύση για να προστατεύσετε το ιδιωτικό σας απόρρητο.

Το GnuPG κρυπτογραφεί τα μηνύματά σας πριν αυτά αποσταλούν, έτσι μόνο οι παραλήπτες της επιλογής σας μπορούν να τα διαβάσουν. Το GnuPG είναι ανεξάρτητο από πλατφόρμες και λειτουργικά συστήματα. Αυτό σημαίνει ότι λειτουργεί με κάθε διεύθυνση ηλεκτρονικής αλληλογραφίας και εκτελείται σχεδόν σε κάθε υπολογιστή ή πρόσφατο κινητό τηλέφωνο. Το GnuPG είναι ελεύθερο λογισμικό και διαθέσιμο χωρίς χρέωση. Όποτε ένα μήνυμα κρυπτογραφημένο με GnuPG δέχεται παρεμβολές ή πέφτει σε λάθος χέρια, αχρηστεύεται: Χωρίς το κατάλληλο ιδιωτικό κλειδί δεν γίνεται να διαβαστεί από κανέναν. Αλλά, για το σωστό παραλήπτη–και μόνο–ανοίγει όπως ένα κανονικό μήνυμα. Όταν κάποιος θέλει να σας στείλει ένα κρυπτογραφημένο μήνυμα, χρειάζεται το «δημόσιο κλειδί» σας. Έτσι όσο περισσότερο διανέμετε το δημόσιο κλειδί σας, τόσο το καλύτερο.

Μην ανησυχείτε: Το δημόσιο κλειδί σας μπορεί μόνο να χρησιμοποιηθεί για την κρυπτογράφηση των μηνυμάτων που λαμβάνετε όχι για την αποκρυπτογράφησή τους.

Το «ιδιωτικό κλειδί» σας λειτουργεί όπως το κλειδί της εξώπορτα στην οικία σας το διατηρείτε ασφαλές (και προσωπικό) στον προσωπικό σας υπολογιστή. Φροντίστε να είστε το μόνο πρόσωπο οποίο μπορεί να έχει πρόσβαση σε αυτό. Χρησιμοποιήστε το ιδιωτικό σας κλειδί για να αποκρυπτογραφήσετε και να διαβάσετε τα κρυπτογραφημένα μηνύματα που έχετε λάβει.

Για να αποκρυπτογραφήσετε τα μηνύματά σας χρειάζεστε το ιδιωτικό σας κλειδί και το συνθηματικό. Το συνθηματικό θα πρέπει να αποτελείται τουλάχιστον από 8 χαρακτήρες και να περιέχει ψηφία ,ειδικούς χαρακτήρες, καθώς επίσης και κεφαλαία και πεζά γράμματα. Ακόμη, κανείς γνωστός σας δεν πρέπει να μπορεί να το μαντέψει.

Τι είναι το δημόσιο – Ιδιωτικό κλειδί; Μια εισαγωγή

Το Δημόσιο σας κλειδί μπορεί να διαμοιραστεί με οποιοδήποτε μέσο, είτε με φυσική παρουσία — για παράδειγμα μέσω αντιγραφής σε USB flash stick — είτε ψηφιακά, όπως με αποστολή μέσω e-mail ή ανάρτηση σε κάποια ιστοσελίδα ή μέσο κοινωνικής δικτύωσης.

Το Δημόσιο κλειδί μπορεί να το αποκτήσει οποιοσδήποτε χωρίς να επηρεαστεί η ασφάλεια αυτής της μεθόδου κρυπτογραφίας.

Αντίθετα, το Ιδιωτικό κλειδί είναι διαθέσιμο μόνο στον ιδιοκτήτη του, είναι μυστικό και δεν πρέπει να περάσει στην κυριότητα τρίτων. Είναι αδύνατο να παραχθεί ένα Ιδιωτικό κλειδί από το Δημόσιο που του αντιστοιχεί, εφόσον δεν υπάρχουν παραλείψεις ή λάθη στην υλοποίηση της μεθόδου κρυπτογραφίας που χρησιμοποιείται.

Για να στείλει κάποιο μήνυμα χρησιμοποιώντας αυτή τη μέθοδο, ο αποστολέας πρέπει να γνωρίζει το Δημόσιο κλειδί του παραλήπτη, το οποίο και θα χρησιμοποιήσει για να κρυπτογραφήσει το μήνυμα. Στη συνέχεια, ο παραλήπτης — και μόνο αυτός — μπορεί να αποκρυπτογραφήσει αυτό το μήνυμα με το Ιδιωτικό κλειδί του.

Πως δημιουργώ δημόσιο και ιδιωτικό κλειδί;

Για να δημιουργήσουμε ένα ζεύγος Ιδιωτικού και Δημοσίου Κλειδιού τρέχουμε την εντολή:

gpg --gen-key

ή

gpg2 --gen-key

αν χρησιμοποιούμε τη δεύτερη έκδοση του GnuPG, αντίστοιχα.

Και στις δύο περιπτώσεις το πρόγραμμα θα μας ρωτήσει ποιον αλγόριθμο κρυπτογραφίας επιθυμούμε να χρησιμοποιήσουμε:

gpg (GnuPG) 1.4.12; Copyright (C) 2012 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.

gpg: keyring ‘/home/eellak/.gnupg/secring.gpg’ created
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 για κρυπτογράφηση και υπογραφή (προεπιλογή)
  2. Αλγόριθμος DSA για υπογραφή και αλγόριθμος ElGamal για κρυπτογράφηση
  3. Αλγόριθμος DSA μόνο για υπογραφή
  4. Αλγόριθμος RSA μόνο για υπογραφή

Πρέπει να αναφέρουμε ότι στις προδιαγραφές του πρωτοκόλλου OpenPGP (RFC4880), ο αλγόριθμος RSA αναφέρεται ως αποδοκιμαστέος από το 2007 και δε συνίσταται η χρήση του, παρόλο που μέχρι σήμερα δεν έχει δημοσιευθεί παραβίαση του, ακόμα και σε μεγέθη κλειδιών 1024 bits. Η δεύτερη επιλογή (DSA and Elgamal) προσφέρει ασφάλεια αντίστοιχου επιπέδου με το RSA, αλλά πολύ γρηγορότερη δημιουργία κλειδιών και υπογραφών. Για λόγους συμβατότητας θα επιλέξουμε την προεπιλεγμένη πρόταση, RSA and RSA, πατώντας Enter. Ευελπιστούμε ότι μελλοντική έκδοση του GnuPG θα υποστηρίζει νεότερους αλγορίθμους Κρυπτογραφίας Ελλειπτικών Καμπυλών, όπως ο Curve25519 από τον Daniel J. Bernstein. Οπότε και θα πρέπει να ανανεωθεί αυτό το κείμενο.

Στη συνέχεια θα μας ζητηθεί να ορίσουμε το μέγεθος των κλειδιών που επιθυμούμε, μεταξύ των τιμών 1024 και 4096 bits:

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)

Ο δημιουργός του PGP (προκάτοχος του OpenPGP), Phil Zimmermann σε συνέντευξη του το 2013 προτείνει να χρησιμοποιείται μέγεθος κλειδιού τουλάχιστον 3072 bits για τον αλγόριθμο RSA, οπότε θα επιλέξουμε 4096, εκτός και αν η υπολογιστική ισχύς του συστήματος μας είναι ιδιαιτέρως ανεπαρκής οπότε και θα προτιμήσουμε 2048, που είναι η προεπιλογή.

Η επόμενη επιλογή μας αφορά το αν επιθυμούμε το κλειδί μας να έχει ημερομηνία λήξεως και αν ναι, σε πόσο διάστημα (σε ημέρες, εβδομάδες, μήνες ή έτη) να λήγει:

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)

Το πρόγραμμα προτείνει ως προεπιλογή το κλειδί να μη λήγει. Είναι προτιμότερο, όμως, να ορισθεί ημερομηνία λήξεως για επιπλέον προστασία σε περίπτωση υποκλοπής του κλειδιού ή απώλειας του ελέγχου του. Εξάλλου, η ημερομηνία λήξεως μπορεί να μεταβληθεί ανά πάσα στιγμή μετά τη δημιουργία του κλειδιού, όπως θα δούμε και στη σχετική ενότητα. Ορίζουμε το κλειδί μας να λήγει σε ένα χρόνο από την ημερομηνία έκδοσης του, πληκτρολογώντας 1y. Το πρόγραμμα θα εμφανίσει την ακριβή ημερομηνία και ώρα που θα λήξει το κλειδί και θα μας ζητήσει επιβεβαίωση.

Στη συνέχεια, θα μας ζητηθεί να δηλώσουμε το user ID που θα αποτελέσει το σύνολο των διακριτικών πληροφοριών του κλειδιού μας, στη μορφή: «Όνομα Επώνυμο (Σχόλιo) <διεύθυνση_email@domain.tld>». Κάθε πεδίο του user ID του κλειδιού συμπληρώνεται ξεχωριστά, όπως στο παράδειγμα:

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@duesseldorf.de>"

Real name: EELLAK Demo
Email address: info@eellak.gr
Comment: Demo key

You selected this USER-ID:
    "EELLAK Demo (Demo key) <info@eellak.gr>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

Μπορούμε να διορθώσουμε οποιοδήποτε πεδίο επιλέγοντας το αρχικό γράμμα — πχ. E για το e-mail. Επικυρώνουμε το user ID με O.

Το επόμενο βήμα είναι να ορίσουμε την φράση-κλειδί (passphrase) για το κλειδί μας. Το προγράμμα θα μας ζητάει να εισάγουμε τη φράση-κλειδί για το κλειδί μας κάθε φορά που το χρησιμοποιούμε και αποτελεί δικλείδα ασφαλείας σε περίπτωση υποκλοπής του Προσωπικού κλειδιού. Καλό είναι να αποτελείται από τρεις ή περισσότερες λέξεις και ιδανικά να είναι «μεταποιημένες» — πχ. να είναι σε «greeklish» και να περιέχουν πεζά, κεφαλαία, αριθμούς και ειδικά σύμβολα — ώστε να αποτρέπονται επιθέσεις με χρήση λεξικού.

Σε αυτό το στάδιο δημιουργείται το κλειδί μας και θα εμφανισθεί το παρακάτω μήνυμα, το οποίο μας προτρέπει να πληκτρολογούμε ή να μετακινούμε τον κέρσορα του ποντικιού όσο διαρκεί η δημιουργία του κλειδιού, για την ενίσχυση της εντροπίας του συστήματος:

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 284 more bytes)

Για καλύτερα αποτελέσματα προτείνεται η εγκατάσταση του haveged, που ενισχύει σημαντικά τη μηχανή παραγωγής «τυχαίων» αριθμών του λειτουργικού συστήματος. Στο Debian το haveged εγκαθίσταται με την εντολή apt-get install haveged.

Μόλις ολοκληρωθεί η δημιουργία του κλειδιού θα εμφανισθεί ένα μήνυμα σαν το παρακάτω, με πληροφορίες για το κλειδί μας:

gpg: key 60FCF76A 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
gpg: next trustdb check due at 2015-04-10
pub   4096R/60FCF76A 2014-04-10 [expires: 2015-04-10]
      Key fingerprint = 9F94 AFA0 05AF ABE8 09DE  DF2C 8AC7 422B 60FC F76A
uid                  EELLAK Demo (Demo key) <info@eellak.gr>
sub   4096R/9F187D57 2014-04-10 [expires: 2015-04-10]

Μπορούμε να εμφανίσουμε τα στοιχεία του κλειδιού που δημιουργήσαμε καθώς και των υπολοίπων κλειδιών που έχουμε εισαγάγει στο «μπρελόκ» μας με την εντολή:

gpg --list-keys

/home/eellak/.gnupg/pubring.gpg
-------------------------------
 pub   4096R/60FCF76A 2014-04-10 [expires: 2015-04-10]
 uid                  EELLAK Demo (Demo key) <info@eellak.gr>
 sub   4096R/9F187D57 2014-04-10 [expires: 2015-04-10]

Δημιουργία Πιστοποιητικού Ανάκλησης

Μετά τη δημιουργία του ζεύγους των κλειδιών μας, καλό είναι να δημιουργήσουμε ένα πιστοποιητικό ανάκλησης. Σε περίπτωση που ξεχάσουμε τη φράση-κλειδί ή το κλειδί μας έχει παραβιαστεί, μπορούμε να δημοσιεύσουμε αυτό το πιστοποιητικό ανάκλησης για να προειδοποιήσουμε άλλους να μη χρησιμοποιούν πλέον το ανακληθέν κλειδί μας για να επικοινωνούν μαζί μας.

Ένα ανακληθέν Δημόσιο κλειδί μπορεί να χρησιμοποιηθεί για την επαλήθευση των υπογραφών που έχουμε δημιουργήσει στο παρελθόν, αλλά δε μπορεί να χρησιμοποιηθεί για την κρυπτογράφηση μελλοντικών μηνυμάτων προς εμάς. Επίσης, δε μας εμποδίζει να αποκρυπτογραφούμε παλαιότερα μηνύματα που έχουμε λάβει, εφόσον έχουμε ακόμα τον έλεγχο του Ιδιωτικού κλειδιού μας.

Για να δημιουργήσουμε ένα Πιστοποιητικό Ανάκλησης για το κλειδί μας, τρέχουμε την εντολή:

gpg --output revoke.asc --gen-revoke KeySpecifier

Αντικαθιστώντας το KeySpecifier με κάποιο διακριτικό του κλειδιού μας, όπως το ονοματεπώνυμο ή το e-mail μας, ή το Key ID του κλειδιού μας. Για παράδειγμα, για το κλειδί που δημιουργήσαμε στην προηγούμενη παράγραφο:

gpg --output revoke.asc --gen-revoke info@eellak.gr

ή

gpg --output revoke.asc --gen-revoke 60FCF76A

Το πιστοποιητικό ανάκλησης θα αποθηκευθεί ως revoke.asc. Αν παραλείψουμε το όρισμα –output στις προηγούμενες εντολές το πιστοποιητικό ανάκλησης θα εμφανισθεί στην οθόνη χωρίς να αποθηκευθεί σε κάποιο αρχείο.

Είναι σημαντικό να δώσουμε ιδιαίτερη προσοχή στην ασφαλή αποθήκευση του πιστοποιητικού ανάκλησης, καθώς αν περάσει στην κυριότητα τρίτων και δημοσιευθεί ακυρώνει το Δημόσιο κλειδί, στο οποίο αναφέρεται. Προτείνεται να εκτυπωθεί και να αποθηκευθεί σε ασφαλές μέρος και σίγουρα όχι ψηφιακά σε υπολογιστή συνδεδεμένο στο Διαδίκτυο.

Επεξεργασία Κλειδιού

Για να επεξεργαστούμε κάποιο κλειδί στο «μπρελόκ» μας χρησιμοποιούμε την εντολή:

gpg --edit-key KeySpecifier

Θα μεταφερθούμε σε ένα κέλυφος αλληλεπίδρασης (interactive shell) με τίτλο gpg> στο οποίο εισάγουμε εντολές για να επεξεργαστούμε το κλειδί. Για προβολή των διαθέσιμων εντολών πληκτρολογούμε help.

Για παράδειγμα, για να αλλάξουμε την ημερομηνία λήξεως του κλειδιού που δημιουργήσαμε στο προηγούμενο παράδειγμα τρέχουμε gpg --edit-key info@eellak.gr και στο κέλυφος του gpg πληκτρολογούμε expire. Αφού ορίσουμε την επιθυμητή ημερομηνία, πληκτρολογούμε save για να αποθηκευθεί η αλλαγή. Για να βγούμε από το κέλυφος του gpg χωρίς αποθήκευση των αλλαγών πληκτρολογούμε quit και στη συνέχεια θα μας ζητηθεί επιβεβαίωση.

 Ανταλλαγή κλειδιών και επικοινωνία

Εξαγωγή και εισαγωγή κλειδιών

Όπως είδαμε και στην εισαγωγή αυτού του κειμένου, για να επικοινωνήσουμε με κάποιον χρησιμοποιώντας κρυπτογραφία πρέπει να έχουμε ανταλλάξει Δημόσια κλειδιά. Για να στείλουμε ή να δημοσιοποιήσουμε το Δημόσιο κλειδί μας πρέπει να το εξάγουμε από το «μπρελόκ» μας, με την εντολή:

gpg --output pubkey.gpg --export KeySpecifier

Αντικαθιστώντας — όπως και στην προηγούμενη ενότητα — το KeySpecifier με κάποιο διακριτικό του κλειδιού μας, όπως το ονοματεπώνυμο, το e-mail μας, ή το Key ID του κλειδιού μας. Το αρχείο pubkey.gpg που θα παραχθεί τρέχοντας την προηγούμενη εντολή είναι σε δυαδική μορφή και δε μπορεί να επικολληθεί σε κάποιο e-mail ή σε ανάρτηση σε ιστοσελίδα. Στην περίπτωση που επιθυμούμε κάτι τέτοιο μπορούμε να προσθέσουμε το όρισμα –armor και να πάρουμε ένα απλό αρχείο κειμένου ASCII. Καλό είναι να αλλαχθεί και η κατάληξη του αρχείου σε .asc σε αυτή την περίπτωση. Αν θέλουμε μόνο να επικολλήσουμε το κλειδί μπορούμε να παραλείψουμε το όρισμα –output file για να εμφανισθεί το κλειδί μας στην οθόνη, χωρίς να αποθηκευθεί σε αρχείο. Για το κλειδί του προηγούμενου παραδείγματος έχουμε:

gpg --armor --export info@eellak.gr
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.12 (GNU/Linux)

[…]
-----END PGP PUBLIC KEY BLOCK-----

Οι «τυχαίοι» χαρακτήρες που εμφανίζονται στην θέση του […] αποτελούν το κλειδί μας. Για την επισύναψη αντιγράφουμε όλο το κείμενο, μαζί με τις γραμμές —–BEGIN… και —–END… .

Για να εισάγουμε ένα κλειδί — σε δυαδική μορφή ή σε κείμενο ASCII — στο «μπρελόκ» μας τρέχουμε την εντολή:

gpg --import pubkey.gpg

Μετά την εισαγωγή, καλό είναι να γίνει επαλήθευση του ψηφιακού αποτυπώματος του κλειδιού. Στη συνέχεια μπορούμε να υπογράψουμε το κλειδί για να επικυρώσουμε τη γνησιότητα του, όπως είδαμε και σε προηγούμενη ενότητα. Για να εμφανίσουμε το ψηφιακό αποτύπωμα ενός κλειδιού τρέχουμε:

gpg --fingerprint KeySpecifier

Για να υπογράψουμε ένα κλειδί πρέπει να το επεξεργαστούμε. Στο κέλυφος του gpg μπορούμε επίσης να εμφανίσουμε το αποτύπωμα του κλειδιού με την εντολή fpr. Για να υπογράψουμε το κλειδί πληκτρολογούμε sign και αφού εμφανιστούν τα στοιχεία του κλειδιού θα μας ζητηθεί επιβεβαίωση. Κάθε κλειδί περιλαμβάνει και υπογραφή του εαυτού του. Για να επαληθεύσουμε τη δική μας υπογραφή πληκτρολογούμε check. Για το κλειδί του παραδείγματος μας το πρόγραμμα θα εμφανίσει τα εξής:

gpg> check
uid  EELLAK Demo (Demo key) <info@eellak.gr>
sig!       60FCF76A 2014-04-10  [self-signature]
sig!       BB7576AC 1999-06-04  Alice (Judge) <alice@cyb.org>

Ένα σύντομο επεξηγηματικό φυλλάδιο για το GnuPg μπορείτε να δείτε εδώ (.pdf)

One thought on “Μια μικρή εισαγωγή στο GnuPG

Leave a Comment