chiave dell'hash hashing con un timestamp?

1

Sto lavorando a un progetto in cui lo sviluppatore iniziale ha deciso che sarebbe stata una buona idea mascherare le chiavi API con md5 e con l'attuale minuto e concedere ai client un tre- minuto per inviare quel valore.

Quindi il client:

headers.authKey = md5(ACTUAL_API_KEY + current_minute())

E il server fa:

// allow for one-minute-late and one-minute-early hashes
for (i in [-1, 0, 1]) :
  if headers.authKey == md5(ACTUAL_API_KEY + (current_minute()+i))
    valid = true

Questo mi sembra un teatro di sicurezza. Immagino di poter intrattenere l'idea che camuffare il valore "over the wire" potrebbe essere una buona idea, ma non sono sicuro se ci sia un reale vantaggio pratico a questo, e sembra che potrebbe rendere le cose più complicate di devono essere. Anche ... md5.

    
posta throwawayyyyyyyyyyyy 14.02.2018 - 22:11
fonte

2 risposte

3

Questo non è completamente inutile. Fornisce un po 'di protezione: un utente malintenzionato che ruba il valore di authKey per alcune sessioni lo sfrutta solo per una finestra temporale molto stretta. In effetti, ciò che il tuo collega sta facendo è molto simile a TOTP -il sistema familiare di sei- basato sul tempo codici numerici usati come secondo fattore di autenticazione.

Ecco uno scenario: un utente malintenzionato riesce a sottrarre file di registro che rivelano valori di authKey . Senza il timestamp inserito nel mix, potrebbero semplicemente riutilizzare quel valore, possibilmente indefinitamente.

    
risposta data 15.02.2018 - 01:36
fonte
0

Il teatro della sicurezza ha ragione. Se ha bisogno di essere oscurato "over the wire" dovrebbe essere comunicato su https o un tunnel simile, standard, criptato. Chiunque possa annusare la chiave "md5" sul filo può semplicemente inviarlo entro la finestra dei minuti.

E anche se è ragionevole essere sprezzanti di md5 per una serie di ragioni, se si assume che ci fosse un motivo legittimo per fare ciò che lo sviluppatore ha fatto, md5 non è il problema. La debolezza di md5 è la capacità di generare collisioni negli hash. Come un hash per oscurare alcuni dati, va bene. Ma come hai sottolineato, oscurare i dati non ti compra nulla in questo caso.

La risposta corretta è comunicare la chiave API su un canale protetto (ad esempio TLS). Se hai bisogno del fattore limitante nel tempo, devi invalidare e ri-emettere nuove chiavi API, valide solo per un determinato periodo di tempo.

    
risposta data 14.02.2018 - 23:22
fonte

Leggi altre domande sui tag