2010-02-03 29 views
5

-new- Ho trovato un altro uso. Ci sono alcuni dati che mi sono stati trasmessi tramite i dati POST di HTTPS e vorrei memorizzarli nel mio db (come ad esempio il nome da nubile della madre che potrebbe essere necessario leggere in seguito per l'ortografia anziché controllare in modo errato se l'hash corrisponde). Ho solo bisogno di quella sezione crittografata e non l'intero DB e l'utilizzo di un DB separato potrebbe non valerne la pena. Domanda: Come potrei usare una chiave pubblica premade per crittografare una chiave simmetrica + testo usando .NET? (il resto è per il contesto, voglio solo una risposta plz)Crittografia con app pubblica/privata chiave in .net

-edit- Ho fatto prima la crittografia simmetrica. Come crittografare la chiave simmetrica con la chiave pubblica? un bel bonus è se puoi dirmi come generare la chiave pubblica/privata in un'app separata in modo da poterli creare e memorizzare solo la chiave pubblica nella mia app.

Sto prendendo in considerazione il fatto di avere i backup meno costosi e meno stressati dei siti in modo automatico da un sito più occupato. Il trasferimento dei dati non è un problema dato che posso usare https ma non mi fido del tutto che il mio sito più economico sia sicuro o che non ci sia qualcuno che guardi i miei file. Principalmente voglio proteggere l'indirizzo email e il PM se li ho sul sito.

Quindi mi chiedo come posso avere una chiave pubblica o privata nella mia app che crittografa i dati in modo che solo io (o chiunque fornisca la chiave) possa decodificare il backup. Come faccio questo in .NET. loggando e trasferendo posso scrivere in pochi minuti ma come faccio a criptare lo stream mentre lo scrivo?

-edit- mi ha appena colpito. L'utente/pass non sarebbe un segreto. Quindi dovrei crittografare i miei backup prima del trasferimento. Come faccio a crittografare una chiave simmetrica con una chiave pubblica usando .NET. Quindi decifralo dalla mia parte. Crittografa il file con una chiave simmetrica che so come fare.

+2

Lo scopo della crittografia è quello di sfruttare la sicurezza di una piccola chiave nella sicurezza di grandi quantità di dati. ** Come hai intenzione di assicurarti che la tua chiave privata rimanga un segreto? ** La crittografia dei bit è semplice; la gestione delle chiavi è solitamente in caso di guasto dei sistemi crittografici. –

+0

Sono positivo se tengo una chiave per me e metto l'altra chiave nell'app che posso cifrare senza problemi. Non conosco le funzioni/lib di .NET per eseguire la crittografia della chiave pubblica/privata. Una volta ho usato la crittografia simmetrica in.net –

risposta

14

Primo: difesa approfondita. In caso di dubbi sulla sicurezza del sito di backup , proteggere il sito di backup. Attenuare gli attacchi tramite crittografia è una buona idea, ma non dovrebbe essere l'idea solo.

In secondo luogo, perché stai pensando di utilizzare la crittografia a chiave pubblica/privata? Normalmente si utilizza la crittografia della chiave pubblica/privata solo quando si tenta di comunicare un messaggio da un mittente a un destinatario. Quale valore aggiunge la criptazione della chiave pubblica allo scenario?

Per crittografare il flusso in C#, questa pagina potrebbe aiutare:

http://support.microsoft.com/kb/307010

UPDATE:

Assolutamente sì, è necessario crittografare i file prima di arrivare al sito che si si presume che sia compromesso.

Credi che il sito potrebbe essere insicuro. L'ipotesi che dovresti fare è che il sito è il tuo nemico e sta cercando di farti del male. Inizia a pensare come pensa il tuo aggressore. Cosa farà il tuo nemico?Se fossi il tuo nemico e mi porse un gruppo di file per memorizzare a vostro nome, potrei:

  • eliminare i file
  • corrotti i file
  • leggere i file
  • registro ogni byte entra o esce per analisi più avanti
  • sostituire i file con file ostili - in particolare, tutti i codice eseguibile, script e così via, che si memorizzano su questo sito, si dovrebbe presumere che siano pieni di virus mirati specificamente all'attacco
  • fare cose per metterti nei guai - falsificare messaggi che sembrano provenire da te, e così via

Assumere che gli operatori del sito di backup non sicuri stiano cercando di fare tutte queste cose per te. Crypto è una mitigazione per alcuni di questi attacchi, ma non tutti.

Senza offesa, ma è molto chiaro che non si conosce abbastanza la crittografia per risolvere questo problema con ogni ragionevole possibilità di ottenerlo sicuro contro i veri aggressori. Non c'è nulla di cui vergognarsi; Non ho questa conoscenza. Piuttosto, ho una conoscenza sufficiente per sapere che questo problema è oltre me. Non c'è niente di sbagliato nel cercare di saperne di più su crypto; Lo incoraggio fortemente. Ma se hai una vera minaccia qui, e stai cercando di mitigarla con strumenti di crittografia di forza professionale, non rotolare la propria soluzione. Vai a noleggiare un consulente esperto in questo campo che può consigliarti su quale sia la cosa giusta da fare se ti concedi le minacce realistiche che affronti.

+0

Ho lavorato al server co e un mio amico gli ha fatto accadere questo e ha mostrato un attacco per dimostrarlo alla società (questo era prima del mio arrivo) e attraverso impostazioni di virtualizzazione improprie altre persone possono arrivare al tuo sito con un attacco. Anche se questo non è un problema per la maggior parte del tempo o è un problema sul sito principale, preferisco comunque ridurlo se lo sto mettendo su un altro server. In questo caso non sarei in grado di "proteggere il sito di backup". –

+0

Ottimo collegamento. Questo mostra come crittografare un file mentre si utilizza uno stream. Ma sembra che usi solo una chiave simmetrica. Posso generare una chiave simmetrica, ma come faccio a crittografare la chiave con una chiave privata/pubblica in .NET? –

+0

@Eric - Accetto che una chiave pubblica/privata non sia necessaria se l'app di backup si trova su un sistema centrale che legge dal sito principale e scrive sul sito più economico. Anche la crittografia a chiave simmetrica è più veloce. Ma se l'app di backup si trova sul server più economico e potrebbe essere compromessa, sarebbe preferibile una chiave pubblica/privata. –

1

Si crittografa con una chiave simmetrica, quindi crittografare la chiave simmetrica con una chiave pubblica, quindi rilasciare la chiave simmetrica. Solo il proprietario della corrispondente chiave privata (tu) può successivamente decodificare la chiave simmetrica e quindi il documento. Non ci sono segreti memorizzati nell'app. La buona notizia è che c'è solo una tonnellata di prodotti (pgp) e protocolli (s-mime) fuori dalla scatola per risolvere questo problema.

+0

Mi rendo conto che ho bisogno di crittografare prima del trasferimento. ATM sto usando sqlite così posso bloccarlo per un minuto e utilizzare qualsiasi app per leggerlo. 'gpg-zip' sembra funzionare, ma non vedo un modo per dare una chiave non simmetrica (sembra un prompt e non ho voglia di hackerare lo stdin). Ti capita di sapere di utilizzare la parte superiore della tua testa (cercherò di più come quando arriva il fine settimana) –

+0

Basta usare GPG. Non è necessario inserire alcuna password durante la crittografia: utilizza solo la chiave pubblica del destinatario (che è necessario memorizzare nel proprio keyring). La tua chiave privata non deve mai avvicinarsi a nessuno dei due server: puoi tenerla al sicuro in ufficio, finché non dovrai ripristinare un backup un giorno. – caf

1

È possibile utilizzare un algoritmo a chiave simmetrica (AES, DES, Triple-DES) per eseguire una crittografia sul codice e archiviarlo in un esadecimale nel database (in un campo nvarchar). Dato che hai bisogno di trasferirlo in forma crittografata a qualcun altro, non avrai bisogno di usare alcun algoritmo assimetrico (come RSA, ElGamal ecc.) Se ti piace qualcosa di RSA, dovresti anche considerare di firmare con i dati usando qualcosa come PGP .

Ma, indipendentemente da quale algoritmo si utilizza, si avrebbe bisogno di assicurarsi che le chiavi sono come sicuro possibile, vale a dire la chiave simmetrica per AES e la chiave privata per RSA ecc

questo articolo , fornisce un tutorial su come eseguire la crittografia simmetrica con/senza Salt.

http://www.obviex.com/samples/Encryption.aspx

+0

Ho già eseguito la crittografia simmetrica. Tutti mi hanno collegato a questo. Come faccio a crittografare il simmetrico con una chiave pubblica in .NET? –

Problemi correlati