2009-04-18 11 views
37

Mi sono chiesto da tempo come alcuni software nascondano le chiavi segrete in modo tale da non poter essere scoperte banalmente. Solo alcuni esempi:Come nascondi le chiavi segrete nel codice?

  • Lettore DVD Software nasconde chiavi CSS
  • software con numeri/codici di registrazione seriali nasconde chiavi/hash utilizzati per convalidare i numeri di serie

Ovviamente, questi programmi fanno qualcosa di più basta avere la chiave in un byte [], in quanto ciò renderebbe facile rubare le chiavi e generare i propri numeri di serie, ecc.

Quali tipi di strategie vengono utilizzate per nascondere queste chiavi in ​​modo che non possano essere trovato facilmente?

+2

Ma come fa Adobe ad esempio con Photoshop? – Jeena

+17

Una parola: senza successo. – dmckee

risposta

35

Le ragioni per cui tali chiavi segrete sono state scoperte così facilmente sono perché erano nascoste nel software.

Evitare di nascondere i segreti del software a tutti i costi: l'offuscamento ti porterà solo lontano. Chiedetevi questo: quanto posso nascondere una chiave nel software da qualcuno con accesso completo ai disassembri, alla modalità utente e ai debugger in modalità kernel e nessun lavoro giornaliero? È solo questione di tempo prima che si rompa.

+22

Questo risponde alla domanda? –

+1

Come hai detto, "è solo questione di tempo prima che si rompa". Quindi questo è un motivo per cui questa strategia potrebbe essere accopiabile considerando che questa chiave scadrà prima di quella chiave protetta da hardware. – kdmin

1

Non è sempre necessaria una chiave per convalidare una licenza.

Ma ignorando questo fatto, la tua chiave può anche essere il risultato di un'altra funzione. In realtà non si memorizza un valore chiave specifico, ma si ha una funzione che genera la chiave al volo (sempre lo stesso risultato). Sebbene non sia impossibile, è molto più difficile da trovare poiché non stai più cercando un valore, ma devi capire che è un'equazione.

+7

Spreco di tempo. Qualsiasi cracker prenderà semplicemente il risultato della funzione direttamente dalla memoria (o forse semplicemente copierà l'intera funzione nel suo keygen).Non è un compito a casa; deve solo ottenere la risposta giusta, senza dover mostrare il suo lavoro. – Mikeage

0

Nascondere le chiavi segrete nel codice non sarà molto sicuro. Come avrai notato, i DVD e la maggior parte delle registrazioni dei numeri di serie del software vengono violati ogni giorno. Se vuoi veramente proteggere qualcosa devi usare la crittografia a chiave pubblica.

+3

La crittografia a chiave pubblica non è una soluzione. Proprio come la riservatezza delle chiavi private deve essere protetta, l'integrità delle chiavi pubbliche necessita di protezione. I meccanismi comuni sono l'hardware con contromisure di manomissione fisica o una chiave segreta basata su password. – erickson

2

Quando abbiamo iniziato a sviluppare il nostro software, abbiamo creato un file di licenza datato. Poi, ci siamo resi conto che non sono molte le persone interessate all'acquisto del nostro software. Quindi, abbiamo deciso di darlo via gratuitamente. Molte più persone hanno cominciato a interessarsi almeno provando il nostro capolavoro. Infine, abbiamo aperto il nostro software. Molti più utenti hanno iniziato a usarlo. Ora speriamo solo che un piccolo numero di questi utenti possa trasformarsi in clienti paganti (ad esempio acquistare il supporto prodotti o chiedere la personalizzazione).

La linea di fondo è che se qualcuno vuole crackare il software, lo farà comunque. Vale veramente la pena perdere tempo a cercare di proteggerlo con questa chiave segreta nascosta?

+1

Qual è il tuo software? – shoosh

+8

L'intero processo della tua attività sembra piuttosto arretrato e ad-hoc. – Hejazzman

5

Non è possibile nascondere un tasto per sempre. Ma puoi sicuramente renderlo difficile da trovare. Alcuni approcci sono di crittografare la chiave in memoria, conservare più copie (magari crittografate in modo diverso) che vengono controllate l'una contro l'altra, lasciare copie fittizie a cui accedere, memorizzare la chiave in qualche formato bizzarro, ecc. Nessuno di questi funzionerà se qualcuno davvero vuole la tua chiave, ma puoi almeno dissuadere un aggressore casuale/inesperto.

+0

In genere non è così difficile per le persone trovare anche le chiavi nascoste se sono determinate a farlo. –

-2

Penso che questo sia uno dei motivi principali per cui DVD e BluRay sono stati violati così rapidamente. Penso che l'unico modo in cui possono davvero impedire alla persona media di copiare digitalmente i film in casa è se hanno creato un supporto che non è stato concesso in licenza per l'uso sui computer e può essere utilizzato solo su lettori certificati. Tagliare la parte del mercato che voleva guardare film sui loro computer e laptop, ma probabilmente si sarebbe fermato dall'avere perfetti rip del digitale per un po 'più a lungo, e avrebbe impedito alla persona media di essere in grado di farlo.

6

La linea di fondo è, non è possibile. Vedi qualsiasi altro commento qui per i motivi per cui. Anche un software di crittografia come PGP/GPG memorizza le chiavi in ​​un file, quindi sollecita urgentemente quei file da conservare su una chiavetta USB in una cassaforte, o qualcos'altro sicuro. Verranno individuate le chiavi memorizzate come parte del codice eseguibile.

In effetti, se si sta tentando di crittografare qualsiasi cosa su un computer client che verrà decrittografato dal client come parte delle normali operazioni, anche questa è una scusa. Le macchine client sono intrinsecamente insicure e non è possibile controllare ciò che saranno in grado di fare sui dati.

Se si sta tentando di eseguire l'autenticazione, invece, esaminare l'autenticazione basata su Internet con gli accessi a un server o un tipo di codice Key generato utilizzato per convalidare il software.

Le chiavi segrete come parte di una coppia di chiavi pubblica-privata devono essere conservate in file di dati che possono essere protetti. Le chiavi simmetriche dovrebbero essere generate al volo come chiavi di sessione, quindi scartate. Presuma sempre che chiunque abbia una chiave segreta o di sessione sul proprio computer sarà in grado di scoprirlo e usarlo in base alle proprie intenzioni.

Leggere "Applied Cryptography" di Bruce Schneier per ulteriori informazioni.

+1

La frase "Persino software di crittografia come PGP/GPG memorizza le chiavi in ​​un file" è fuorviante. PGP cripta quelle chiavi usando una passphrase conosciuta solo all'utente. PGP utilizza anche una memoria sicura per le chiavi, assicurando che non vengano mai salvati nella cache dell'HD e che il PGP sia sottoposto a lunghe procedure per rendere difficile la ricerca di una chiave mediante l'ispezione della memoria. Se potessi diminuire questa risposta lo farei. – MrEvil

+0

Il mio punto era che non ci sono dati segreti memorizzati nel codice sorgente. Spetta all'utente proteggere le proprie chiavi segrete. Anche con una passphrase sulle chiavi segrete, una volta che una parte malintenzionata ha accesso al file della chiave segreta, è game over. Memorizzare una chiave segreta ovunque accessibile a chiunque tranne una parte fidata risulterà dolorosa, sia che si tratti di file EXE, RAM o file. –

12

Basta nascondere la chiave da qualche parte e decrittografarla quando ne hai bisogno. Usare la chiave "in sicurezza" è la parte complicata. I cracker potrebbero impostare un punto di interruzione nel punto in cui si utilizza la chiave decodificata e scaricarla. Potrebbero eseguire la scansione del codice per motivi che mostrano che si sta utilizzando un algoritmo crittografico noto (la maggior parte degli algoritmi ha tabelle precalcolate). ecc. ecc.

Ecco perché è necessario rendere l'intero eseguibile del software difficile da analizzare. Per questo si usano i pacchetti eseguibili, il codice in esecuzione in una macchina virtuale, i controlli di integrità, ecc. Tutto ciò per rallentare il debug e modificare il codice.

Come la maggior parte delle persone sottolinea che non si può fermare nessuno, basta rallentarli. Andrei in un forum di cracker e chiederei dei suggerimenti sui problemi chiave nascosti. Sono molto probabilmente utili se lo chiedi gentilmente.

ps. La crittografia a chiave pubblica non nasconderà meglio la chiave, ma potrebbe rendere più difficile (o teoricamente impossibile) creare un generatore di chiavi, se stai facendo uno schema di licenza.

1

Se ci si può permettere, il migliore è quello di memorizzare la chiave privata in un token USB crittografico. La chiave è solo in scrittura, cioè puoi impostarla ma non leggerla. Il token esegue internamente le operazioni crittografiche, nel suo hardware. Diventa molto complicato recuperare la chiave (se il token non ha vulnerabilità nota, il che non è il caso di quelli più vecchi).

+0

Questo tipo di protezione è solo un livello rispetto al software. È possibile replicare la chiave USB utilizzando qualsiasi dumping di memoria. Se vai avanti e cerchi di controllare gli utenti online con un determinato ID, allora puoi applicare patch anche alla rete. Non esiste un vero modo per proteggere il codice. Il modo migliore per farlo è dissapointare le persone che cercano di decifrare e fare un rinnovo del sistema in maniera regolare. Il piccolo intervallo di tempo tra te e colui che ti può rompere è il tuo unico amico qui. – erm3nda

+0

Il modo migliore per dissapoint gli utenti di utilizzare software crackizzati, è stato il primo a rilasciare un crack e a mettere un sacco di virus su di esso. In questo modo puoi dissapointare qualcuno più imporante di colui che può crearti ---> l'utente che vuole usare il tuo software. Crea un piano tariffario conveniente e otterrai molto più successo delle chiavi hidding. – erm3nda

0

Non è possibile, è impossibile. Qualsiasi utente malintenzionato che ha accesso al computer di destinazione sarebbe in grado di disassemblare il codice per trovarlo o trovare il file chiave sul computer di destinazione, ecc.

L'UNICO modo per garantire che la chiave di crittografia sia protetta, è averlo inserito manualmente dall'utente quando è necessario.

Problemi correlati