Probabilmente è pubblicizzato, ma non riesco a capire le parole chiave corrette per la ricerca. Puoi aiutare semplicemente dicendomi quelle parole, sto piuttosto bene con Google:)
Voglio sviluppare un po 'come lo storage di file con crittografia di ogni file. C'è un solo utente e tutti i dati (e il codice) sono memorizzati sulla sua macchina locale. L'utente è in grado di importare alcuni file e leggere quelli precedentemente importati.
Requisiti
Il vettore di attacco principale è lettura di dati non autorizzati . Non c'è bisogno di proteggere da file illegali di importazione.
Inoltre, vorrei implementare la negabilità plausibile . Sembrerà così: ci sono due storage in realtà, uno di loro è crittografato con una password vuota ed è OK esporre i suoi contenuti a chiunque. È usato per oscurare il fatto che c'è qualcosa di nascosto. Solo uno scudo aggiuntivo.
La chiave su cui si basa la sicurezza dell'intero sistema è che la password dell'utente è memorizzata solo nella sua testa, i. e. non raggiungibile a livello di codice (a meno che non ci sia keylogger, software telepatico o satellite con fotocamera ad alta risoluzione che può vederti digitando).
Implementazione
Per ora ho finito con il seguente schema.
-
La password dell'utente è una chiave per crittografare / decifrare le password di livello 2 generate casualmente. Viene utilizzato il simmetrico (ad esempio AES che è considerato sicuro al momento).
-
La crittografia di livello 2 è asimmetrica. La chiave di crittografia (pubblica) viene utilizzata quando si importano file non crittografati da fonti esterne. La chiave Decription (privata) viene utilizzata per leggere i file. Poiché gli algoritmi asimmetrici sono lenti, queste chiavi sono effettivamente utilizzate per proteggere la chiave di sessione (unica per ogni file). La chiave privata è disponibile in memoria come testo normale solo quando si crittografa la chiave di sessione.
-
Il livello 3 utilizza nuovamente la crittografia simmetrica, AES o un altro flusso sicuro (solo in caso di prestazioni molto migliori perché la sicurezza è preferibile). Viene utilizzato per crittografare / decrittografare il contenuto del file.
Finalmente hai letto fino alla fine :) Ecco le domande:
-
Come semplificare questo schema senza danneggiare la sicurezza?In breve: rimuovere il livello medio. Devo comunque usare due livelli, per evitare l'affaticamento di Cypher / enthropy e per soddisfare la mia paranoia:)
-
Come migliorare la sicurezza? So che ci sono bug qui, crypto è una cosa complicata.Mille grazie a @DeerHunter per segnalare potenziali difetti.
-
Cosa google e leggere su questo? Nessuna cosa fondamentale come Shneier, per favore:)Bene, ho abbastanza termini e concetti per tuffarmi. Per ora, almeno.
-
Non sono ancora sicuro se utilizzare i cyphers asimmetrici (nel primo livello). Ho pensato che sarebbe stato utile suddividere i rischi: la chiave di decifrazione (privata) è generata come testo in chiaro solo per un istante, mentre la chiave di crittografia (pubblica) può persino essere esposta a tutti. Ma rispetto ai siffi simmetrici, ho ancora una chiave per proteggere nella RAM, e c'è una chiave aggiuntiva (pubblica) di cui preoccuparsi.
EDIT1 . Io non voglio progettare il mio standard, è ben oltre la mia conoscenza. Userò cose che si dimostrano sicure dove possibile. Per esempio. quello che farò da solo è combinare diverse classi di Crypto ++ per lavorare insieme. Ho solo bisogno del giusto design per farlo. Per ora non penso che la crittografia a disco completo sia adatta nel mio caso. Ho pensato a TrueCrypt, ecc. Ma non consente di nascondere la presenza dei dati crittografati. Preferirei una soluzione (standard o protocollo crittografico) per la crittografia per file.
EDIT2 . Riorganizzato il testo per dividere le richieste e l'implementazione, aggiungendo la richiesta di plausibilità negata
EDIT3 C'è ancora una domanda sulla crittografia asimmetrica.