S/KEY
In crittografia e in informatica S/KEY è un sistema one-time password sviluppato per l'autenticazione su sistemi operativi Unix-like, in particolare dai cosiddetti 'dumb terminal' o da computer pubblici nei quali l'utente non vuole scrivere una password a lunga scadenza. La reale password dell'utente viene combinata in un dispositivo offline con un piccolo insieme di caratteri e un contatore decrementale in modo da formare una password monouso. Dato che la password è utilizzabile solo per una sessione, l'utilizzo di sniffer diventa inutile.[1]
Descrizione
modificaL'insieme di caratteri non cambia finché il contatore decrementale non raggiunge lo zero. È così possibile preparare una lista di password single-use che l'utente può portare con sé. Alternativamente, l'utente può presentare la password, i caratteri e il valore del contatore desiderato ad un calcolatore locale per generare la password appropriata che può quindi essere trasmessa attraverso la rete in chiaro. Questa seconda opzione è la più comune e si riduce praticamente ad una forma di autenticazione challenge-response.
S/KEY è supportato in Linux tramite PAM, OpenBSD, NetBSD e FreeBSD. Inoltre una generica implementazione open source permette l'utilizzo su ogni altro sistema. S/KEY è un marchio commerciale di Telcordia Technologies, conosciuta comunemente come Bell Communications Research (Bellcore).
Ci si riferisce a S/KEY anche con il nome di 'schema di Leslie Lamport', dal nome dell'autore. È stato sviluppato da Neil Haller, Phil Karn e John Walden nei laboratori Bellcore sul finire degli anni 80. Al momento della scadenza dei brevetti sulla crittografia a chiave pubblica e l'ampio utilizzo di SSH e altri protocolli di crittografia che possono rendere sicura l'intera sessione, non solo la password, S/KEY è caduto in disuso. SecurID è uno schema one-time password simile che ancora risulta ampiamente utilizzato perché, a differenza di S/KEY, fornisce autenticazione a due fattori, richiedendo un token fisico che difficilmente può essere riprodotto.
Generazione della password
modificaIl server è il computer che eseguirà l'autenticazione:
- Si inizia con una chiave segreta w. Questo segreto può essere fornito sia dall'utente che generato da una macchina. D'altro canto se il segreto viene svelato, la sicurezza di S/KEY viene compromessa.
- H è una funzione di hash che produce una password one-time;
- H è applicata n volte a w, producendo quindi un insieme di n password one-time;
- La chiave segreta iniziale w è scartata;
- All'utente vengono fornite le n password, stampate in ordine inverso;
- Le ultime n-1 password vengono scartate dal server. Solo la prima password, in cima alla lista dell'utente, viene memorizzata sul server.
Autenticazione
modificaDopo la generazione della password, l'utente ha un foglio di carta con n password. La prima è la stessa password che il server ha memorizzato e che non sarà utilizzata per l'autenticazione. Al suo posto verrà utilizzata la seconda:
- L'utente fornisce al server la seconda password della lista e la cancella.
- Il server tenta di calcolare H(pwd) dove pwd è la password fornita. Se H(pwd) produce la prima password (quella che il server ha memorizzato, allora l'autenticazione è corretta. Il server memorizzerà quindi pwd come referenza per la successiva autenticazione.
Più in generale, fornendo la password i, verrà calcolata H(i) con la password memorizzata i-1.
Sicurezza
modificaLa sicurezza di S/KEY confida sulla difficoltà di invertire la funzione di hash. Si supponga che un attaccante ottenga una password i che è stata utilizzata per una precedente autenticazione. Tale password è inutile per le autenticazioni successive perché ogni password può essere usata una volta soltanto. Se la password i sniffata dall'attaccante fosse l'ultima utilizzata, si potrebbe tentare di invertire la funzione di hash in modo da ottenere la prossima password. Tale operazione risulta estremamente difficoltosa.
S/KEY è comunque vulnerabile ad un attacco man in the middle. È anche vulnerabile a certe race conditions, come nel caso in cui un attaccante utilizzasse uno sniffer per trovare i primi N-1 caratteri per poi utilizzare rapidamente un bruteforce per scoprire il restante carattere. Questo tipo di vulnerabilità possono essere evitate utilizzando ssh, SSL, SPKM o un altro metodo di trasmissione criptata.
Utilizzo
modificaIl sistema S/KEY utilizza dei numeri in 64 bit. Mentre nell'usabilità umana, ciascun numero viene mappato a sei brevi parole, ogni parola può contenere massimo quattro caratteri, attraverso un dizionario costituito da 2048 parole accessibili al pubblico. Ad esempio, una mappatura numerata a 64 bit potrebbe essere "ROY HURT SKI FAIL GRIM KNEE". [2]
Note
modifica- ^ (EN) Juergen Haas, one-time password (S/Key)...., su linux.about.com, about.com. URL consultato il 21-5-2012 (archiviato dall'url originale il 18 novembre 2012).
- ^ (EN) Craig Metz, Neil Haller, Mike Straw, A One-Time Password System, su tools.ietf.org. URL consultato il 18 febbraio 2021.