Protezione dei passphrase all'interno di un'applicazione

1

Prima di tutto, non ho molta familiarità con le best practice di crittografia.

Il mio caso d'uso è semplice: sto creando un'applicazione che leggerà documenti crittografati e li decodificherà dinamicamente per fare qualche operazione sui dati che essi contengono.

Stavo leggendo che dovevo usare AES a 128 o 256 bit, quindi ho installato OpenSLL nella mia macchina Linux per vedere come viene eseguita la crittografia / decrittografia. Ho crittografato e decodificato un documento di esempio e ho notato che AES richiede una passphrase.

Come posso memorizzare questa frase segreta nella mia applicazione in modo sicuro in modo che qualcuno non possa facilmente decodificare il file binario, scoprire la mia passphrase e decifrare i documenti al di fuori dell'applicazione?

    
posta nickb 04.08.2012 - 02:20
fonte

2 risposte

4

Ciò di cui stai parlando, in sostanza, è DRM. Se fornisci all'utente i dati che stai cercando di proteggere in qualsiasi forma non crittografata, essi hanno i dati e possono fare copie. È sulla loro macchina, ce l'hai data loro.

  • Se utilizzi AES o qualsiasi forma di crittosistema simmetrico, un utente malintenzionato può eseguire il reverse engineering della tua applicazione e scoprire la chiave.
  • Se la chiave viene fornita solo in fase di esecuzione, è possibile caricare il programma in un debugger e impostare un punto di interruzione per acquisire la chiave.
  • Quando decifri il documento, chiunque può impostare un punto di interruzione nella routine di decrittografia e acquisire il buffer di testo in chiaro dalla memoria.

I trucchi per l'imballaggio, l'offuscamento e l'anti-debug sono banali da bypassare per chiunque sia ragionevolmente esperto nel reverse engineering. Questo è evidente; pensa a tutti i principali titoli di giochi / software usciti negli ultimi 20 anni. Ogni meccanismo di protezione dalla copia è caduto per invertire la progettazione. Lo stesso vale per malware e media DRM.

Tutto ciò si riduce a una cosa: tutto ciò che inserisci sul computer del tuo cliente è thes da modificare e analizzare.

Ho la sensazione che la tua situazione debba essere ripensata. Piuttosto che escogitare una soluzione potenziale e cercare di trovare il modo di farlo funzionare, pensa a soluzioni alternative. L'elaborazione del documento può essere eseguita su un server centrale, fuori dalle mani dell'utente?

    
risposta data 04.08.2012 - 10:37
fonte
0

Generalmente non puoi fermare un hacker determinato o con esperienza. Il mio suggerimento non è di preoccuparsi troppo perché, a meno che tu non abbia molti utenti (o soldi), è improbabile che qualcuno possa seriamente impegnarsi a hackerare la tua applicazione; Concentrati sulla consegna di un fantastico software.

Tuttavia puoi:

Evita di memorizzare le password come valori letterali stringa - Questo dovrebbe essere ovvio.

Oscura i tuoi passphrase - Usa una raccolta di semplici parole inglesi o caratteri casuali per memorizzare la tua passphrase in modo da confondere l'hacker o rendere meno evidenti le password.

Nomi dei simboli oscuri - Esiste la possibilità che un hacker possa estrarre i nomi di simboli evidenti dal tuo binario. Ad esempio, class keyChain . Puoi ingannare mantenendo la leggibilità utilizzando #define keyChain readModule .

Flusso di applicazioni oscure - Supponiamo che l'hacker funzioni alla rovescia dalla decifratura del file per trovare la passphrase, è possibile utilizzare i puntatori di funzione per oscurare il flusso dell'applicazione apparso.

Genera la passphrase in fase di runtime - Scrivi la tua funzione che genera e sputa la passphrase durante il runtime.

Cifra / decripta passphrase con la tua funzione - Se si utilizza un'altra libreria di terze parti, un utente malintenzionato può cercare le chiamate comuni. Ovviamente sii intelligente con questo e non usare una qualche forma di caesar cipher , e ricordati di usarlo solo per nascondere la passphrase, cioè usa ancora AES da OpenSSL per la tua crittografia e decrittazione dei dati reali. Tuttavia questo ti ricondurrà all'inizio della memorizzazione sicura di una password. Il guadagno è nel tentativo di impedire all'hacker di cercare le chiamate alle funzioni di decrittografia / crittografia più comuni.

Indipendentemente da ciò, nessuno di questi fermerà completamente un hacker. Possono rallentare o impedire un principiante, oppure possono fare assolutamente nulla.

Lavorare per rendere il tuo software così bello da evitarlo direttamente nella decrittografia non è interessante. Convinci gli utenti che vale la pena usare il tuo software.

    
risposta data 04.08.2012 - 05:19
fonte

Leggi altre domande sui tag