Domanda

Molti dei clienti della mia azienda usare il nostro software di acquisizione dati in una base di ricerca. A causa della natura della ricerca in generale, alcuni dei clienti chiedono che i dati vengono crittografati per impedire manomissioni - ci potrebbero essere gravi conseguenze se i loro dati ha dimostrato di essere falsificati

.

Alcuni dei nostri binario software crittografa i file di output con una password memorizzata nella fonte, che assomiglia a caratteri casuali. A livello software, siamo in grado di aprire i file crittografati per le operazioni di sola lettura. Se qualcuno davvero ha voluto scoprire la password in modo che potessero alterare i dati, sarebbe possibile, ma sarebbe un sacco di lavoro.

Sto esaminando con Python per lo sviluppo rapido di un altro pezzo di software. Per duplicare la funzionalità di crittografia per la sconfitta / scoraggiare la manomissione dei dati, la migliore idea mi è venuta in mente finora è usare solo ctypes con una DLL per le operazioni di scrittura / lettura dei file, in modo che il metodo di crittografia e decrittografia è "sufficientemente "offuscato.

Siamo ben consapevoli del fatto che un metodo "uncrackable" è irraggiungibile, ma allo stesso tempo io non sono, ovviamente, confortevole con solo avere la crittografia / decrittografia approcci seduto lì in testo normale nel codice sorgente Python. A "molto forte abbattimento dei dati manomissione" sarebbe abbastanza buono, credo.

Quale sarebbe l'approccio migliore per raggiungere una via di mezzo di cifratura o altra prova di integrità dei dati utilizzando Python? Ho visto un altro post parlare di generazione di un 'tamper firma prova', ma se una firma è stata generata in puro Python allora sarebbe banale per generare una firma per tutti i dati arbitrari. We potrebbe essere in grado di telefono di casa per dimostrare l'integrità dei dati, ma che sembra un grande disagio per tutti gli interessati.

È stato utile?

Soluzione

In linea di principio, non si desidera utilizzare la crittografia per la protezione contro manomissioni, invece si desidera utilizzare una firma digitale. La crittografia consente di riservatezza , ma si sta dopo integrità .

calcolare un valore hash sui dati e memorizzare sia il valore hash in un luogo in cui si sa che non può essere manomesso o firmare digitalmente esso.

Nel tuo caso, sembra che si vuole garantire che solo il software può aver generato i file? Come dici tu, non ci può esistere un modo veramente sicuro per fare questo quando gli utenti hanno accesso al software in quanto possono strappare lo distingue e trovare nessuna chiavi segrete che includete. Dato che vincolo, credo che la tua idea di usare una DLL è circa buono come si può fare.

Altri suggerimenti

Se si intende inserire le password da qualche parte, si sta già hosed. Non si può garantire nulla.

Tuttavia, è possibile utilizzare il tasto / crittografia a chiave privata pubblica per assicurarsi che i dati non è stato manomesso.

Il modo in cui funziona è questo:

  1. generare un / privato coppia di chiavi a chiave pubblica.
  2. Mantenere la chiave privata sicura, distribuire la chiave pubblica.
  3. Hash i dati e poi firmare l'hash con la chiave privata.
  4. Usare la chiave pubblica per verificare l'hash.

Ciò rende in modo efficace i dati di sola lettura al di fuori della vostra azienda, e fornisce il programma di un modo semplice per verificare che i dati non è stato modificato senza distribuire le password.

Ecco un altro problema. Presumibilmente, il software di acquisizione dei dati sta raccogliendo i dati da una fonte esterna (come una sorta di strumento di misura), quindi fare qualunque processsing è necessario sui dati grezzi e memorizzare i risultati. Indipendentemente da ciò che metodo utilizzato nel programma, un altro possibile vettore di attacco potrebbe essere quella di alimentare in cattive dati al programma, e il programma stesso non ha alcun modo di sapere che si sta alimentando nei dati costituiti piuttosto che i dati che è venuto dalla misura dispositivo. Ma questo potrebbe non essere risolvibile.

.

Un altro possibile vettore di attacco (e probabilmente quella che si sono preoccupati è la manomissione dei dati sul computer dopo che è stato memorizzato Ecco un'idea per mitigare questo rischio: impostare un server separato (questo potrebbe essere sia qualcosa di tuo azienda avrebbe eseguito, o più probabilmente sarebbe qualcosa che il cliente avrebbe istituito), con un servizio web protetto da password che consente a un utente di aggiungere (ma non elimina) record di dati. Quindi avere il vostro programma, quando raccoglie i dati, inviarlo a il server (utilizzando la stringa della password / connessione che è memorizzato nel programma). Avere il vostro programma di scrivere solo i dati alla macchina locale se riceve la conferma che i dati sono stati memorizzati correttamente sul server.

Ora supponiamo un utente malintenzionato tenta di manomettere i dati sul client. Se riesce a decodificare il programma allora può ovviamente ancora inviare al server per l'archiviazione, così come il programma ha fatto. Ma il server hanno ancora i dati originali, quindi la manomissione sarà rilevabile perché il server si concluderà con entrambi i dati originali e modificato - il cliente non sarà in grado di cancellare i documenti originali. (Il programma client, naturalmente, non ha bisogno di sapere come cancellare record sul server.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top