SCRAM
SCRAM è un meccanismo di memorizzazione dei dati e un protocollo di autenticazione della password _ _ _ _ _ _ SCRAM appartiene ai meccanismi di livello SASL , il che ne rende possibile l'utilizzo insieme ad alcuni dei protocolli standard che utilizzano SASL: SMTP , LDAP , IMAP e POP . Scram è anche un meccanismo GSS-API . Supporta il binding dei canali e l'autenticazione a due vie. Al momento della stesura di questo articolo (gennaio 2013) è il più avanzato e ricco di funzionalità.
Sfondo
- La necessità di un meccanismo che supporti tutte le nuove funzionalità descritte in SASL: supporto per login e password internazionalizzati, supporto per l'implementazione dell'autenticazione univoca, supporto per channel binding [1] .
- La necessità di un protocollo di autenticazione a due vie [2] .
- Il desiderio che le informazioni memorizzate nel database di identificazione non siano sufficienti per consentire a un utente malintenzionato di impersonare un cliente.
- La necessità che il server non sia in grado di impersonare un client su un altro server (escluso il proxy di autorizzazione ).
- Vi è una significativa necessità di un meccanismo più facile da implementare rispetto a quello attuale (DIGEST-MD5) [2] .
In generale, tutte le ipotesi riflettono le carenze di altri meccanismi di autenticazione. Pertanto, nel giugno 2010 è stata creata SCRAM, priva dei problemi di altri meccanismi, e rispondendo alle esigenze del suo tempo [3] .
Schema generale
Si consideri di seguito una descrizione di uno scambio di dati di autenticazione SCRAM SASL completo non compresso.
Per la seguente descrizione dello pseudocodice dell'algoritmo verrà utilizzata la seguente notazione:
- "
:=": La variabile a sinistra denota una sequenza di byte di otto bit risultante dalla valutazione dell'espressione a destra. - "
+": Concatenazione di stringhe di byte. - "
[ ]": parte dell'espressione racchiusa tra "[" e "]" non può essere inclusa nel risultato in alcune circostanze. Tali circostanze saranno descritte separatamente. Normalize(str): implementazione di una funzione descritta nello standard SASLprep [4] che esegue l'algoritmo "stringprep" come algoritmo di normalizzazione per la stringa codificata UTF-8str" " [5] . Il risultato della funzione è anche una stringa codificata in UTF-8.HMAC(key, str): Alcune implementazioni della funzione HMAC che ricevekeyedstremette una sequenza di byte come input, mediante la quale è possibile verificare l'integrità delle informazioni.H(str): un'implementazione di alcune funzioni Hash che accetta una stringa come input, e come risultato del lavoro produce una sequenza di byte, la cui lunghezza dipende dalla funzione stessa.XOR: complemento di bit .- Funzione
Ciao ( str , sale , i ) :
U1 := HMAC ( str , sale + INT ( 1 ))
U2 := HMAC ( str , U1 )
…
Ui - 1 := HMAC ( str , Ui - 2 )
Ui := HMAC ( str , Ui - 1 )
Ciao := U1 XOR U2 XOR … XOR Ui
dove “ i” è il numero di iterazione, “ +” è l'operatore di somma delle righe ed INT(g) è una rappresentazione a quattro byte di un intero g(il primo ottetto è il più significativo), questo è un salesalt - crittografico . In effetti , è essenzialmente un generatore di numeri pseudo-casuali ed è praticamente uguale a un blocco di uscita PBKDF2 .
Hi()
Prima di iniziare il processo, il client SCRAM ha a disposizione un nome utente e una password. Il client invia il nome utente al server, che recupera dal database le informazioni ( salt, StoredKey, ServerKey, i) corrispondenti ai dati ricevuti. Il server invia anche saltil contatore di iterazioni al client, che calcola i valori dei seguenti valori e invia al server ClientProof. [3]
SaltedPassword := Hi ( Normalize ( password ) , salt , i )
ClientKey := HMAC ( SaltedPassword , " Client Key " )
StoredKey := H ( ClientKey )
AuthMessage := client - first - message - bare + " , " + server - primo messaggio + " , " + client - messaggio finale - senza - prova ClientSignature : = HMAC ( StoredKey , AuthMessage ) ClientProof := ClientKey XOR ClientSignature ServerKey := HMAC ( SaltedPassword , " Server Key " ) ServerSignature : = HMAC ( ServerKey , AuthMessage )
Il server autentica il client valutando ClientSignaturee quindi XORing con ClientProof, recuperando ClientKeye convalidando ClientKeyapplicando una funzione hash e confrontando il risultato con StoredKey. Se ClientKeycorretto, dimostra che il client ha accesso alla password dell'utente [3] .
Allo stesso modo, il client autentica il server calcolando la ServerSignature e confrontandola con il valore inviato dal server. Se sono uguali, allora dimostra che il server ha avuto accesso ServerKeyall'utente.
AuthMessageviene calcolato combinando i messaggi che hanno partecipato allo scambio di autenticazione.
Pertanto SCRAM ti consente di autenticare un utente sul server con il suo nome e password e ti consente di autenticare il server per il client, ma il server è senza nome [3] .
Un tale schema suggerisce che il segreto in questo caso è:
- valori hash
StoredKeyeServerKey - Valore del sale
- Parametro di iterazione [2]
Un esempio di dialogo tra il server "S" e il client "C" durante il processo di autenticazione:
C: n,,n=utente,r=fyko+d2lbbFgONRv9qkxdawL
S: r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,
i=4096
C: c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,
p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts=
S: v=rmF9pqV8S7suAoZWja4dJRkFsKQ=
Affidabilità del meccanismo
Nei casi in cui SCRAM viene utilizzata senza un ulteriore livello di sicurezza, come TLS, un intercettore passivo può ottenere informazioni sufficienti per organizzare una ricerca completa della sua password offline . La quantità di tempo necessaria per decifrare una password dipende dalla funzione di hash crittografica utilizzata e dalla complessità della password. Il livello di sicurezza della rete esterno impedisce questo attacco [3] .
Sulle reti con TLS, il meccanismo di associazione delle porte può essere utilizzato per rilevare un attacco man-in-the-middle . Tuttavia, l'attaccante avrà l'opportunità di un attacco di forza bruta offline.
Nel caso in cui le informazioni di autenticazione vengano rubate dal database di autenticazione, è possibile utilizzare un attacco di forza bruta per ottenere la password dell'utente. Il sale utilizzato mitiga l'impatto di questo attacco costringendo ogni password a essere indovinata individualmente [3] .
È importante che l'efficacia di qualsiasi meccanismo di autenticazione basato su password dipenda fortemente dalla conformità dell'utente alla politica delle password.
In pratica, SCRAM è uno dei meccanismi di autenticazione basati su password più sicuri [2] .
Altri meccanismi di autenticazione
- Il meccanismo DIGEST-MD5 è molto difficile da implementare e testare, il che lo rende poco compatibile. Il livello di sicurezza in esso contenuto spesso non è implementato. Invece, TLS è ampiamente utilizzato [6] .
- Anche il meccanismo CRAM-MD5 SASL, nonostante il suo uso diffuso, ha i suoi problemi. In particolare, mancano alcune delle nuove funzionalità SASL, come la possibilità di utilizzare login e password internazionali. Mancano anche le capacità di autenticazione del server e di associazione dei canali [7] .
- Il meccanismo PLAIN SASL consente un attacco di dirottamento dell'autenticazione e il trasferimento su un altro server in cui l'utente ha la stessa password. Invia la password in chiaro se la rete non utilizza TLS [8] .
Vantaggi di SCRAM
- Le informazioni di autenticazione sono archiviate in un database speciale. Queste informazioni non sono sufficienti per presentarsi come client a un altro server.
- Viene applicato un salt a tutte le informazioni nel database, che impedisce l' iterazione sul dizionario .
- Il meccanismo consente di utilizzare un server proxy di autorizzazione senza richiedere al server proxy di disporre dei diritti di superutente sul server.
- L'autenticazione a due vie è supportata, ma allo stesso tempo solo il client ha un nome (il server non è identificato dal nome).
- Se utilizzato come meccanismo SASL, SCRAM è anche in grado di passare le credenziali dal client al server.
- Per semplicità, SCRAM non include la negoziazione del livello di sicurezza. È destinato all'uso con uno strato esterno di sicurezza fornito da TLS o SSH [3] .
- È stato creato per l'uso con qualsiasi algoritmo hash, quindi ha un grande potenziale per migliorare la forza crittografica dello schema. SHA-1 doveva essere utilizzato durante lo sviluppo [2]
Poiché SCRAM è stata creata per correggere le carenze dei meccanismi che l'hanno preceduta, i problemi sopra descritti non sono insiti in essa (il suo principale vantaggio è l'assenza di carenze).
Vale la pena notare che sebbene SCRAM sia un puro meccanismo SASL, allo stesso tempo soddisfa pienamente i requisiti per il meccanismo GSS-API [3] [2] .
Autenticazione senza password
Uno schema di sicurezza basato su password si basa su un segreto condiviso noto a entrambe le parti. Ciò comporta difficoltà nella gestione delle impostazioni di sicurezza tra molte parti del sistema. Questo crea anche il problema di fornire informazioni segrete a punti diversi. Per PKI , una chiave privata può essere protetta in modo molto sicuro, ad esempio memorizzandola su una smart card, che fornisce un ulteriore fattore di autenticazione e sicurezza.
L'autenticazione forte basata su PKI è la scelta migliore per:
- autenticazione da server a server
- autenticazione da utente a utente
- autenticazione ad alta sicurezza
L'autenticazione basata su password è migliore perché
- l'approccio hardware all'autenticazione è molto più costoso [2] .
Note
- ^ RFC 4422, 2006 .
- ↑ 1 2 3 4 5 6 7 SCRAM: un nuovo protocollo per l'autenticazione tramite password, 2010 .
- ^ 1 2 3 4 5 6 7 8 RFC 5802, 2010 .
- ^ RFC 3454, 2002 .
- ^ RFC 3629, 2003 .
- ^ Melnikov, 2008 .
- ^ Zeilenga, 2008 .
- ^ RFC 4616, 2006 .
Letteratura
- SCRAM: un nuovo protocollo per l'autenticazione tramite password // isode.com : giornale elettronico . - 2010. - 19 maggio.
- RFC 1994 . — 1996.
- RFC 3454 . — 2002.
- RFC 3629 . — 2003.
- RFC 4422 . — 2006.
- RFC 4616 . — 2006.
- RFC 5802 . - 2010. - ISSN 2070-1721 .
- RFC 6287 . - 2011. - ISSN 2070-1721 .
- Melnikov , A. Spostamento di DIGEST-MD5 su Storico . - 2008. - 10 luglio.
- Zeilenga, K. CRAM -MD5 a Storico . - 2008. - Novembre.