Per un progetto universitario, dovrei implementare un'API che consenta l'archiviazione e il ritracciamento delle stringhe. I client che accedono a questa API possono essere app per dispositivi mobili e dispositivi embedded a bassa potenza. I dati memorizzati non sono sensibili, ma non voglio che gli aggressori li alterino o li cancellino. Molto probabilmente non sarà usato al di fuori dei nostri esperimenti limitati, ma mi piacerebbe molto capire come questo sarebbe stato fatto nel modo giusto.
Ho i seguenti vincoli:
- Per motivi di usabilità, sarebbe bello se l'utente non fosse infastidito dal dover creare un account dopo aver installato l'app. Invece, voglio che recuperi un id / token al primo avvio, che viene generato dal server che autentica e identifica questo utente. Questo id / token è stato quindi fornito su tutte le seguenti richieste
- I miei dispositivi incorporati non possono utilizzare TLS a causa dei vincoli di archiviazione, ram e cpu
Considerate queste restrizioni, dovrei considerare questa API come un'API "pubblica", anche se in realtà non voglio che sia pubblica? C'è qualcosa che posso fare contro (dal mio lato) uso non intenzionale, oltre all'accesso limitatore di velocità?
Cose che ho considerato:
Ho pensato di avere almeno la parte in cui si ottiene un ID / token dell'API eseguito su https, nascondendo quindi dove è possibile creare un account e potenzialmente anche richiedere una chiave segreta da fornire. Tuttavia, questo mi sembra molto simile alla sicurezza attraverso l'oscurità, e sarà probabilmente incline al reverse engineering. Ma potrebbe essere meglio di niente? Inoltre, penso che dovrei usare i token con diritti limitati dopo il processo di iscrizione, specialmente per i miei dispositivi embedded, poiché probabilmente non possono gestire l'uso di https tutto il tempo. In caso contrario, rischio il furto dell'identificatore del mio account, che potrebbe essere utilizzato per cancellare tutti i dati o sovrascriverli. Questi dispositivi incorporati saranno utilizzati solo in ambienti wifi di fiducia (domestici), ma ciò non dovrebbe impedirmi di fare le cose bene.
Quindi, per me, la situazione è la seguente:
- I non posso impedire in modo affidabile alle persone di utilizzare la mia API in modi che non voglio che vengano utilizzati
- I possibile e dovrebbe proteggere i dati degli utenti esistenti dalla modifica