Quale sarebbe un modo facile, affidabile e sicuro (preferibilmente il migliore) per verificare che una data presa da un'app per Android sia la data reale?

-1

Per facile intendo facile da implementare nel codice.

Per affidabilità intendo che non dipende da fonti che potrebbero fallire in base alle quali non esiste un buon controllo.

Per sicurezza intendo che non può essere aggirato o che, se potesse essere risolto, sarebbe piuttosto complicato.

La soluzione migliore a cui riesco a pensare al momento è cercare di verificare che l'utente abbia la data e l'ora automatiche e che il fuso orario automatico sia abilitato. Ho pensato che questo potesse essere risolto abilitando la modalità volo, o forse qualche altra opzione, ma almeno nel mio smartphone, ritorna alla data corretta. Indovina che ci sono alcune cose su come ottenere la data nei telefoni che non capisco, comunque non posso essere sicuro che funzioni per tutti gli smartphone.

Conosco altri metodi come l'utilizzo di alcuni server NTP, ma penso che ciò aggiungerebbe complessità non necessaria e meno affidabilità.

Mi piacerebbe ricevere suggerimenti su quale sarebbe un buon modo per farlo.

PS: sto modificando per richiesta.

La mia app consente di eseguire una determinata azione nell'app solo una volta alla settimana.

Non è qualcosa di importante quello che succede se l'utente riesce a ingannare l'app facendola credere che sia un'altra data, non mi interessa molto forse un 5% di utenti che inducono l'app a credere che sia un'altra data, ma affinché ciò avvenga, almeno tutti i modi banali in cui il recupero della data potrebbe essere risolto non dovrebbero essere consentiti.

    
posta Jesús Gómez 10.09.2017 - 16:38
fonte

1 risposta

1

Come può la tua app sapere che il telefono utilizza la data reale e che non è stata manomessa?

  1. Cerca una fonte autorevole, come un server NTP, sperando che l'utente non abbia le capacità e le attrezzature per dirottare la tua richiesta NTP

  2. Cerca altre fonti per vedere se hanno la stessa data di te:

    • Ad esempio, puoi utilizzare la ora GPS e verificare se è compatibile con Data. Non sono sicuro di come ottenere l'ora GPS su Android, ma GnssClock sembra un buon inizio, da cercare. Immagino che il metodo getFullBiasNanos() in particolare potrebbe aiutare. La cosa buona è che è molto difficile dirottare un segnale GPS.
    • Esegui una query su un sito di notizie popolare per confrontare se le date sono compatibili (ma è meglio andare direttamente a un server NTP).
  3. Crea il tuo controllo di coerenza, registrando ogni ora la data e l'ora in UTC e confrontando l'ora UTC corrente con la volta precedente. Ciò garantisce che l'utente non possa eseguire il back-date del suo dispositivo. Se è possibile farlo e confrontare la differenza con un timer che misura il tempo trascorso tra i due eventi, sarebbe persino più utile. Ma onestamente, se temete che la luce dell'utente manomettere il sistema, potrebbe manomettere il log, quindi è necessario crittografarlo. Anche in questo caso è complesso almeno quanto interrogare un server NTP.

risposta data 10.09.2017 - 17:16
fonte

Leggi altre domande sui tag