Condividere in sicurezza le password tra utenti [chiuso]

0

Sto scrivendo un progetto per archiviare e condividere in modo sicuro le password tra gli utenti, ho fatto un sacco di ricerche sugli algoritmi di crittografia, CSPRNG, algoritmi di hashing, stretching chiave ecc ...

Voglio solo delineare il mio modo di pensare su come usare tutti questi, per creare l'applicazione sicura - e spero che qualcuno (o i) possa puntare i nostri difetti o dirigermi se vedo cose sbagliate:

di hashing

Quindi, prima di tutto, ho bisogno di memorizzare hash delle password degli account (questi sono gli account che accedono all'applicazione per visualizzare le password condivise).

Dopo aver letto in giro, la mia comprensione è che per rendere un hash "più sicuro", è necessario usare scrypt o bcrypt o pbkdv2. Ho trovato un'implementazione di questi in "CryptSharp" (si spera che questa sia un'implementazione sicura) - anche dopo ulteriori ricerche ( link ) sembra che lo scrypt sia un modo più sicuro per creare un hash.

Codifica

Poiché i dati saranno condivisi tra gli utenti, dovrò accertarmi che il sistema utilizzi una chiave di crittografia master per l'intero progetto e che questo sia archiviato in modo sicuro.

Il mio pensiero qui è generare una chiave di crittografia e un vettore di inizializzazione (3 di loro - spiegherò perché) - questi saranno generati con RNGCryptoServiceProvider e tutti e 3 saranno concatenati in Key1 | IV1 | Key2 | IV2 | Key3 | IV3 in modo che possano essere divisi e utilizzati con gli algoritmi di crittografia.

Ho bisogno di un modo per archiviare questa stringa concatenata di IV e Keys, quindi dopo alcune ricerche mi sono imbattuto nell'API di protezione dati di Microsoft (ProtectedMemory.Protect (secret, MemoryProtectionScope.SameLogon)) - la mia comprensione di questo è che il Pool di app dovrà essere eseguito con un account utente e "load profile" impostato su true. La stringa crittografata risultante verrà quindi memorizzata in un file di impostazioni XML.

Riguardo alla crittografia delle password da condividere, ho letto sulla crittografia a cascata (usata in TrueCrypt). Gli algoritmi di crittografia utilizzati da TrueCrypt sono AES, TwoFish e Serpent. Ho trovato un'implementazione di questi ( link - che, ancora una volta, spero sia un'implementazione sicura). Questo è dove saranno usati i 3 IV e le Chiavi; così efficacemente i dati saranno crittografati in questo modo: Serpent (TwoFish (AES (data, key1), key2), key3).

Pensieri?

Quindi, queste sono le mie idee per creare un sistema di archiviazione dati sicuro; sto guardando qualcosa? ho frainteso qualcosa? dovrei fare qualcosa di più?

Apprezzo qualsiasi consiglio su questo.

    
posta binks 04.07.2014 - 09:51
fonte

2 risposte

6

Non inventare i tuoi protocolli crittografici. È facile trovare idee di ogni tipo e combinare tutti i tipi di tecniche, ma farlo correttamente è eccezionalmente difficile e richiede molta esperienza e ampie revisioni tra pari. Questo non è qualcosa che puoi fare da solo in pochi minuti, specialmente se non sei un crittografo.

Ciò che conferma questa impressione è che si passa direttamente a dettagli di implementazione casuali prima ancora di aver analizzato il problema e specificato l'obiettivo. In che modo la funzionalità di crittografia nidificata è pertinente in questa fase iniziale? Tutto ciò suona piuttosto caotico e vago.

Ti consiglio vivamente di chiarire prima l'immagine più grande e poi di scegliere una soluzione stabilita per questo specifico scenario.

    
risposta data 04.07.2014 - 10:30
fonte
0

"archivia e condividi in modo sicuro le password tra gli utenti"

Questo richiede solo un strong algoritmo di hashing e una sorta di crittografia. La crittografia per renderlo illeggibile e hashing per i controlli di integrità (oltre a facilitare la memorizzazione, la ricerca e riduce il sovraccarico durante la condivisione in rete). Inoltre, la condivisione degli hash delle tue password su un canale non sicuro è disapprovata, dato che il più popolare hashing MD5 ha dimostrato di avere collisioni.

Ho trovato la domanda un po 'vaga, ma ecco uno scatto che potrebbe aiutare. Avrai bisogno di pianificare come appare il tuo sistema di archiviazione. I componenti separati e la modularizzano in modo tale che ogni livello abbia la propria sicurezza che è indipendente l'uno dall'altro.

Nel frattempo @Deer Hunter ha ragione. Non reinventare la ruota, ci sono algos robusti di crittografia che puoi utilizzare e sono stati testati in modo esaustivo.

    
risposta data 20.02.2017 - 14:53
fonte

Leggi altre domande sui tag