Sto cercando di proteggere una connessione tra un dispositivo mobile (client) utilizzando una web app e un dispositivo domestico (server) in una rete Wifi potenzialmente pericolosa.
La comunicazione è asincrona e sto cercando di impedire " attacchi di riproduzione ".
Stavo pensando a Challenge Response, ma il sovraccarico di " chiedi sfida, ricevi sfida, invia messaggio con sfida risolta " è un problema di prestazioni per noi.
Quindi stavo pensando di utilizzare una sorta di TAN approccio al libro come la cottura in linea lo fa:
Inizialmente il Cliente avrebbe chiesto un set di Sfide che memorizza. Il server memorizzerebbe quelle sfide e terrà traccia di quante sono già state utilizzate.
Se rimangono solo n Sfide, il Server crea nuove Sfide e le invia con la successiva risposta al Cliente. In questo modo, il Cliente dovrebbe quasi sempre avere abbastanza Sfide senza il sovraccarico di Chiedere per loro prima di ogni richiesta.
Esempio:
- Il cliente desidera accedere e richiede prima le sfide, fornendo il suo nome utente / userid.
- Il server crea n Sfide e le memorizza per l'ID utente specificato, quindi le invia all'utente.
- Il client invia challenge-id e hash (challenge, shared-secret).
- Il server confronta la sfida memorizzata (identificata da challenge-id) con hash con segreto condiviso e, se corretta, restituisce successo e delta sfida poiché era ora in uso.
quindi diventa più facile
- Il cliente desidera chiamare l'endpoint X dell'API sul server, invia la richiesta con intestazioni aggiunte (ID sfida, hash (challenge, shared-secret))
- Il server verifica la verifica e uppon successo lo elimina, esegue il metodo x e restituisce la risposta. In risposta aggiunge una nuova sfida nell'intestazione ( i.e. Challenge_id-xyz: 45egrgh3gw43gw43zrezh54egh44z54b54esb ... 54sreh5j )
se il cliente ha problemi con le sfide
- Il cliente desidera chiamare l'API Point X, invia Request with Challenge in Header
- Verifica server La sfida, una volta che il successo lo ha eliminato, si rende conto che il cliente è a corto di sfide (a causa della bassa quantità di sfide memorizzate) e ne crea di nuove. Invia Response for API Point X e aggiunge nuove sfide nelle intestazioni.
Esiste già un concetto come questo e in caso contrario, questo suona in modo molto simile a " cuocere il proprio criptaggio " o sembra legittimo? O c'è un modo migliore per farlo senza sovraccaricare l'http?