Ho svolto ricerche approfondite su questo argomento e sono bloccato - speravo di ottenere alcuni chiarimenti da parte di persone utili.
Sfondo: ho dei transponder Bluetooth collegati ai lucchetti che sono stati aperti tramite pagamento nella mia app. Un utente paga una quota fissa, la serratura si apre, afferrano il loro oggetto e la porta si chiude e si blocca. Sto cercando di impedire attacchi di spoofing in cui gli utenti non paganti sono in grado di aprire questi blocchi.
La mia attuale soluzione teoricamente è la seguente: A ogni transponder viene assegnato un sale casuale a 32 bit. Una volta che l'app si connette, una richiesta di autenticazione viene inviata al transponder. Il transponder crea quindi una stringa di sfida casuale + il suo sale unico. Il transponder quindi hash itera la stringa 10.000 volte (per proteggersi dalla forza bruta) usando SHA256.
Mentre ciò accade, anche la stringa di prova originale + sale viene trasmessa all'app che poi la invia a un server sicuro via SSL dove si trovano anche la chiave hash segreta condivisa e il sale transponder. La stringa è hash iterata 10.000 volte usando Sha256, rinviata all'app e torna al transponder che convalida l'hash del server con il proprio hash calcolato. Se uguale, il blocco si apre.
Le mie domande sono: è sicuro? Sto trascurando qualche vistoso difetto di sicurezza, che si tratti di forza bruta o altro? Mi sto sbagliando completamente? Qualsiasi aiuto o raccomandazione sarebbe molto apprezzato