Generare chiave GPG script

From Carini MediaWiki
Jump to navigation Jump to search

Generazione di una chiave GPG in modo programmatico

Perché farlo

Generare una chiave GPG in modo programmatico è utile in diversi scenari, tra cui:

  • Creazione standardizzata delle chiavi GPG seguendo le best practice (es. date di scadenza, uso delle subkey) e includendo tutte le capability richieste.
  • Automazione della gestione delle chiavi in infrastrutture DevOps e CI/CD.
  • Creazione di chiavi temporanee per ambienti di test e sviluppo.
  • Integrazione con sistemi che richiedono la crittografia senza intervento manuale.

Creazione di una chiave GPG da script

Per generare una chiave GPG senza interazione manuale, si può utilizzare la modalità batch di GnuPG. La documentazione ufficiale di GnuPG fornisce dettagli approfonditi al riguardo: Unattended GPG key generation

Come prima cosa bisogna preparare un file di testo su un computer locale. Nel nostro esempio usiamo come scadenza le 23:59:59 del 31 dicembre 2029

%echo start

# Primary key (defaults: Ed25519, usage SC)
Key-Type: default
Key-Curve: Ed25519

# Subkey — Encryption (E)
Subkey-Type: ecdh
Subkey-Curve: cv25519
Subkey-Usage: encrypt

Name-Real: Alessandro Carini (Milano, 4 aprile 1965)
Name-Email: alessandro@carini.net
Expire-Date: 20291231T235959
Passphrase: topsecret

%echo done

Questo file andrà distrutto in modo sicuro una volta terminato di generare le chiavi

Per generare la chiave dovremo usare:

gpg --batch --pinentry-mode loopback --gen-key ./nomescript

Se vogliamo utilizzare la nostra chiave anche per l'autenticazione (e.g. login in SSH)

gpg --batch --pinentry-mode loopback --passphrase "topsecret" --quick-add-key "<FINGERPRINT>" ed25519 auth 2029-12-31

Dove <FINGERPRINT> è il fingerprint completo a 40 caratteri della key primaria.

Generare una chiave con una data di creazione arbitraria

GPG usa sempre la data corrente del sistema come data di creazione. Volendo generare delle chiavi con una data di creazione di nostra scelta prefissare i nostri comandi con

TZ=UTC faketime 'yyyy-mm-dd hh:mm:ssZ'

e.g.

TZ=UTC faketime '2020-01-01 00:00:00Z' gpg --batch --pinentry-mode loopback --gen-key ./nomescript