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.
# 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 16Spiegazione 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
.envcon permessi600, 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