Η ψηφιακή υπογραφή με GPG των commits που κάνετε με το git, προσθέτουν ένα σημαντικό στοιχείο ασφάλειας και πιστοποίησης αυθεντικότητας στην συνεργασία σας σε ένα project. Ας δούμε πως μπορούμε να υπογράψουμε τα git commits με το GPG κλειδί μας.

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

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

Advertisements

Τι είναι η ψηφιακή υπογραφή και που χρησιμεύει και που το χρησιμοποιώ;

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

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

Επομένως μπορείτε να υπογράψετε ψηφιακά με το GPG σας, τα email σας, τα αρχεία που ανταλλάσσετε με άλλους η να το χρησιμοποιήσετε σε υπηρεσίες ανταλλαγής μηνυμάτων όπως το Keybase, το element.io κλπ.

Σήμερα θα μάθουμε πως μπορείς να χρησιμοποιήσεις ένα GPG κλειδί για να υπογράφεις τα git commits σου σε ένα GitHub / Gitlab αποθετήριο πιστοποιόντας στους άλλους ότι «εσύ πραγματικά ήσουν ο χρήστης που έστειλε τον κώδικα«. Αυτά τα υπογεγραμμένα commits σημειώνονται ως “Verified”.

Πως δημιουργούμε το GPG κλειδί μας

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

Εδώ θα θυμίσουμε απλά ότι η εφαρμογή gpg είναι συνήθως προεγκατεστημένη σε όλες τις διανομές Linux. Για να φτιάξετε νέα κλειδιά :

gpg --full-generate-key
  • Η --full-generate-key επιλογή δημιουργεί τα κλειδιά διαδραστικά στο παράθυρο του τερματικού σας. 
Η --full-generate-key επιλογή δημιουργεί τα κλειδιά σας με μια διαδραστική συνεδρία

Οι επιλογές που έκανα είναι το 1 , έπειτα για μέγεθος κλειδιού το 2048, με ημερομηνία λήξης του κλειδιού σε 1y (ένα χρόνο).

Εδώ να σημειώσω ότι πρέπει να καθορίσετε πόσο καιρό θα ισχύει (ημερομηνία λήξης) το κλειδί. Εάν π.χ. μαθαίνετε τώρα το GPG, εισαγάγετε μια σύντομη διάρκεια όπως 5, για πέντε ημέρες. Εάν πρόκειται να διατηρήσετε αυτό το κλειδί, εισαγάγετε μεγαλύτερη διάρκεια όπως 1y για ένα έτος. Το κλειδί θα ισχύει 12 μήνες και έτσι θα χρειαστεί ανανέωση μετά από ένα έτος. Αυτό προσθέτει μια επιπλέον ασφάλεια αφού και να χάσετε το κλειδί, θα ξέρετε ότι μετά από ένα χρόνο θα πρέπει να εκδώσετε νέα.

Έπειτα συμπλήρωσα το όνομά μου, το email μου (με βάση αυτά μπορούν να αναζητήσουν το δημόσιο κλειδί που πιστοποιεί την αυθεντικότητα των δεδομένων που στέλνω) και όρισα ένα ισχυρό συνθηματικό για την χρήση του κλειδιού. Η δημιουργία κλειδιών θα πραγματοποιηθεί και θα επιστρέψετε στη γραμμή εντολών.

Advertisements

Πως να προσθέσουμε ένα GPG κλειδί στον λογαριασμό μας

Είτε έχετε Github λογαριασμό είτε Gitlab οι ρυθμίσεις και ο τρόπος που περιγράφουμε είναι παρόμοιος.

  1. Στην πάνω δεξιά γωνία, επιλέγουμε το avatar μας και πηγαίνουμε στα Settings.
  2. Πηγαίνουμε στην επιλογή SSH and GPG keys, επιλέγουμε New GPG key και προσθέτουμε εκεί το public μέρος του GPG κλειδιού μας.

Για να δείτε το public μέρος του κλειδιού μας, θυμηθείτε, θέλουμε αυτό που έχει κατάληξη .pub οπότε μπορούμε να δώσουμε:

cat ~/.ssh/onoma_kleidiou.pub

Σύνδεσε το GPG κλειδί με το Git του υπολογιστή του

Μετά την δημιουργία του GPG και την προσθήκη του στο GitHub και Gitlab λογαριασμό, ήρθε η ώρα να πούμε το Git του υπολογιστή μας πως να το χρησιμοποιεί.

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

gpg --list-secret-keys --keyid-format LONG <your_email>

Αντέγραψε το ID του GPG κλειδιού σου. Στο παρακάτω παράδειγμα είναι το 83FB043D4F23F207

sec   rsa4096/83FB043D4F23F207 2020-10-3 [SC]
      D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
uid                   [ultimate] Cerebrux <your_email>
ssb   rsa4096/B7ABC0813E4028C0 2017-08-18 [E]

Ας πούμε στο Git ποιο κλειδί να χρησιμοποιεί για να υπογράψει τα commit.

git config --global user.signingkey 83FB043D4F23F207

Σε περίπτωση που το git χρησιμοποιεί το gpg και σου εμφανίζει errors σαν αυτά:

secret key not available
gpg: signing failed: secret key not available

Χρησιμοποιείσαι την παρακάτω εντολή για να αλλάξεις το gpg σε gpg2

git config --global gpg.program `which gpg`

Υπογραφή των Commits

Εφόσον δημιουργήσαμε το GPG κλειδί, το προσθέσαμε στο λογαριασμό μας και είπαμε στο Git ποιο να χρησιμοποιεί, ήρθε η ώρα να ξεκινήσουμε να υπογράφουμε τα commits μας.

Η μόνη παράμετρος που θα χρειαστούμε στην δημιουργία commits είναι το

-S

git commit -S -m “To μήνυμα του commit"

Θα μας ζητήσει τον συνθηματικό του GPG κλειδιού μας που δώσαμε όταν το δημιουργήσαμε.

Κάθε push που κάνουμε πλέον στο Github και το Gitlab, θα δούμε οτι το commit θα είναι Verified.

Αν δεν θες να χρησιμοποιείς κάθε φορά το -S flag, πρέπει να πούμε στο git να το κάνει αυτό αυτόματα με την παρακάτω εντολή

git config --global commit.gpgsign true

Πλέον κάθε commit που κάνετε push στο GitHub και Gitlab αποθετήριο θα είναι Verified.

Επιλέγοντας το Verified label σου δείχνει περισσότερες πληροφορίες για την υπογραφή του χρήστη που έστειλε το commit.

Αφαίρεση GPG κλειδιού

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

Για να αφαιρέσουμε το GPG κλειδί από τον λογαριασμό μας πηγαίνουμε πάλι στα Settings και στην καρτέλα SSH and GPG keys. Και επιλέγουμε το Delete για την αφαίρεση του από τον λογαριασμό μας.

Είναι ιδιαίτερα χρήσιμη επιλογή στις περιπτώσεις που ο χρήστης για κάποιον λόγο δεν έχει πρόσβαση στο GPG κλειδί του, το έχει χάσει, έχει καταστραφεί από format ή έχει επέλθει η ημερομηνία λήξης.

Αυτόματη δημιουργία κλειδιού υπογραφή

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

Advertisements
  • Δημιουργεί κλειδί GPG αυτόματα
  • Με διάρκεια 1 έτος
  • Ρυθμίζει το git να χρησιμοποιεί το κλειδί
  • Αντιγράφει στην προσωρινή μνήμη το δημόσιο κλειδί
  • Ανοίγει το github αυτόματα για να προσθέσετε το κλειδί (πατάτε New GPG key και κάνετε επικόλληση)

Φυσικά όσοι έχετε παρακολουθήσει τα μαθήματα shell scripting μπορείτε να το επεξεργαστείτε (π.χ. να βάλετε 2 χρόνια και να ανοίγει το gitlab)

Η χρησιμότητα των ψηφιακών υπογραφών στα commit

Ίσως να αναρωτηθείτε γιατί το GitHub και Gitlab παρέχει αυτή την δυνατότητα. Είναι ένας μηχανισμός ασφαλείας που πιστοποιεί ότι ο συντάκτης του commit είναι το άτομο που σχετίζεται με αυτόν τον λογαριασμό.

Ξέρω ότι ρωτάτε: «Είναι δυνατόν να πλαστογραφήσεις μια ταυτότητα με το Git;». Η απάντηση είναι ναι. Με μια απλή εντολή μπορείτε να πλαστοπροσωπήσετε οποιονδήποτε άλλο χρήστη μέσω του GitHub:

git commit -m "Initial commit" \
  --author="Linus Torvalds <torvalds@linux-foundation.org>"

έπειτα το GitHub δείχνει:

Φυσικά ο Linus Torvalds δεν συνεργάστηκε στο project μου ούτε μου έστειλε commit. Αλλά αυτός ο αδιαφανής χειρισμός ταυτότητας μπορεί ενδεχομένως να αξιοποιηθεί ως μια επίθεση κοινωνικής μηχανικής.

Για την επίλυση αυτού του προβλήματος, το Git πρόσθεσε signed commits (ψηφιακής υπογραφής), οι οποίες απεικονίζονται με την [verified] ετικέτα από το GitHub και Gitlab.

Παραπομπές: