2010-10-19 31 views
18

Il sistema di registrazione shareware attualmente in sviluppo incorpora la chiave pubblica DSA nell'eseguibile stesso e la chiave privata risiede su un server. (Per il bene della discussione supponiamo che il server è sicuro al 100%, e non v'è alcun modo per chiunque di mettere le mani sulla chiave privata.)DSA: che cosa può fare un hacker con * solo * una chiave pubblica?

Ogni volta che il programma è stato acquistato, il server genera una licenza per l'utente firmando il nome dell'utente con la chiave privata. Tale licenza viene quindi inviata via email all'utente. Una volta che l'utente inserisce manualmente il proprio nome e la propria licenza nell'applicazione shareware, la chiave pubblica incorporata nell'applicazione viene verificata come valida o non valida.

Tuttavia, sarebbe abbastanza banale per una persona determinata con il giusto "know-how" per disassemblare l'eseguibile e recuperare la chiave pubblica.

La mia domanda qui è, cosa potrebbero fare con esso? Una chiave pubblica è di per sé completamente innocua? La chiave pubblica è abbastanza informazioni per decodificare un generatore di chiavi?

Menti curiose vogliono sapere. Grazie in anticipo!

+0

Grazie a tutti! Il consenso è sicuramente "Non preoccuparti della chiave pubblica. Preoccupati per l'intero processo di verifica che viene eluso". Debitamente annotato. :) – kurige

+0

Utilizzare questo per il debug https://8gwifi.org/dsafunctions.jsp – anish

risposta

23

La chiave pubblica non dovrebbe ottenere nulla di utile. Tuttavia, se il controllo è facilmente reperibile, potrebbe essere in grado di aggirarlo semplicemente e applicare patch in un test che riesce sempre senza mai preoccuparsi di verificare la licenza rispetto alla chiave pubblica.

+2

+1 (cosa stavo per postare). È molto più probabile che la parte di verifica venga eliminata. – ChristopheD

+2

Mi picchia pure. La crittografia assimetrica è progettata in modo tale che i segreti non debbano essere condivisi, quindi finché il metodo di verifica non viene eluso del tutto, la chiave pubblica è proprio quella - pubblica. – Tristan

+0

Completamente a destra. Disassembla l'eseguibile e ignora la chiave pubblica - sostituisci invece il test per restituire sempre "licenza". –

1

Supponendo di utilizzare un metodo di crittografia ancora non interrotto, la chiave pubblica non può essere utilizzata per determinare la chiave privata. È inteso per essere veramente pubblico; conosciuto da chiunque.

1

Basta avere la chiave pubblica non è abbastanza informazioni per fare qualcosa di utile con.

L'unica cosa che si può fare è che qualcuno potrebbe criptare un messaggio usando la chiave pubblica che può essere decifrata solo con la chiave privata. Ma se la chiave privata è solo sul server, questo non farà nulla.

Qualsiasi altro attacco richiederebbe di provare a calcolare la chiave privata, che non verrà accelerata affatto avendo la chiave pubblica.

7

Una chiave pubblica da sola consentirebbe loro di decifrare qualsiasi informazione crittografata inviata dal server. Questo è tutto. Passando dalla chiave pubblica alla chiave privata è eccezionalmente difficile; è così che funziona la crittografia a chiave pubblica. (Per "eccezionalmente" intendo dire che è progettato per resistere a sforzi governativi ben finanziati, se impedisce alla NSA di incrinarti, sarà sicuramente abbastanza buono per fermare Joe Blow.)

Nota che non funziona Aiuta DRM, che suona un po 'come stai cercando di fare. DRM è semplicemente rotto dal design; se l'attaccante ha le informazioni e la chiave per sbloccarlo nei dispositivi a lui vicini, è già finito. Se si fornisce una chiave a un utente malintenzionato, potrebbe anche essere pubblica poiché è sicuro che non sarà disposto a mantenerlo segreto ...

+0

Disconnessione senza spiegazione? Spettacolo povero. –

+0

Mi dispiace per quello. Significa rispondere, ma si è distratto. Sto usando DSA per firmare, non crittografare. La differenza è che non sto "nascondendo" le informazioni; Sto solo garantendo (o tentando di garantire) l'origine (i miei server). In secondo luogo, non sono sicuro di cosa intendi per DRM. Stai dicendo che shareware e/o programmi di licenza sono un sistema rotto? Se è così, puoi benissimo avere un punto, ma non ha nulla a che fare con la domanda originale. Penso che quello che potresti dire è che, con una chiave pubblica incorporata, una singola licenza valida può essere utilizzata da più parti, il che è vero. – kurige

+0

@kurige: In definitiva, quando lavori con la sicurezza devi definire ** esattamente ** ciò che stai proteggendo, poiché non tutte le combinazioni sono possibili (supponendo che tu voglia del software utilizzabile). Io tendo a favorire l'inserimento di funzionalità critiche in un server che controllo in modo che gli utenti non possano fare nulla di utile senza passare i controlli che impongo: per le classi di app che scrivo, il requisito conseguente per la connettività di rete non è un problema aggiuntivo - e dando via la fonte del client in quanto non ha valore in sé. –

1

Nella crittografia asimmetrica è sicuro fornire la chiave pubblica a un utente malintenzionato. Tuttavia, questo valore, insieme a una firma o un testo cifrato prodotto da una chiave privata, può essere utilizzato in Trivial Attack per ottenere la chiave privata corrispondente.

+1

Non trattenere il respiro aspettando che ciò accada; la forzatura bruta del DSA richiede molto lavoro perché lo spazio chiave è colossale e IIRC non ha collegamenti noti. Inoltre, sei ** supposto ** di poter dire a tutti la tua chiave pubblica e la firma; è così che funziona la crittografia a chiave pubblica *. –

+0

@Donal Fellows e questo è il definitivo di un attacco banale. Non essere così veloce nell'assumere che le persone intorno a te siano stupide come le rocce. – rook

+0

Ah, ma con la dimensione della chiave della dimensione che è, "banale" non è affatto banale. –

0

Il punto è che questo tipo di crittografia è progettato per proteggere il contenuto del messaggio e per verificare l'autenticità del mittente che in questo caso è chiaramente noto all'utente, ad esempio Nome e fornitore ecc.Sarebbe molto più bello proteggere una sezione del codice con questo tipo di crittografia in modo tale che frammenti cruciali di codice rimangano confusi finché non viene utilizzata la chiave corretta.

volta che la chiave viene utilizzata tuttavia l'utente può decifrare e rendere copie del software. Il software completamente protetto è completamente inutilizzabile. Sebbene non correlato this è una lettura interessante per quanto riguarda la protezione delle cose.

+1

È * possibile * proteggere completamente il software, ma solo non dando mai alle persone una copia. Questo non è così sciocco come sembra; software-as-a-service è un'alternativa ragionevole per molte situazioni. –

+0

Quindi non è proprio il software che si sta vendendo .. è l'infrastruttura .. ad es. Google e la maggior parte dei giganti del web. Rendendolo funzionare potrebbe costare più investimenti rispetto al solo software. – whatnick

2

Le chiavi pubbliche sono utilizzate ovunque: moduli di accesso, sicurezza delle transazioni bancarie, autenticazione lato client ecc. Quindi la risposta breve è che non dovresti preoccuparti, perché molte altre persone più intelligenti hanno esaminato questo problema e accettato la distribuzione di chiavi pubbliche agli endpoint.

Cosa possono dire le persone dalla tua chiave pubblica? Ovviamente saprebbero il nome di una chiave e la lunghezza della chiave. Presumo che la chiave sia parte di un certificato, che potrebbe anche contenere alcuni dettagli sulla tua azienda e l'URL del sito web.

Le mie domande a voi sono:

1) Perché sei preoccupato di una chiave pubblica in un file eseguibile? Qualsiasi cracker mezzo decente cambierebbe semplicemente il tuo eseguibile per bypassare del tutto il controllo della chiave pubblica. Il fatto che la crittografia sia forte non ha senso quando si fornisce un binario al client che può essere modificato.

2) Siete a conoscenza di pasticcio si può essere sempre te stesso in? Non c'è nulla di intrinsecamente sbagliato nell'usare la crittografia a chiave pubblica per proteggere un binario, ma si può finire con i problemi man mano che il sistema si sviluppa. Cose come chiavi scadute, rimborsi chiave e emissione di chiavi (credo che questo sia uno strumento che stai sviluppando per vendere) possono diventare un grande dolore. Eppure sarai ancora bloccato dalla realtà che la tua sfida più grande è impedire ai cracker di reindirizzare il file binario per evitare del tutto il controllo di sicurezza.

+0

Quello a cui sto lavorando è strettamente per uso personale. Sto solo lavorando su un sistema che posso riutilizzare nei miei progetti - non sto cercando di vendere il sistema stesso. Ho deciso su alcune cose che rendono il mio lavoro molto più facile a lungo termine e più piacevole per i miei clienti: 1) Nessuna scadenza 2) Nessuna telefonata. Quest'ultimo è il più importante per me - e incorporare la chiave pubblica mi permette di fare proprio questo - ero solo curioso di sapere quali implicazioni potrei aver perso. – kurige

+0

Discreto. Buona fortuna e buona visione del progetto! –

0

Non sono d'accordo sul fatto che la chiave pubblica non sia utile. Genero la mia coppia di chiavi pubblica e privata e supponiamo di trovare i bit della chiave pubblica nell'eseguibile. Cambio la chiave pubblica nella mia chiave pubblica. Ora posso firmare qualsiasi cosa con la mia chiave privata, il programma lo accetterà.