Clone Snapchat: come posso proteggere le notifiche pre-scaricate in modo che non possano essere aperte al di fuori dell'app?

0

Dire che sto creando un'app clone snapchat per Android e iOS. Diciamo che ho uno snapchat da Baz. Voglio pre-scaricare l'audio per questa snapchat. Tuttavia, in qualità di sviluppatore, voglio proteggere questo audio dall'essere visibile all'esterno dell'app.

Ho pensato di crittografarlo usando AES con una IV e una chiave entrambe generate da una funzione pseudo-casuale che accetta l'ID univoco dell'utente come input. Tuttavia, se un utente malintenzionato ha scoperto che questo è il modo in cui crittografiamo i nostri file e abbiamo accesso al nostro PRF, sarebbe facilmente in grado di decrittografarlo e archiviarlo in modo permanente. Il fatto è che non ho abbastanza esperienza in crittografia o programmazione Android per capire se è davvero una preoccupazione o meno. L'hacker deve imparare molto sul nostro codice per romperlo, ma potrebbe ottenere più o meno tutto ciò guardando la fonte non offuscata della nostra app.

Il mio approccio suggerito è crittograficamente sicuro? Quali altri approcci, migliori o più semplici, potrei prendere per risolvere questo problema?

    
posta Dennis L 15.02.2014 - 22:38
fonte

5 risposte

1

In linea di principio, non c'è modo di risolvere questo problema. Snapchat è una bugia. Se Alice è motivata e ben informata, può fare in modo di creare copie persistenti di tutte le immagini che può visualizzare. Ci sono probabilmente dozzine di modi per farlo: creare schermate, decodificare l'app per rubare la chiave di decodifica, rovistare nella memoria per trovare i dati e fare una copia, ecc.

Non è possibile impedire a un utente motivato e ben informato di creare una copia permanente. Cercare di fermarlo è come cercare di rendere acqua non bagnata .

Tutto quello che puoi fare è alzare un pochino la barra, in modo che non sia banale eseguire una copia permanente (cioè, rendere così improbabile che gli utenti non riconosciuti o immotivati abbiano successo). Questo è un approccio di riduzione del rischio. Ma nulla sarà sicuro in linea di principio. Di conseguenza, questa non è una vera domanda in grado di risolvere la crittografia. È più una domanda sulla sicurezza. Potresti voler provare a chiedere su Security.SE.

    
risposta data 16.02.2014 - 03:12
fonte
1

Stai cercando di risolvere un problema irrisolvibile. Qualcuno può semplicemente prendere uno screenshot dell'immagine, effettuare una registrazione della registrazione audio, fare un video del video scambiato.

Chiunque abbia accesso al dispositivo ricevente ha già accesso a qualsiasi chiave di crittografia / decrittografia che potresti usare. Quindi, annusano semplicemente la connessione e memorizzano il file in modo permanente.

    
risposta data 16.02.2014 - 11:16
fonte
0

È una preoccupazione, ma non per l'utente occasionale. Si potrebbe fare in modo che l'applicazione ottenga la chiave solo all'avvio della finestra di visualizzazione e rimuoverla quando è terminata, ma non c'è modo di impedire un dump della memoria e quindi tentare manualmente di estrarre la chiave.

Non esiste un modo crittografico o di programmazione per salvarti qui. Se vuoi controllare il modo in cui qualcuno può consumare i media a cui effettivamente hanno accesso per consumare, sei saldamente nel regno dei DRM ed è una battaglia persa.

    
risposta data 15.02.2014 - 22:52
fonte
0

Principio di Kerckhoffs (anche chiamato desiderata di Kerckhoffs, ipotesi di Kerckhoffs, assioma o legge) è stato dichiarato da Auguste Kerckhoffs nel 19 ° secolo: Un sistema di crittografia dovrebbe essere sicuro anche se tutto ciò che riguarda il sistema, ad eccezione della chiave, è di dominio pubblico . Il principio di Kerckhoffs è stato riformulato (o forse formulato autonomamente) da Claude Shannon come " il nemico conosce il sistema "

    
risposta data 15.02.2014 - 23:55
fonte
0

Is my suggested approach cryptographically secure?

In effetti, un utente malintenzionato esaminerà la tua implementazione e sfrutterà il fatto che stai facendo affidamento su un PRF a cui l'utente malintenzionato può accedere. Avresti almeno bisogno di separare il PRF dal resto per essere sicuro. Soprattutto, dal momento che dichiari che avresti inviato un ID utente univoco al PRF durante il tuo "processo di autorizzazione" (chiamiamolo) ". Se supponiamo che la chiave univoca non cambi, stiamo anche spostando verso un problema di riutilizzo della chiave, che apre ulteriori vettori di attacco; soprattutto con la tua implementazione di esempio. Ma non entrerò in troppi dettagli, perché diventerebbe presto troppo ampio. La breve storia è: hai ragione, la tua implementazione descritta non è sicura ...

What other, better or simpler approaches could I take to solving this problem?

Potrebbero essere facilmente trovate soluzioni potenziali in crittografia a chiave pubblica . Oppure, potresti provare a fare affidamento su uno scambio dati autorizzato con un server web utilizzando una connessione HTTPS protetta in modo che il server fornisca la funzionalità PRF, ma questo è meno sicuro e non sono sicuro se soddisfi tutte le tue esigenze crittografiche .

Personalmente, consiglierei di andare per cripto quando si tratta di un'app di comunicazione come la descrivi nella tua domanda, perché è il solito modo di gestire la situazione / funzionalità che descrivi. Può sembrare un po 'noioso, ma non è necessario reinventare la ruota finché sono disponibili opzioni ben controllate. Soprattutto se la tua conoscenza crittografica non è (almeno) a livello professionale. E anche in questo caso, i professionisti tenderanno a sperimentare cripto-implementazioni invece di provare a creare la loro propria cripto-soluzione. È probabile che tu stia scherzando (come il PRF su cui fai affidamento sarebbe condiviso con gli attaccanti) è troppo grande per ... un difetto minore nella tua crittografia può rapidamente trasformarsi in un'app 100% insicura.

Ora non hai menzionato alcun linguaggio di programmazione, quindi non posso indicarti una direzione specifica, ma le soluzioni a chiave pubblica (librerie ecc.) sono disponibili per quasi tutti i linguaggi di programmazione. Dovrebbe essere facile trovare qualcosa di appropriato per i tuoi scopi. E se qualsiasi domanda relativa alla chiave crittografica pubblica stessa si presenta lungo il percorso, si prega di sentirsi invitati a inviare un'altra domanda qui come Crypto.SE.

    
risposta data 16.02.2014 - 00:33
fonte

Leggi altre domande sui tag