La generazione di password sicure è fondamentale per proteggere servizi, database e configurazioni nel self-hosting. Utilizzare password deboli o riutilizzate espone i sistemi a rischi significativi. Linux offre diversi strumenti nativi per generare password casuali direttamente da terminale, senza dipendere da servizi esterni o da siti internet che offrono la generazione casuale di password.

Con uno sforzo minimo, possiamo andare a realizzare delle password generiche sui nostri ambienti in completa sicurezza. Generare password localmente offre diversi vantaggi rispetto ai generatori online:

  • Privacy: Le password non transitano mai su server esterni
  • Affidabilità: Funziona anche offline
  • Automazione: Integrabile in script e pipeline di deployment
  • Casualità: Utilizza fonti di entropia del sistema operativo

Metodi di Generazione

Ci sono diversi metodi o software per poter andare a generare delle password casuali utilizzando il proprio sistema operativo tramite l’utilizzo del terminale. In questa guida andiamo ad utilizzare il metodo openssl, ma è possibile utilizzare anche altri metodi, qui sotto potete trovare una tabella riepilogativa.

Metodo Pro Contro Uso Consigliato
openssl rand Preinstallato, sicuro Solo Base64/hex Script, automazione
/dev/urandom Sempre disponibile Sintassi verbosa Ambienti minimali
pwgen Flessibile, opzioni Richiede installazione Uso interattivo

Generazione delle Password

OpenSSL è preinstallato nella maggior parte delle distribuzioni Linux e offre un generatore crittograficamente sicuro, è lo stesso che possiamo andare ad utilizzare per la generazione dei certificati per poter accedere ai vari sistemi o servizi in modo sicuro.

bash
# Password di 32 byte codificata in Base64 (44 caratteri)
openssl rand -base64 32

# Password di 16 byte in formato esadecimale (32 caratteri)
openssl rand -hex 16

Spiegazione dei parametri:

  • rand: Genera byte casuali
  • -base64: Codifica in Base64 (caratteri alfanumerici + / e +)
  • -hex: Codifica esadecimale (solo 0-9 e a-f)

Consigli di Sicurezza

La generazione di una password randomica è sicuramente uno degli aspetti fondanti dei protocolli di sicurezza, ma non è l’unico aspetto che è necessario considerare, infatti alcuni consigli che sembrano ovvi, ma sono molto importanti sono ad esempio:

  • Creare una password di almeno 16 caratteri
  • Andare a creare delle password diverse per ogni servizio, in modo che nel caso un servizio fosse hackerato, la password fornita non possa essere utilizzata dagli hacker per entrare in altri account
  • Come accade per Docker, è meglio andare a salvare le password in un file .env con permessi 600, in modo che solamente il proprietario del file sarà in grado di leggere o modificare il file, escludendo altri utenti del sistema.
  • Non condividere le password, soprattutto in ambienti di Git, dove è possibile andare a risalire a password salvate e poi cancellate tramite il versioning.

Per quello che riguarda la lunghezza della password, possiamo dire che più è lunga, maggiore è il tempo che un sistema impiega ad indovinare la password tramite un attacco di forza bruta. Qui sotto ho messo una tabella che illustra il tempo necessario per identificare una password, come possiamo vedere maggiore è la varietà dei caratteri e maggiore è la lunghezza, maggiore è il tempo impiegato.

Caratteri Solo Numeri Lettere Minuscole Maiuscole + Minuscole Numeri + Maiusc + Minusc Numeri + Lettere + Simboli
4 Istantaneo Istantaneo Istantaneo Istantaneo Istantaneo
5 Istantaneo Istantaneo 57 minuti 2 ore 4 ore
6 Istantaneo 46 minuti 2 giorni 6 giorni 2 settimane
7 Istantaneo 20 ore 4 mesi 1 anno 2 anni
8 Istantaneo 3 settimane 15 anni 62 anni 164 anni
9 2 ore 2 anni 791 anni 3k anni 11k anni
10 1 giorno 40 anni 41k anni 238k anni 803k anni
11 1 settimana 1k anni 2m anni 14m anni 56m anni
12 3 mesi 27k anni 11m anni 917m anni 3bn anni
13 3 anni 705k anni 5bn anni 56bn anni 275bn anni
14 28 anni 18m anni 300bn anni 3tn anni 19tn anni
15 284 anni 477m anni 15tn anni 218tn anni 1qd anni
16 2k anni 12bn anni 812tn anni 13qd anni 94qd anni
17 28k anni 322bn anni 42qd anni 840qd anni 6qn anni
18 284k anni 8tn anni 2qn anni 52qn anni 463qn anni

Legenda: k=mila, m=milioni, bn=miliardi, tn=trilioni, qd=quadrilioni, qn=quintilioni