Attualmente stiamo integrando con un componente di terze parti nella nostra applicazione web. Parte di questa integrazione richiede l'invio di dati su http. Questo viene fatto tramite i parametri POST. Nella richiesta è incluso un parametro aggiuntivo che è un hash SHA1 degli altri parametri, più una chiave segreta, combinata come segue:
param1.param2.param3.param4.param5.param6.secretkey
Un utente malintenzionato o un uomo nell'attacco centrale ha accesso ai parametri e all'hash di output, ma non alla chiave segreta che non viene inviata su http. Ho letto che SHA1 è considerato debole e, con risorse sufficienti, rotto. Mi piacerebbe capire di più sulla robustezza di questo setup e su come SHA1 sia debole.
Le mie domande sono le seguenti:
- Un utente malintenzionato può eseguire iterazioni su tutte le possibili combinazioni di chiavi segrete, creando un nuovo hash fino a quando non viene trovato un hash corrispondente. Una volta trovata la chiave segreta, la modifica dei dati (e quindi la generazione di un nuovo hash) inviata tra di noi sarebbe banale e, soprattutto, non rilevabile. Ci sono altri modi (a parte la forzatura bruta) di scoprire la chiave segreta? Forza bruta potrebbe essere utilizzata contro qualsiasi algoritmo, portandomi a credere che ci sia un modo migliore / più veloce / più economico per farlo. In altre parole, in che modo gli aggressori sfruttano le debolezze di SHA1?
- Se non siamo in grado di farli aumentare la sicurezza del loro messaggio usando SHA2 o SHA3, una chiave segreta sufficientemente lunga con SHA1 ci proteggerà da eventuali attacchi?