Πρόσθετα υποκλειδιά αποκρυπτογράφησης (ADSK) με το GnuPG#

(Nitrokey 3 - macOS)

Πρόσθετα υποκλειδιά αποκρυπτογράφησης (ADSK) μπορεί να χρησιμοποιηθεί για την αυτόματη προσθήκη παραληπτών κατά την κρυπτογράφηση ενός μηνύματος με το GnuPG. Τυπικές περιπτώσεις χρήσης περιλαμβάνουν

  • ένα μόνο κλειδί κρυπτογράφησης για μια ομάδα, χωρίς να χρειάζεται να μοιράζονται τα μέλη της ομάδας το ιδιωτικό κλειδί,

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

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

Σημείωση

Για να ρυθμίσετε ένα ADSK, χρειάζεστε το GnuPG 2.4.1 ή νεότερη έκδοση. Για να κρυπτογραφήσετε ένα μήνυμα για ένα κλειδί με ένα ADSK, χρειάζεστε το GnuPG 2.2.42 ή νεότερη έκδοση.

Επισκόπηση#

Αυτός ο οδηγός εξηγεί πώς να προσθέσετε ένα εφεδρικό κλειδί (αναγνωριστικό χρήστη backup@example.com) ως ADSK σε ένα κύριο κλειδί (αναγνωριστικό χρήστη main@example.com). Και τα δύο κλειδιά είναι αποθηκευμένα σε ένα κλειδί Nitrokey. Τα ίδια βήματα μπορούν να χρησιμοποιηθούν για την προσθήκη πολλαπλών ADSK σε ένα κλειδί ή για την προσθήκη του ίδιου κλειδιού ως ADSK σε πολλά άλλα κλειδιά.

Προετοιμασία των κλειδιών#

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

Βεβαιωθείτε ότι μπορείτε να απαριθμήσετε και τα δύο κλειδιά με gpg --list-keys, για παράδειγμα:

$ gpg --list-keys main@example.com backup@example.com
pub   ed25519 2023-07-04 [SC]
      55BC284C1D30D97638DA4A2C7963A4CD00C947CE
uid           [ultimate] Main Key <main@example.com>
sub   ed25519 2023-07-04 [A]
sub   cv25519 2023-07-04 [E]

pub   ed25519 2023-07-04 [SC]
      5271152B531F7FFD8787818251FB75800E281241
uid           [ultimate] Backup Key <backup@example.com>
sub   ed25519 2023-07-04 [A]
sub   cv25519 2023-07-04 [E]

Προσθήκη ADSK#

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

$ gpg --list-keys --with-subkey-fingerprints backup@example.com
pub   ed25519 2023-07-04 [SC]
      5271152B531F7FFD8787818251FB75800E281241
uid           [ultimate] Backup Key <backup@example.com>
sub   ed25519 2023-07-04 [A]
      7AEA1A0EC7BD66FF03AFEFAC8F243D8EC7678FCC
sub   cv25519 2023-07-04 [E]
      C1735CB29890EEDEABCF1D0DC9310F81D77519BC

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

Κατόπιν προσδιορίστε το δακτυλικό αποτύπωμα του κύριου κλειδιού:

$ gpg --list-keys main@example.com
pub   ed25519 2023-07-04 [SC]
      55BC284C1D30D97638DA4A2C7963A4CD00C947CE
uid           [ultimate] Main Key <main@example.com>
sub   ed25519 2023-07-04 [A]
sub   cv25519 2023-07-04 [E]

Μπορείτε να το βρείτε στην επόμενη γραμμή μετά το pub, σε αυτή την περίπτωση 55BC284C1D30D97638DA4A2C7963A4CD00C947CE.

Τώρα μπορείτε να προσθέσετε το ADSK χρησιμοποιώντας τη σημαία --quick-add-adsk:

$ gpg --quick-add-adsk \
      55BC284C1D30D97638DA4A2C7963A4CD00C947CE \
      C1735CB29890EEDEABCF1D0DC9310F81D77519BC

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

Μπορείτε να ελέγξετε ότι το ADSK έχει δημιουργηθεί:

$ gpg --list-keys --with-subkey-fingerprints main@example.com
pub   ed25519 2023-07-04 [SC]
      55BC284C1D30D97638DA4A2C7963A4CD00C947CE
uid           [ultimate] Main Key <main@example.com>
sub   ed25519 2023-07-04 [A]
      9DF42A789DA4E848295C529634E35A6897DFABFD
sub   cv25519 2023-07-04 [E]
      1DFD6EA8D8B88BEA063ADB4BD75708BAF0CD49C8
sub   cv25519 2023-07-04 [R]
      C1735CB29890EEDEABCF1D0DC9310F81D77519BC

Το υποκλειδί με τη δυνατότητα R (περιορισμένη) είναι το ADSK. Έχει το ίδιο δακτυλικό αποτύπωμα με το υποκλειδί κρυπτογράφησης του εφεδρικού κλειδιού.

Τώρα μπορείτε να διανείμετε το δημόσιο κλειδί με το ADSK.

Χρήση ενός ADSK#

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

  • Ο αποστολέας του μηνύματος διαθέτει ένα ενημερωμένο δημόσιο κλειδί που περιλαμβάνει το ADSK.

  • Ο αποστολέας του μηνύματος χρησιμοποιεί GnuPG 2.2.42 ή νεότερη έκδοση.

Αν προσθέσετε τη σημαία --verbose, μπορείτε να ελέγξετε τα κλειδιά με τα οποία είναι κρυπτογραφημένο το μήνυμα:

$ echo message | gpg --verbose --encrypt --armor --recipient main@example.com > /tmp/msg.asc
gpg: using pgp trust model
gpg: using subkey D75708BAF0CD49C8 instead of primary key 7963A4CD00C947CE
gpg: automatically retrieved 'main@example.com' via Local
gpg: This key belongs to us
gpg: reading from '[stdin]'
gpg: writing to stdout
gpg: ECDH/AES256 encrypted for: "D75708BAF0CD49C8 Main Key <main@example.com>"
gpg: ECDH/AES256 encrypted for: "C9310F81D77519BC Main Key <main@example.com>"

Μπορείτε επίσης να χρησιμοποιήσετε την επιλογή --list-packets για να ελέγξετε ένα κρυπτογραφημένο μήνυμα:

$ gpg --pinentry-mode cancel --list-packets /tmp/msg.asc | grep "pubkey enc packet"
:pubkey enc packet: version 3, algo 18, keyid D75708BAF0CD49C8
:pubkey enc packet: version 3, algo 18, keyid C9310F81D77519BC

Κάθε γραμμή pubkey enc packet αντιπροσωπεύει ένα κλειδί που μπορεί να αποκρυπτογραφήσει το μήνυμα.

Ανάκληση ADSK#

Εάν ανακαλέσετε ένα ADSK, δεν θα προστίθεται πλέον ως παραλήπτης κατά την κρυπτογράφηση ενός μηνύματος. Για να εκτελέσετε ανάκληση, ανοίξτε το κλειδί με gpg --edit-key:

$ gpg --edit-key main@example.com

sec  ed25519/7963A4CD00C947CE
     created: 2023-07-04  expires: never       usage: SC
     card-no: FFFE 5E0E868D
     trust: ultimate      validity: ultimate
ssb  ed25519/34E35A6897DFABFD
     created: 2023-07-04  expires: never       usage: A
     card-no: FFFE 5E0E868D
ssb  cv25519/D75708BAF0CD49C8
     created: 2023-07-04  expires: never       usage: E
     card-no: FFFE 5E0E868D
ssb  cv25519/C9310F81D77519BC
     created: 2023-07-04  expires: never       usage: R
[ultimate] (1). Main Key <main@example.com>

Επιλέξτε το υποκλειδί που θέλετε να ανακαλέσετε με key N. Το επιλεγμένο υποκλειδί επισημαίνεται με αστερίσκο:

gpg> key 2

sec  ed25519/7963A4CD00C947CE
     created: 2023-07-04  expires: never       usage: SC
     card-no: FFFE 5E0E868D
     trust: ultimate      validity: ultimate
ssb  ed25519/34E35A6897DFABFD
     created: 2023-07-04  expires: never       usage: A
     card-no: FFFE 5E0E868D
ssb  cv25519/D75708BAF0CD49C8
     created: 2023-07-04  expires: never       usage: E
     card-no: FFFE 5E0E868D
ssb* cv25519/C9310F81D77519BC
     created: 2023-07-04  expires: never       usage: R
[ultimate] (1). Main Key <main@example.com>

Ανακαλέστε το υποκλειδί με revkey και στη συνέχεια αποθηκεύστε τις αλλαγές με save:

gpg> revkey
Do you really want to revoke this subkey? (y/N) y
Please select the reason for the revocation:
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
Your decision? 0
Enter an optional description; end it with an empty line:
>
Reason for revocation: No reason specified
(No description given)
Is this okay? (y/N) y


sec  ed25519/7963A4CD00C947CE
     created: 2023-07-04  expires: never       usage: SC
     card-no: FFFE 5E0E868D
     trust: ultimate      validity: ultimate
ssb  ed25519/34E35A6897DFABFD
     created: 2023-07-04  expires: never       usage: A
     card-no: FFFE 5E0E868D
ssb  cv25519/D75708BAF0CD49C8
     created: 2023-07-04  expires: never       usage: E
     card-no: FFFE 5E0E868D
ssb  cv25519/C9310F81D77519BC
     created: 2023-07-04  revoked: 2023-07-04  usage: R
[ultimate] (1). Main Key <main@example.com>

gpg> save

Τώρα διανείμετε το ενημερωμένο δημόσιο κλειδί.

Σημείωση

Η ανάκληση θα τεθεί σε ισχύ μόνο όταν ο αποστολέας ενημερώσει το δημόσιο κλειδί με το ανακληθέν ADSK. Τα μηνύματα που έχουν ήδη κρυπτογραφηθεί μπορούν να αποκρυπτογραφηθούν με το ADSK ακόμη και αν ανακληθεί.