ΕΕΛ/ΛΑΚ - Λίστες Ταχυδρομείου

Εισαγωγή στο OpenPGP και το Key Signing Party(τελικό draft)

  • Subject: Εισαγωγή στο OpenPGP και το Key Signing Party(τελικό draft)
  • From: "Theodoros G. Karounos" <karounos [ at ] eellak [ dot ] gr>
  • Date: Tue, 15 Apr 2014 18:20:37 +0300
 Δείτε το "Εισαγωγή στο OpenPGP και το Key Signing Party" και στείλτε
προτάσεις και σχόλια στον Μανόλη( manolis [ at ] eellak [ dot ] gr ) που το έχει συντάξει.

Θ.Καρούνος



-- 
http://www.eellak.gr/, http://mycontent.ellak.gr/,
http://www.creativecommons.gr/, http://mathe.ellak.gr/,
http://fablabathens.gr/
<!DOCTYPE html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8">
	<title>Εισαγωγή στο OpenPGP και το key signing party</title>

	<style>
		body {
			width: 700px;
			margin: 0 auto;
		}

		pre {
			white-space: pre-wrap;
		}

		p {
			line-height: 21px;
		}

		h4 {
			text-align: center;
		}
	</style>
</head>

<body>
	<h1>Εισαγωγή στο OpenPGP και το Key Signing Party</h1>

	<h4><a href="http://www.ellak.gr/";>Εταιρεία Ελεύθερου Λογισμικού / Λογισμικού Ανοικτού Κώδικα</a></h4>

	<h4>Απρίλιος 2014</h4>

	<h2 id="intro">1. Εισαγωγή &dash; Βασικές έννοιες</h2>

	<h3>1.1 Κρυπτογραφία Δημoσίου Κλειδιού</h3>

	<p>Οι κλασικές μέθοδοι κρυπτογραφίας χρησιμοποιούν ένα μόνο κλειδί για την κρυπτογράφηση και αποκρυπτογράφηση. Ο αποστολέας ενός μηνύματος χρησιμοποιεί αυτό το κλειδί για να κρυπτογραφήσει το μήνυμα και ο παραλήπτης του μηνύματος χρειάζεται το ίδιο κλειδί για να μπορέσει να το αποκρυπτογραφήσει και να το διαβάσει. Το πρόβλημα που εγείρει αυτή η μέθοδος κρυπτογραφίας είναι η παράδοση του κλειδιού στον παραλήπτη, χωρίς να υποκλαπεί από τρίτους. Πρόβλημα που εντείνεται όταν πρόκειται για επικοινωνίες σε διακρατική ή διηπειρωτική κλίμακα.</p>

	<p>Η <a href="http://el.wikipedia.org/wiki/%CE%9A%CF%81%CF%85%CF%80%CF%84%CE%BF%CE%B3%CF%81%CE%AC%CF%86%CE%B7%CF%83%CE%B7_%CE%94%CE%B7%CE%BC%CF%8C%CF%83%CE%B9%CE%BF%CF%85_%CE%9A%CE%BB%CE%B5%CE%B9%CE%B4%CE%B9%CE%BF%CF%8D";><em>Κρυπτογραφία Δημoσίου Κλειδιού</em></a> δημιουργήθηκε για να λύσει αυτό το πρόβλημα. Αντί για ένα μόνο κλειδί, σε αυτή τη μέθοδο χρησιμοποιούνται δύο, το Δημόσιο και το Ιδιωτικό. Το Δημόσιο κλειδί μπορεί να διαμοιραστεί με οποιοδήποτε μέσο, είτε με φυσική παρουσία &mdash; για παράδειγμα μέσω αντιγραφής σε USB flash stick &mdash; είτε ψηφιακά, όπως με αποστολή μέσω e-mail ή ανάρτηση σε κάποια ιστοσελίδα ή μέσο κοινωνικής δικτύωσης.</p>

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

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

	<h3>1.2 Ψηφιακές Υπογραφές</h3>

	<p>Σε πολλές περιπτώσεις χρειάζεται μόνο η επιβεβαίωση ότι ένα μήνυμα έχει δημιουργηθεί όντως από τον αποστολέα και το περιεχόμενο του μηνύματος δεν έχει αλλοιωθεί από τρίτους, χωρίς όμως να απαιτείται το μήνυμα αυτό καθαυτό να σταλλεί κρυπτογραφημένο. Για παράδειγμα, μία δημοσίευση σε μία ιστοσελίδα με αποδέκτη το ευρύ κοινό μπορεί να επιβεβαιωθεί ότι είναι αληθής και o συγγραφέας της είναι όντως αυτός που την υπογράφει.</p>

	<p>Για το σκοπό αυτό εφευρέθηκε η έννοια της <em>Ψηφιακής Υπογραφής</em> με τη χρήση της Κρυπτογραφίας Δημοσίου Κλειδιού. Ο αποστολέας &laquo;υπογράφει&raquo; το μήνυμα του χρησιμοποιώντας το Ιδιωτικό κλειδί του και η ψηφιακή αυτή υπογραφή ενσωματώνεται στο ίδιο το μήνυμα. Στη συνέχεια, οποιοσδήποτε διαθέτει το Δημόσιο κλειδί του αποστολέα μπορεί να επιβεβαιώσει την αυθεντικότητα του μηνύματος.</p>

	<h3 id="web-of-trust">1.3 Κύκλος Εμπιστευτικότητας</h3>

	<p>Μία αδυναμία που παρουσιάζει η μέθοδος Κρυπτογραφίας Δημοσίου Κλειδιού έχει να κάνει με τη δημοσιοποίηση των Δημοσίων κλειδιών. Ουσιαστικά, οποιοσδήποτε μπορεί να δημιουργήσει ζεύγη ψευδών Ιδιωτικών και Δημοσίων κλειδιών με το όνομα κάποιου άλλου. Δημοσιεύοντας αυτό το ψευδές Δημόσιο Κλειδί, ο επιτιθέμενος μπορεί να προσποιηθεί την ταυτότητα του θύματος και να παραπλανήσει τρίτους ή να αποκτήσει πρόσβαση σε απόρρητα μηνύματα που αφορούν το θύμα.</p>

	<p>Η λύση που υιοθετήθηκε από το πρωτόκολλο <a href="http://www.openpgp.org/";>OpenPGP</a> (ανοικτό πρωτόκολλο Κρυπτογραφίας Δημοσίου Κλειδιού, <a href="http://www.ietf.org/rfc/rfc4880.txt";>RFC4880</a>) για αυτό το πρόβλημα είναι η ψηφιακή υπογραφή των ίδιων των κλειδιών. Ένα Δημόσιο κλειδί μπορεί να υπογραφεί ψηφιακά από άλλους και η υπογραφή αυτή πιστοποιεί ότι το κλειδί αυτό ανήκει όντως στον φερόμενο ως ιδιοκτήτη του, ή πιο σωστά χρησιμοποιείται από το User Identification (UID) του.</p>

	<p>Ένα κλειδί μπορεί να θεωρηθεί ως αυθεντικό όταν γνωρίζουμε ότι όντως ανήκει στο άτομο στο οποίο αναφέρεται. Για παράδειγμα, αν προηγηθεί προσωπική συνάντηση με τον ιδιοκτήτη του κλειδιού και επιβεβαίωση της ταυτότητάς του με την παρουσίαση κάποιου επικυρωμένου εγγράφου με φωτογραφία. Ένας άλλος τρόπος ταυτοποίησης είναι να έχει υπογράψει το Δημόσιο κλειδί που μας ενδιαφέρει ένα τρίτο πρόσωπο της εμπιστοσύνης μας, του οποίου το κλειδί γνωρίζουμε ότι είναι αυθεντικό. Όσο περισσότερες ψηφιακές υπογραφές έχει συλλέξει ένα κλειδί, τόσο περισσότερες πιθανότητες έχει να είναι αυθεντικό &mdash; εφόσον, βέβαια, και οι υπογραφές αυτές θεωρούνται αυθεντικές.</p>
	<p>Σε κάθε περίπτωση, πάντως, πριν εμπιστευτούμε ένα Δημόσιο κλειδί καλό είναι να ελέγχουμε την ακεραιότητα του συγκρίνοντας το ψηφιακό αποτύπωμα (digital fingerprint) του με αντίγραφο του από μία έμπιστη πηγή πριν το θεωρήσουμε αξιόπιστο. Για τα ψηφιακά αποτυπώματα μπορείτε να διαβάσετε περισσότερα στη σχετική <a href="#import-export">ενότητα</a>. Ένα παράδειγμα ψηφιακού αποτυπώματος: <code>9F94 AFA0 05AF ABE8 09DE  DF2C 8AC7 422B 60FC F76A</code>.</p>
	<p>Υπογράφοντας Δημόσια κλειδιά άλλων &mdash; μετά την επαλήθευση τους, φυσικά &mdash; συμβάλλουμε στη δημιουργία ενός <em>Κύκλου Εμπιστευτικότητας</em> (ή <em>Web of Trust</em>), και όσο &laquo;μεγαλώνει&raquo; αυτός ο κύκλος τόσο περιορίζεται και το πρόβλημα της κυκλοφορίας πλαστών κλειδιών.</p>

	<h2>2. Το GNU Privacy Guard (GnuPG)</h2>

	<h3>2.1 Εισαγωγή</h3>

	<p>Το <a href="http://gnupg.org/";>GNU Privacy Guard</a>, ή GnuPG εν συντομία, είναι μία υλοποίηση του πρωτοκόλλου OpenPGP, υπό την αιγίδα του <a href="http://www.fsf.org/";>Free Software Foundation</a> (FSF) στο πλαίσιο της &laquo;οικογένειας&raquo; ανοικτού λογισμικού, <a href="http://www.gnu.org/";>GNU</a>. Μέχρι και την ημερομηνία συγγραφής αυτού του άρθρου (Απρίλιος 2014) το GnuPG θεωρείται ως η πιο ολοκληρωμένη υλοποίηση του OpenPGP με λογισμικό ανοικτού κώδικα. Η άδεια χρήσης του προγράμματος είναι η <a href="http://el.wikipedia.org/wiki/%CE%93%CE%B5%CE%BD%CE%B9%CE%BA%CE%AE_%CE%86%CE%B4%CE%B5%CE%B9%CE%B1_%CE%94%CE%B7%CE%BC%CF%8C%CF%83%CE%B9%CE%B1%CF%82_%CE%A7%CF%81%CE%AE%CF%83%CE%B7%CF%82_GNU";>GNU Public License</a> (GPL) έκδοση 3. Μία άλλη υλοποίηση του OpenPGP αποτελεί το <a href="http://www.netpgp.com/";>NetPGP</a> από το <a href="http://netbsd.org/";>NetBSD Project</a>, το οποίο διανέμεται με την πιο ευέλικτη άδεια χρήσης <a href="http://en.wikipedia.org/wiki/BSD_licenses#2-clause_license_.28.22Simplified_BSD_License.22_or_.22FreeBSD_License.22.29";>BSD</a> (στην έκδοση 2 παραγράφων).</p>

	<p>Το GnuPG είναι διαθέσιμο για εγκατάσταση στις περισσότερες διανομές GNU/Linux και στα λειτουργικά συστήματα BSD. Διατίθενται επίσης εκδόσεις για <a href="http://gpg4win.org/";>Windows</a>, <a href="https://gpgtools.org/";>OS X</a>, <a href="https://play.google.com/store/apps/details?id=info.guardianproject.gpg";>Android</a> και <a href="https://itunes.apple.com/en/app/opengp/id414003727";>iOS</a> με φιλικό προς το χρήστη περιβάλλον εργασίας, προσαρμοσμένο στο κάθε λειτουργικό. Στα παραδείγματα που ακολουθούν αναφερόμαστε στην έκδοση για τη διανομή GNU/Linux, <a href="http://debian.org";>Debian</a>.</p>

	<h3>2.2 Εγκατάσταση</h3>

	<p>Στο Debian GNU/Linux το GnuPG είναι <a href="https://packages.debian.org/search?keywords=gnupg&searchon=names&suite=all&section=all";>διαθέσιμο</a> από τα επίσημα αποθετήρια (package repositories) της διανομής και αποτελεί μέρος της βασικής εγκατάστασης, καθώς χρησιμοποιείται από το σύστημα για την επαλήθευση των πακέτων λογισμικού &mdash; από την <a href="https://lists.debian.org/debian-devel/2004/06/msg01499.html";>έκδοση 0.6 του APT</a> και μετά. Μπορεί, επίσης, να εγκατασταθεί με την εντολή: <code>apt-get install gnupg</code>.</p>

	<p>Μέχρι τώρα, ως <em>gnupg</em> αναφερόμαστε στην πρώτη έκδοση του προγράμματος. Η δεύτερη έκδοση του GnuPG (version 2.x) κυκλοφορεί παράλληλα με την πρώτη, καθώς περιέχει νέες δυνατότητες αλλά και σημαντικές αλλαγές στην αρχιτεκτονική του προγράμματος. Κατά συνέπεια, δημιουργεί ασυμβατότητες με την πρώτη έκδοση και δυσκολία στη μεταφορά της σε λειτουργικά συστήματα που δε βασίζονται στο Unix, όπως τα Windows. Στο Debian είναι διαθέσιμη με το πακέτο <a href="https://packages.debian.org/search?keywords=gnupg2&searchon=names&suite=all&section=all";>gnupg2</a> και μπορεί να εγκατασταθεί παράλληλα με το <em>gnupg</em> με την εντολή: <code>apt-get install gnupg2</code>.</p>

	<p><em><strong>Σημείωση:</strong> η εντολή apt-get μπορεί να εκτελείται μόνο από το χρήστη root ή με τη βοήθεια του <a href="http://www.sudo.ws/";>sudo</a> από χρήστες με λιγότερα δικαιώματα συστήματος.</em></p>

	<h2>3. Δημιουργία Κλειδιών και Πιστοποιητικού Ανάκλησης</h2>

	<h3>3.1 Δημιουργία ζεύγους Ιδιωτικού και Δημοσίου κλειδιού</h3>

	<p>Για να δημιουργήσουμε ένα ζεύγος Ιδιωτικού και Δημοσίου Κλειδιού τρέχουμε την εντολή: <pre>gpg --gen-key</pre> ή <pre>gpg2 --gen-key</pre> αν χρησιμοποιούμε τη δεύτερη έκδοση του GnuPG, αντίστοιχα.</p>
	
	<p>Και στις δύο περιπτώσεις το πρόγραμμα θα μας ρωτήσει ποιον αλγόριθμο κρυπτογραφίας επιθυμούμε να χρησιμοποιήσουμε:

	<pre>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 &lsquo;/home/eellak/.gnupg/secring.gpg&rsquo; 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?</pre>
	</p>

	<p>Οι επιλογές μας είναι:</p>

	<ol>
		<li>Αλγόριθμος RSA για κρυπτογράφηση και υπογραφή (προεπιλογή)</li>
		<li>Αλγόριθμος DSA για υπογραφή και αλγόριθμος ElGamal για κρυπτογράφηση</li>
		<li>Αλγόριθμος DSA μόνο για υπογραφή</li>
		<li>Αλγόριθμος RSA μόνο για υπογραφή</li>
	</ol>

	<p>Πρέπει να αναφέρουμε ότι στις προδιαγραφές του πρωτοκόλλου OpenPGP (RFC4880) αναφέρεται ο αλγόριθμος <a href="http://en.wikipedia.org/wiki/RSA_(cryptosystem)">RSA</a> ως <a href="https://tools.ietf.org/html/rfc4880#section-13.5";>αποδοκιμαστέος</a> από το 2007 και δε συνίσταται η χρήση του, παρόλο που μέχρι σήμερα δεν έχει δημοσιευθεί παραβίαση του, ακόμα και σε μεγέθη κλειδιών 1024 bits. Η δεύτερη επιλογή (<em>DSA and Elgamal</em>) προσφέρει ασφάλεια αντίστοιχου επιπέδου με το RSA, αλλά πολύ γρηγορότερη δημιουργία κλειδιών και υπογραφών. Για λόγους συμβατότητας θα επιλέξουμε την προεπιλεγμένη πρόταση, <em>RSA and RSA</em>, πατώντας <em>Enter</em>. Ευελπιστούμε ότι μελλοντική έκδοση του GnuPG θα υποστηρίζει νεότερους αλγορίθμους <a href="http://el.wikipedia.org/wiki/%CE%9A%CF%81%CF%85%CF%80%CF%84%CE%BF%CE%B3%CF%81%CE%B1%CF%86%CE%AF%CE%B1_%CE%B5%CE%BB%CE%BB%CE%B5%CE%B9%CF%80%CF%84%CE%B9%CE%BA%CF%8E%CE%BD_%CE%BA%CE%B1%CE%BC%CF%80%CF%85%CE%BB%CF%8E%CE%BD";>Κρυπτογραφίας Ελλειπτικών Καμπυλών</a>, όπως ο <a href="http://en.wikipedia.org/wiki/Curve25519";>Curve25519</a> από τον <a href="http://cr.yp.to/djb.html";>Daniel J. Bernstein</a>. Οπότε και θα πρέπει να ανανεωθεί αυτό το κείμενο.</p>
	
	<p>Στη συνέχεια θα μας ζητηθεί να ορίσουμε το μέγεθος των κλειδιών που επιθυμούμε, μεταξύ των τιμών 1024 και 4096 bits:</p>

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

	<p>Ο δημιουργός του <a href="http://en.wikipedia.org/wiki/Pretty_Good_Privacy";>PGP</a> (προκάτοχος του OpenPGP), Phil Zimmermann σε <a href="http://www.heise.de/ix/artikel/Passivitaet-heisst-sich-abzufinden-1981718.html";>συνέντευξη του</a> το 2013 προτείνει να χρησιμοποιείται μέγεθος κλειδιού τουλάχιστον 3072 bits για τον αλγόριθμο RSA, οπότε θα επιλέξουμε <em>4096</em>, εκτός και αν η υπολογιστική ισχύς του συστήματος μας είναι ιδιαιτέρως ανεπαρκής οπότε και θα προτιμήσουμε <em>2048</em>, που είναι η προεπιλογή.</p>

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

	<p>
		<pre>Please specify how long the key should be valid.
         0 = key does not expire
      &lt;n&gt;  = key expires in n days
      &lt;n&gt;w = key expires in n weeks
      &lt;n&gt;m = key expires in n months
      &lt;n&gt;y = key expires in n years
Key is valid for? (0)</pre>
	</p>

	<p>Το πρόγραμμα προτείνει ως προεπιλογή το κλειδί να μη λήγει. Είναι προτιμότερο, όμως, να ορισθεί ημερομηνία λήξεως για επιπλέον προστασία σε περίπτωση υποκλοπής του κλειδιού ή απώλειας του ελέγχου του. Εξάλλου, η ημερομηνία λήξεως μπορεί να μεταβληθεί μετά τη δημιουργία του κλειδιού, όπως θα δούμε στη σχετική <a href="#edit-key">ενότητα</a>. Ορίζουμε το κλειδί μας να λήξει σε ένα χρόνο από την ημερομηνία έκδοσης του, πληκτρολογώντας <em>1y</em>. Το πρόγραμμα θα μας δώσει την ακριβή ημερομηνία και ώρα που θα λήξει το κλειδί και θα ζητήσει επιβεβαίωση.</p>

	<p>Στη συνέχεια, θα μας ζητηθεί να δηλώσουμε το user ID που θα αποτελέσει το σύνολο των διακριτικών του κλειδιού μας, στη μορφή: <em>&quot;Όνομα Επώνυμο (Σχόλιo) <διεύθυνση_email [ at ] domain [ dot ] tld>&quot;</em>. Κάθε πεδίο (ονοματεπώνυμο, σχόλιο και διεύθυνση e-mail) συμπληρώνεται ξεχωριστά, όπως στο παράδειγμα:</p>
	
	<p>
		<pre>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) &lt;heinrichh [ at ] duesseldorf [ dot ] de&gt;"

Real name: <em>EELLAK Demo</em>
Email address: <em>info [ at ] eellak [ dot ] gr</em>
Comment: <em>Demo key</em>

You selected this USER-ID:
    "EELLAK Demo (Demo key) &lt;info [ at ] eellak [ dot ] gr&gt;"

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

	<p>Μπορούμε να διορθώσουμε οποιοδήποτε πεδίο επιλέγοντας το αρχικό γράμμα &mdash; πχ. <em>E</em> για το e-mail &mdash; ή να επικυρώσουμε το user ID με <em>O</em>.</p>

	<p>Το επόμενο βήμα είναι να ορίσουμε την φράση-κλειδί (passphrase) για το κλειδί μας. Η φράση-κλειδί θα μας ζητείται σε κάθε χρήση του κλειδιού και αποτελεί δικλείδα ασφαλείας σε περίπτωση υποκλοπής του Προσωπικού κλειδιού. Καλό είναι να αποτελείται από τρεις ή περισσότερες λέξεις και ιδανικά να είναι &laquo;μεταποιημένες&raquo; &mdash; πχ. να είναι σε &laquo;greeklish&raquo; και να περιέχουν πεζά, κεφαλαία και ειδικά σύμβολα &mdash; ώστε να αποτρέπονται <a href="http://en.wikipedia.org/wiki/Dictionary_attack";>επιθέσεις με χρήση λεξικού</a>.</p>

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

	<p><pre>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)</pre></p>

	<p>Για καλύτερα αποτελέσματα προτείνεται η εγκατάσταση του <a href="http://www.issihosts.com/haveged/";>haveged</a>, που ενισχύει σημαντικά τη μηχανή παραγωγής &laquo;τυχαίων&raquo; αριθμών του λειτουργικού συστήματος. Στο Debian το haveged εγκαθίσταται με την εντολή <code>apt-get install haveged</code>.</p>

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

	<p><pre>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) &lt;info [ at ] eellak [ dot ] gr&gt;
sub   4096R/9F187D57 2014-04-10 [expires: 2015-04-10]</pre></p>

	<p>Μπορούμε να εμφανίσουμε τα στοιχεία του κλειδιού που δημιουργήσαμε καθώς και των υπολοίπων κλειδιών που έχουμε εισαγάγει στο &laquo;μπρελόκ&raquo; μας με την εντολή: <code>gpg --list-keys</code>:</p>

	<p><pre>/home/eellak/.gnupg/pubring.gpg
-------------------------------
pub   4096R/60FCF76A 2014-04-10 [expires: 2015-04-10]
uid                  EELLAK Demo (Demo key) &lt;info [ at ] eellak [ dot ] gr&gt;
sub   4096R/9F187D57 2014-04-10 [expires: 2015-04-10]</pre></p>

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

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

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

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

	<p><pre>gpg --output revoke.asc --gen-revoke <em>KeySpecifier</em></pre></p>

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

	<p><pre>gpg --output revoke.asc --gen-revoke info [ at ] eellak [ dot ] gr</pre></p>

	<p>ή</p>

	<p><pre>gpg --output revoke.asc --gen-revoke 60FCF76A</pre></p>

	<p>Το πιστοποιητικό ανάκλησης θα αποθηκευθεί ως <em>revoke.asc</em>. Αν παραλείψουμε το όρισμα <em>--output</em> στην προηγούμενη εντολή το πιστοποιητικό θα εμφανισθεί στην οθόνη χωρίς να αποθηκευθεί σε κάποιο αρχείο.</p>

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

	<h3 id="edit-key">3.3 Επεξεργασία Κλειδιού</h3>

	<p>Για να επεξεργαστούμε κάποιο κλειδί στο &laquo;μπρελόκ&raquo; μας χρησιμοποιούμε την εντολή:</p>

	<p><pre>gpg --edit-key <em>KeySpecifier</em></pre></p>

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

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

	<h2>4. Ανταλλαγή κλειδιών και επικοινωνία</h2>

	<h3 id="import-export">4.1 Εξαγωγή και εισαγωγή κλειδιών</h3>

	<p>Όπως είδαμε και στην εισαγωγή αυτού του κειμένου, για να επικοινωνήσουμε με κάποιον χρησιμοποιώντας κρυπτογραφία πρέπει να έχουμε ανταλλάξει Δημόσια κλειδιά. Για να στείλουμε ή να δημοσιοποιήσουμε το Δημόσιο κλειδί μας πρέπει να το εξάγουμε από το &laquo;μπρελόκ&raquo; μας, με την εντολή:</p>

	<p><pre>gpg --output pubkey.gpg --export <em>KeySpecifier</em></pre></p>

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

	<p><pre>gpg --armor --export info [ at ] eellak [ dot ] gr
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.12 (GNU/Linux)

<em>[&hellip;]</em>
-----END PGP PUBLIC KEY BLOCK-----</pre></p>

	<p>Οι τυχαίοι χαρακτήρες που εμφανίζονται στην θέση του <em>[...]</em> αποτελούν το κλειδί μας. Επισυνάπτουμε όλο το κείμενο, μαζί με τις γραμμές <em>-----BEGIN&hellip;</em> και <em>-----END&hellip;</em> .</p>

	<p>Για να εισάγουμε ένα κλειδί &mdash; σε δυαδική μορφή ή σε κείμενο ASCII &mdash; στο &laquo;μπρελόκ&raquo; μας τρέχουμε την εντολή:</p>

	<p><pre>gpg --import pubkey.gpg</pre></p>

	<p>Μετά την εισαγωγή, καλό είναι να γίνει επαλήθευση του ψηφιακού αποτυπώματος του κλειδιού. Στη συνέχεια μπορούμε να υπογράψουμε το κλειδί για να επικυρώσουμε τη γνησιότητα του, όπως είδαμε και σε προηγούμενη <a href="#web-of-trust">ενότητα</a>. Για να εμφανίσουμε το ψηφιακό αποτύπωμα ενός κλειδιού τρέχουμε:</p>

	<p><pre>gpg --fingerprint <em>KeySpecifier</em></pre></p>

	<p>Για να υπογράψουμε ένα κλειδί πρέπει να το <a href="#edit-key">επεξεργαστούμε</a>. Στο κέλυφος του gpg μπορούμε επίσης να εμφανίσουμε το αποτύπωμα του κλειδιού με την εντολή <code>fpr</code>. Για να υπογράψουμε το κλειδί πληκτρολογούμε <code>sign</code> και αφού εμφανιστούν τα στοιχεία του κλειδιού θα μας ζητηθεί επιβεβαίωση. Κάθε κλειδί περιλαμβάνει και υπογραφή του εαυτού του. Για να επαληθεύσουμε τη δική μας υπογραφή πληκτρολογούμε <code>check</code>. Για το κλειδί του παραδείγματος μας το πρόγραμμα θα εμφανίσει τα εξής:</p>

	<p><pre>gpg&gt; check
uid  EELLAK Demo (Demo key) &lt;info [ at ] eellak [ dot ] gr&gt;
sig!       60FCF76A 2014-04-10  [self-signature]
sig!       BB7576AC 1999-06-04  Alice (Judge) &lt;alice [ at ] cyb [ dot ] org&gt;</pre></p>

	<h3>4.2 Κρυπτογράφηση και αποκρυπτογράφηση εγγράφων και μηνυμάτων</h3>

	<p>Στην Κρυπτογραφία Δημοσίου Κλειδιού, όπως έχουμε δεί, κρυπτογραφούμε ένα μήνυμα ή έγγραφο χρησιμοποιώντας το Δημόσιο κλειδί του παραλήπτη και αποκρυπτογραφούμε με το Ιδιωτικό κλειδί μας.</p>

	<p>Για να κρυπτογραφήσουμε το έγγραφο <em>unencrypted</em> με παραλήπτη τον ιδιοκτήτη του κλειδιού των προηγούμενων παραδειγμάτων τρέχουμε την εντολή:</p>

	<p><pre>gpg --output encrypted.gpg --encrypt --recipient info [ at ] eellak [ dot ] gr unencrypted</pre></p>

	<p>Το αρχείο <em>encrypted.gpg</em> που θα παραχθεί μπορεί να αποκρυπτογραφηθεί μόνο με το Ιδιωτικό κλειδί του παραλήπτη (<em>info [ at ] eellak [ dot ] gr</em>). Για περισσότερη ασφάλεια το αρχείο συμπιέζεται, αυτόματα, μαζί με την κρυπτογράφηση.</p>
	
	<p>Μπορούμε να κρυπτογραφήσουμε το αρχείο για περισσότερους παραλήπτες προσθέτοντας όρισμα της μορφής <code>--recipient alice [ at ] cyb [ dot ] org</code> για κάθε παραλήπτη. Στην περίπτωση που επιθυμούμε να έχουμε τη δυνατότητα να αποκρυπτογραφήσουμε και εμείς (<em>ο αποστολέας</em> στην προκειμένη περίπτωση) το αρχείο θα πρέπει να προσθέσουμε και το δικό μας Δημόσιο κλειδί ώς όρισμα <code>--recipient</code>.</p>

	<p>Αντίστοιχα, για να αποκρυπτογραφήσουμε το αρχείο <em>encrypted.gpg</em> που έχει κρυπτογραφηθεί με το Δημόσιο κλειδί μας τρέχουμε:</p>

	<p><pre>gpg --output unencrypted --decrypt encrypted.gpg</pre></p>

	<p>Και στις δύο περιπτώσεις μπορούμε να παραλείψουμε το όρισμα <code>--output</code>, οπότε αντί για αποθήκευση σε αρχείο τα περιεχόμενα του εγγράφου θα εμφανιστούν στην οθόνη. Επίσης, μπορούμε να παραλείψουμε το αρχείο εισαγωγής και το πρόγραμμα θα δεχθεί δεδομένα από την τυπική είσοδο (standard input). Για παράδειγμα, χρησιμοποιώντας τη δυνατότητα <a href="http://en.wikipedia.org/wiki/Pipeline_(Unix):">pipeline</a> των συστημάτων που βασίζονται σε Unix:</p>

	<p><pre>echo "This is unencrypted" | gpg --encrypt --recipient info [ at ] eellak [ dot ] gr | gpg --decrypt</pre></p>

	<p>Η προηγούμενη εντολή θα επιστρέψει το μήνυμα <em>This is unencrypted</em>, αφού πρώτα το κρυπτογραφήσει και, στη συνέχεια αποκρυπτογραφήσει, ζητώντας να εισάγουμε την φράση-κλειδί.</p>

	<p>Το GnuPG υποστηρίζει, επίσης, την κρυπτογράφηση εγγράφων με <a href="http://el.wikipedia.org/wiki/%CE%9A%CF%81%CF%85%CF%80%CF%84%CE%BF%CE%B3%CF%81%CE%AC%CF%86%CE%B7%CF%83%CE%B7_%CE%A3%CF%85%CE%BC%CE%BC%CE%B5%CF%84%CF%81%CE%B9%CE%BA%CE%BF%CF%8D_%CE%9A%CE%BB%CE%B5%CE%B9%CE%B4%CE%B9%CE%BF%CF%8D";>Συμμετρικό Κλειδί</a> χρησιμοποιώντας το όρισμα <code>--symmetric</code>, για παράδειγμα:</p>

	<p><pre>gpg --encrypt --symmetric --output encrypted.gpg unencrypted</pre></p>

	<p>Θα μας ζητηθεί να δηλώσουμε φράση-κλειδί για την κρυπτογράφηση, η οποία φράση-κλειδί επίσης αποκρυπτογραφεί το έγγραφο. Ο προεπιλεγμένος αλγόριθμος για κρυπτογραφία <em>Συμμετρικού Κλειδιού</em> είναι ο <a href="http://en.wikipedia.org/wiki/CAST-128";>CAST-128</a> (γνωστός και ως CAST5), αλλά μπορούμε να επιλέξουμε κάποιον άλλο προσθέτοντας το όρισμα <code>--cipher-algo</code>, συνοδευόμενο από το όνομα του αλγορίθμου. Τρέχοντας <code>gpg --version</code> μπορούμε να δούμε τους αλγορίθμους κρυπτογράφησης που υποστηρίζει η έκδοση του GnuPG που χρησιμοποιούμε. Για παράδειγμα, για να κρυπτογραφήσουμε το αρχείο <em>unencrypted</em> με τον αλγόριθμο <a href="http://en.wikipedia.org/wiki/Blowfish_(cipher)">Blowfish</a>:</p>

	<p><pre>gpg --encrypt --output encrypted_with_blowfish.gpg --symmetric --cipher-algo BLOWFISH unencrypted</pre></p>

	<h3>4.3 Υπογραφή μηνυμάτων και εγγράφων</h3>

	<p>Για να πιστοποιήσουμε την αυθεντικότητα ενός μηνύματος ή εγγράφου και την ακεραιότητα του περιεχομένου τους μπορούμε να χρησιμοποιήσουμε την ψηφιακή υπογραφή.</p>
	<p>Η υπογραφή και η επαλήθευση της υπογραφής γίνεται πάλι με τη χρήση ζεύγους Ιδιωτικού/Δημοσίου κλειδιού, αλλά με διαφορετικό τρόπο σε σχέση με την κρυπτογράφηση. Υπογράφουμε ένα μήνυμα ή έγγραφο χρησιμοποιώντας το Ιδιωτικό μας κλειδί και η υπογραφή αυτή μπορεί να επαληθευθεί από τρίτους με το Δημόσιο κλειδί μας. Στην περίπτωση που το περιεχόμενο του μηνύματος, που έχουμε υπογράψει, έχει μεταβληθεί με οποιοδήποτε τρόπο, η επαλήθευση της υπογραφής θα αποτύχει.</p>
	
	<p>Μία συνέπεια της χρήσης ψηφιακών υπογραφών είναι ότι είναι δύσκολο να αρνηθούμε ότι έχουμε υπογράψει εμείς κάτι, ψηφιακά. Σε αντίθετη περίπτωση, ενδέχεται το κλειδί μας να έχει παραβιαστεί.</p>

	<p>Το GnuPG μας δίνει την δυνατότητα να υπογράψουμε έγγραφα με τρεις τρόπους, ανάλογα με τη χρήση που επιθυμούμε.</p>
	
	<p>Χρησιμοποιώντας το όρισμα <code>--sign</code> ή <code>-s</code>, για συντομία. Αφού συμπληρώσουμε την φράση-κλειδί για το Ιδιωτικό κλειδί μας το έγγραφο  συμπιέζεται και υπογράφεται:</p>

	<p><pre>gpg --output signed_doc.sig --sign unsigned_doc</pre></p>

	<p>Το αρχείο <em>signed_doc.sig</em> που θα παραχθεί με την τελευταία εντολή θα είναι σε δυαδική μορφή και μπορούμε να εξάγουμε το αρχικό μήνυμα από το υπογεγραμμένο αρχείο με την εντολή:</p>

	<p><pre>gpg --output usigned_doc --decrypt signed_doc.sig</pre></p>

	<p>Ή αν θέλουμε μόνο να επιβεβαιώσουμε την υπογραφή, τρέχουμε:</p>

	<p><pre>gpg --verify signed_doc.sig</pre></p>

	<p>Αν η υπογραφή είναι σωστή θα εμφανισθεί ένα μήνυμα σαν το παρακάτω:</p>

	<p><pre>gpg: Signature made Mon 14 Apr 2014 04:35:35 PM EEST using RSA key ID 60FCF76A
gpg: Good signature from &ldquo;EELLAK Demo (Demo key) &lt;info [ at ] eellak [ dot ] gr&gt;&rdquo;</pre></p>

	<p>Διαφορετικά, το πρόγραμμα θα εμφανίσει μήνυμα λάθους.</p>

	<p>Στην περίπτωση που επιθυμούμε να επισυνάψουμε το υπογεγραμμένο αρχείο σε κάποιο e-mail ή να το αναρτήσουμε σε κάποια ιστοσελίδα, μπορούμε να χρησιμοποιήσουμε το όρισμα <code>--clearsign</code> και να δημιουργήσουμε ένα αρχείο με συνημμένο το περιεχόμενο του εγγράφου μας μαζί με την ψηφιακή υπογραφή:</p>

	<p><pre>gpg --output signed_doc.sig --clearsign unsigned_doc</pre></p>

	<p>Σε αυτή την περίπτωση το αρχείο <em>signed_doc.sig</em> που θα παραχθεί θα περιέχει τα εξής:</p>

	<p><pre>-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

<em>[&hellip;]</em>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iQIcBAEBAgAGBQJTS9yhAAoJEIrHQitg/PdqWHoQAMtDxkZmFbYVTfF7idIKbYIc
/djBYSQOm4AFNBvzHsrj5IRt3CecHlrgUzUKAeISfne5Z+432IQjixYXVPC/G4CH
gIXRWkz7JPXwv4S4kFTSqtOiiRxv+K31JNnRMtwG7tYdLm75BNwlUiQxphXcde3t
SuDSnX1u+29PgUHnABZCkpUQfr4g04ubxvQVs76+/yJtnFurSWbh9BXy3TJRgq5u
+jzMP+oAJ3bUW08eZTWwsqijMVmn1J1BYaNp7INOuyq2vBsRbdBZ5NImBmQGRgRs
UABpv8GKzttUDyXgTrxDAvzoIV7Dp6IGiCN3F+PHgUZk45xyGEmFUVoVzrjZKXQI
dwhNnBp6QTKlYExiqYDAY5LHcfYaLunFldL9o4TJzmQ6k6Mko/0hkX2eoRTVveQd
/y6G4f/jwQYNGP3D8rqHyFq3StARmVBXhsNcGRq3/Z57D+CttRhgKhtqdOGwoJVu
cWeLKnwaGyy2DBiAUTyVfK1ICeXO0Q7WX5JfRD+BlpTTPKVUsSG53rYRud/8/D9V
8+B8pnpjLXYgh/uNLl9RnS/96O8BwRhAl9DlrNoHX0Xx7EG2vmeGpyIBh9pxhCJZ
BVW5Xc3Lr2ibRwulw5zmTy4SeSKwmwadnWFgMZtKtzNTERZuDdXxJa8MyCn8E62D
h0ZzhsL9nUppGiAKfuw0
=7UX6
-----END PGP SIGNATURE-----</pre></p>

	<p>Όπου στην θέση του <em>[&hellip;]</em> θα βρίσκεται το περιεχόμενο του αρχικού εγγράφου μας (<em>unsigned_doc</em>) και οι &laquo;τυχαίοι&raquo; χαρακτήρες που περιέχονται μεταξύ των γραμμών <em>-----BEGIN PGP SIGNATURE-----</em> και <em>-----END PGP SIGNATURE-----</em> αποτελούν την ψηφιακή υπογραφή.</p>

	<p>Οι δύο τρόποι ψηφιακής υπογραφής που παρουσιάσαμε, έχουν περιορισμένη χρησιμότητα στις περισσότερες περιπτώσεις, καθώς για να επεξεργαστούμε το αρχικό κείμενο θα πρέπει είτε να το εξάγουμε από την υπογεγραμμένη έκδοση ή να το αντιγράψουμε χειροκίνητα, στην περίπτωση του <em>--clearsign</em>.
	
	<p>Ο τρίτος τρόπος δημιουργεί την υπογραφή σε ξεχωριστό αρχείο και προτείνεται στην περίπτωση που θέλουμε να υπογράψουμε ένα αρχείο δυαδικής μορφής, όπως ένα OpenDocument έγγραφο (με κατάληξη <em>.odt</em>, συμβατό με το LibreOffice) ή ένα συμπιεσμένο αρχείο (πχ <em>.tar.gz</em> ή <em>.zip</em>). Για να δημιουργήσουμε μία υπογραφή σε ξεχωριστό αρχείο χρησιμοποιούμε το όρισμα <code>--detach-sig</code> ή <code>-b</code>, για συντομία. Ιδανικά, μπορούμε να το συνδιάσουμε με το όρισμα <code>--armor</code> για να παραχθεί η υπογραφή σε απλό αρχείο κειμένου ASCII, κατάλληλο για επισύναψη.</p> 

	<p><pre>gpg --output archive.zip.sig --detach-sig archive.zip</pre></p>

	<p>ή</p>

	<p><pre>gpg --output archive.zip.sig.asc --detach-sig --armor archive.zip</pre></p>

	<p>Το αρχεία <em>archive.zip.sig</em> και <em>archive.zip.sig.asc</em> θα περιέχουν μόνο την υπογραφή. Στην περίπτωση του <em>archive.zip.sig.asc</em> το περιεχόμενο θα είναι:</p>

	<p><pre>-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iQIcBAABAgAGBQJTS+hjAAoJEIrHQitg/PdqO60QALINQsRLvL99vCSPdbv+hvpz
72VMn7AIAgQsfKrJ+RsOrl3jatrtmPYIDlEcPUhppillpVHrOU8udn+SQlx+z3R1
xGODiJ0Bk9WJXrwocx4o/Cfq1yvJHWKWGywY7gElNp+Rrsh3mzdJUJhKNj7aLv0t
rYVLBElRG6mZw1LBIfPvY8Bmkt2DgpF4vMN98YAqj19vJEEu9W8SIJR1Y/OCeS+y
C4+mzOimzAkIWmeyZN01S1DSScsQb1wH360VsbcrXTwUuhXrvGGhcSXPFbHGx6ec
ImRRmuT5yS70JTrRGL1Rw2QlAPadNRSzHz8nJyzn0f4kHhxXRnylwN8aSt3b0M2I
6h6ar6oPxG0Vuqw0rTEI8y7zpo0FbHVzexjQk3RFSyf3I4LjY60LXro2YR6ku1xv
7SjqY8JZt+vxq1NIgZ+wX6lwoJjjytNvaAJvUv7CA99alOxftL5Q4TogjIAcYsgb
pBhuv8KG5qoe/gTHDljzTJTVhLWOYIydFUy3aGsRHCG4KXl/N/UiRUd32rJpsJcv
urIdWzyeIqYBE9134rYj56AVp4Eg2NSOqdQo2RfzeYS8+lBQ/kLZG4cQpt5tHeKZ
a1F7NlGHScvr4IgKV9udOHZcXNzEea0Q0T0qNftP5LJOwqVB5AVw6nG9V3FlwKEZ
q/0qSIuIiulDQ/QLz37C
=uY+5
-----END PGP SIGNATURE-----</pre></p>

	<p>Για να επαληθεύσουμε την υπογραφή χρειαζόμαστε το αρχείο της υπογραφής και το αρχικό αρχείο. Επαληθεύουμε με την εντολή:</p>

	<p><pre>gpg --verify archive.zip.sig archive.zip</pre></p>

	<p>ή</p>

	<p><pre>gpg --verify archive.zip.sig.asc archive.zip</pre></p>

	<h2>5. Διανομή Κλειδιών και Εξυπηρετητές Κλειδιών (Key Servers)</h2>

	<p>Ο καλύτερος τρόπος διανομής των Δημοσίων κλειδιών μας είναι με προσωπική συνάντηση και επιβεβαίωση της ταυτότητας όλων των ενδιαφερομένων, καθώς και επαλήθευση των κλειδιών. Στην πράξη αυτό δεν είναι πάντα εφικτό, βέβαια.</p>

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

	<p>Για τη λύση του προβλήματος της διανομής των κλειδιών δημιουργήθηκαν οι Εξυπηρετητές Κλειδιών Δημόσιας Χρήσης (Public Key Servers). Κάθε κλειδί που αποστέλλουμε σε ένα Key Server αποθηκεύεται στη βάση δεδομένων του ή αν υπάρχει ήδη αποθηκευμένο συγχωνεύονται σε αυτό οι αλλαγές. Υπάρχουν πολλοί δημόσιοι Key Servers &mdash; όπως ο <em>pgp.mit.edu</em> &mdash; οι οποιοί συγχρονίζουν τα δεδομένα τους, οπότε μπορούμε να χρησιμοποιούμε το πλησιέστερο σε εμάς. Οποιοσδήποτε ενδιαφέρεται να επικοινωνήσει μαζί μας μπορεί να ανακτήσει το Δημόσιο κλειδί μας από κάποιο δημόσιο Key Server.</p>

	<p>Για να στείλουμε ένα ή περισσότερα κλειδιά σε ένα Key Server χρησιμοποιούμε το όρισμα <code>--send-keys</code> μαζί με κάποιο διακριτικό του κλειδιού, για κάθε κλειδί. Για να ανακτήσουμε κλειδιά χρησιμοποιούμε το όρισμα <code>--recv-keys</code> συνοδευόμενο, υποχρεωτικά, από το Key ID του κλειδιού. Μπορούμε να ορίσουμε το Key Server που θέλουμε να χρησιμοποιήσουμε με το όρισμα <code>--keyserver</code>.</p>
	
	<p>Έτσι, για να στείλουμε το κλείδι που δημιουργήσαμε στο προηγούμενο παράδειγμα στο Key Server του MIT, τρέχουμε:</p>

	<p><pre>gpg --keyserver pgp.mit.edu --send-keys info [ at ] eellak [ dot ] gr</pre></p>

	<p>Αντίστοιχα για να ανακτήσουμε αυτό το Δημόσιο κλειδί από τον ίδιο Key Server:</p>

	<p><pre>gpg --keyserver pgp.mit.edu --recv-keys 60FCF76A</pre></p>

	<p>Όταν πρόκειται για επικοινωνία εντός &laquo;κλειστών&raquo; κύκλων μπορεί να χρησιμοποιηθεί ιδιωτικός εξυπηρετητής με ελεγχόμενη πρόσβαση. Ένα παράδειγμα λογισμικού ανοικτού κώδικα για δημιουργία Key Server είναι το <a href="https://bitbucket.org/skskeyserver/sks-keyserver/wiki/Home";>SKS</a> και στο Debian είναι διαθέσιμο με το πακέτο <em>sks</em>.


	<h2>6. Key signing Party</h2>

	<p>Το <em>Key Signing Party</em> είναι η συνάντηση ανθρώπων που χρησιμοποιούν το OpenPGP, με σκοπό την ανταλλαγή και ταυτοποίηση όσο περισσότερων Δημοσίων κλειδιών γίνεται. Όπως είδαμε και στην ενότητα για τον <a href="#web-of-trust">Κύκλο Επιστευτικότητας</a>, είναι σημαντικό να υπάρχει επιβεβαίωση της αυθεντικότητας των Δημοσίων κλειδιών πριν τη χρήση τους, για την αποφυγή πλαστογραφημένων κλειδιών.</p>

	<p>Τα Key Signing Parties χωρίζονται άτυπα σε τρεις κατηγορίες:</p>

	<ol>
		<li><em>Ανεπίσημα Πάρτυ</em>. Δε χρειάζονται ιδιαίτερη προετοιμασία από τους διοργανωτές και οποιοσδήποτε μπορεί να συμμετάσχει, έχοντας μαζί του τις πληροφορίες για τα κλειδιά του καθώς και ένα ή περισσότερα επίσημα έγγραφα με φωτογραφία &mdash; όπως ταυτότητα ή διαβατήριο &mdash; για την ταυτοποίηση. Καλό είναι οι συμμετέχοντες να έχουν μαζί τους εκτυπωμένα τα στοιχεία τους μαζί με το ψηφιακό αποτύπωμα του κλειδιού τους, για διευκόλυνση των υπολοίπων συμμετεχόντων.</li>
		<li><em>Πάρτυ με Λίστα Συμμετοχής</em>. Μπορεί να συμμετάσχει συγκεκριμένος αριθμός ατόμων και οι διοργανωτές οφείλουν να έχουν δημιουργήσει και διαμοιράσει λίστα με τα ψηφιακά αποτυπώματα των κλειδιών των συμμετεχόντων, για άμεση επαλήθευση. Οι συμμετέχοντες οφείλουν να έχουν κοινοποιήσει το ψηφιακό αποτύπωμα του κλειδιού τους στους διοργανωτές πριν την ημέρα του πάρτυ. Κατά την προσέλευση των συμμετεχόντων είναι σημαντικό να επιβεβαιώνονται τα ψηφιακά αποτυπώματα των κλειδιών τους που περιέχονται στη λίστα, η οποία θα μοιραστεί στους υπόλοιπους.</li>
		<li><em>Πάρτυ με Λίστα Συμμετοχής με επαλήθευση κρυπτογραφίας</em>. Ουσιαστικά, αποτελεί επέκταση του Πάρτυ με Λίστα Συμμετοχής με δυνατότητα συμμετοχής μεγάλου αριθμού ανθρώπων. Πάλι, οι διοργανωτές οφείλουν να έχουν δημιουργήσει λίστα με τα επιβεβαιωμένα ψηφιακά αποτυπώματα των συμμετεχόντων. Εφόσον έχουν επιβεβαιωθεί όλα τα κλειδιά της λίστας από τους ιδιοκτήτες τους, δημιουργείται <a href="http://en.wikipedia.org/wiki/Cryptographic_hash_function";>ψηφιακό αποτύπωμα hash</a> για την ίδια τη λίστα, το οποίο πιστοποιεί την αυθεντικότητα της. Έτσι οι συμμετέχοντες δε χρειάζεται να επιβεβαιώνουν κάθε κλειδί που θέλουν να υπογράφουν, ξεχωριστά, και απλά επιβεβαιώνουν την αυθεντικότητα της λίστας.</li>
	</ol>

	<p>Σε κάθε περίπτωση, πρωτού συμμετάσχουμε σε ένα Key Signing Party, καλό είναι να έχουμε στείλει τα Δημόσια κλειδιά μας σε κάποιο key server, προσβάσιμο από τους υπόλοιπους συμμετέχοντες. </p>

	<p>Μετά το πάρτυ, για να υπογράψουμε τα κλειδιά των ατόμων που επιβεβαιώσαμε την αυθεντικότητα τους ακολουθούμε την εξής, συνοπτική διαδικασία:</p>

	<ul>
		<li>Ανάκτηση κάθε κλειδιού από το key server που χρησιμοποιούμε με την εντολή: <pre>gpg --keyserver <em>&lt;keyserver&gt;</em> --recv-keys <em>&lt;Key ID&gt;</em></pre></li>
		<li>Εμφάνιση του ψηφιακού αποτυπώματος κάθε κλειδιού με την εντολή: <pre>gpg --fingerprint <em>KeySpecifier</em></pre> και επαλήθευση με το αποτύπωμα της λίστας που συλλέξαμε στο πάρτυ.</li>
		<li>Υπογραφή του κλειδιού με το Ιδιωτικό κλειδί μας: <pre>gpg --default-key <em>Our_Key_KeySpecifier</em> --sign-key <em>KeySpecifier</em></pre> αντικαθιστώντας τα <em>Our_Key_KeySpecifier</em> και <em>KeySpecifier</em> με κάποιο διακριτικό του δικού μας κλειδιού και του κλειδιού που θέλουμε να υπογράψουμε, αντίστοιχα. Εναλλακτικά μπορούμε να επαληθεύσουμε και να υπογράψουμε το κλειδί από το κέλυφος επεξεργασίας του gpg, όπως είδαμε στη σχετική <a href="#import-export">ενότητα</a>.</li>
		<li>Τέλος, στέλνουμε το κλειδί που υπογράψαμε στο key server &mdash; εφόσον και ο ιδιοκτήτης του κλειδιού είναι σύμφωνος με αυτή την ενέργεια &mdash; τρέχοντας την εντολή: <pre>gpg --keyserver <em>&lt;keyserver&gt;</em> --send-keys <em>KeySpecifier</em></pre> Στην περίπτωση που ο ιδιοκτήτης δεν επιθυμεί την αποστολή του κλειδιού του σε κάποιο key server οφείλουμε να του στείλουμε το υπογραμμένο (από εμάς) κλειδί του με τον τρόπο που επιθυμεί, όπως για παράδειγμα με κρυπτογραφημένο e-mail.</li>
	</ul>

	<h3>Πηγές</h3>

	<!-- XXX Βάλε πηγές -->
</body>