Un'idea per il controllo della password?

-1

Cercherò di rendere quest'idea il più dettagliata possibile, per aiutare la comunità ad aiutare e ad aiutare gli altri con lo stesso problema.

Informazioni di background

Il mio sistema ha 60 utenti. Ogni utente ha una password di 8 cifre, che va da 00000001-99999999. Questi sono generati casualmente per essere unici dagli amministratori. Questa password è utilizzata solo come "controllo" per accedere al mio programma, non è utilizzato per nient'altro. Il programma e la password sono entrambi memorizzati localmente.

La mia idea

Vorrei compilare un database di password in questo modo

Password = UsersPassword
Data = Randomly generated 128bit string (So every encryption is unique)
NewPassword = ""
For I to 20
  NewPassword = NewPassword & Hash(Password, SHA_512)
Next
EncryptFile(Data, UserPassword, ALG)

Ciò significa che, sebbene la password dell'utente abbia solo 10 miliardi di tentativi, la password per la crittografia è lunga 536870960 chiavi. Questo diventa il mio tratto. Dal momento che il mio computer tenta di decodificare un file di questo tipo impiega 60 secondi (questo è solo per il concetto, lo renderei un po 'più veloce per l'uso).

Questo significa anche che le password non sono mai memorizzate nel file, ma piuttosto la password stessa che è il "controllo". Ciò significa che un rainbowtable non funziona, il brute-forcing lo fa e 10 miliardi non sono enormi ma se ci vuole un secondo per indovinare il valore di tempo / sforzo entra in gioco.

Ecco la crittografia / crittografia che posso usare;

  • CALG_3DES 0x00006603 Algoritmo di crittografia Triple DES
  • CALG_3DES_112 0x00006609 Crittografia DES tripla a due chiavi con lunghezza della chiave effettiva pari a 112 bit.
  • CALG_AES 0x00006611 Advanced Encryption Standard (AES).
  • CALG_AES_128 0x0000660e AES 128 bit.
  • CALG_AES_192 0x0000660f AES 192 bit.
  • CALG_AES_256 0x00006610 AES a 256 bit.
  • CALG_AGREEDKEY_ANY 0x0000aa03 Identificatore di algoritmo temporaneo per handle di chiavi concordate da Diffie-Hellman.
  • CALG_CYLINK_MEK 0x0000660c Un algoritmo per creare una chiave DES a 40 bit con bit di parità e bit chiave azzerati per rendere la lunghezza della chiave di 64 bit.
  • CALG_DES 0x00006601 Algoritmo di crittografia DES.
  • CALG_DESX 0x00006604 Algoritmo di crittografia DESX.

So che CALG_AES_256 è estremamente strong ma dai miei test viene eseguito molto velocemente. Ho bisogno di uno lento, CALG_AES_192 cuciture da prendere più a lungo e dalla mia ricerca è ugualmente indistruttibile.

Questa è un'idea valida?

    
posta ian smith 13.09.2016 - 13:40
fonte

1 risposta

5

Tanto male, è difficile sapere da dove cominciare.

Per riassumere: la tua idea è una schifezza. Buttalo fuori e ricomincia usando una libreria comprovata.

Primo: le tue password succhiano. 8 caratteri casuali casuali possono essere forzati brute con molti algoritmi di hashing delle password. Hai scelto un bel hash veloce e hai ulteriormente limitato le password a 8 cifre . Questi cadrà rapidamente. E come nota a margine, lo schema assegnato dall'amministratore rende le password più difficili da modificare e presenta un buon compromesso integrato nella forma di amministratore che conoscerà già la password.

Secondo: la tua chiave che ti fa schifo. L'hash della password si basa su 20 round di un hash veloce (SHA-256). Il buon uso di un hash veloce (in PBKDF-2) richiede decine o centinaia di migliaia di iterazioni al minimo. Il tuo hash fa un AND bit o una concatenazione, non sono chiaro sulla tua terminologia. In entrambi i casi stai facendo l'hashing della stessa cosa ogni volta perché non hai incluso il contatore nel tuo hash. Se si tratta di un AND, allora le tue iterazioni in realtà non fanno nulla perché anding qualcosa con se stesso è un no-op. Se si tratta di concatenazione, è sufficiente eseguire un hash e ripeterlo più volte. E la tua crittografia non utilizzerà una chiave così lunga. Non è possibile risolvere questo solo gettando il contatore nell'hash. L'ANDing di tanti numeri casuali insieme porterà a numeri sempre quasi pari a zero.

Infine, stai facendo affidamento sul tempo di decrittografare l'intero file per la sicurezza del sistema. Questo non funzionerà. Un utente malintenzionato decodifica invece solo una piccola parte del file per verificare ciascuna password. Decifreranno abbastanza in modo che il testo sembrerebbe ragionevole, o qualche "stringa magica" per il tipo di file verrebbe rivelata, se la password fosse corretta. Quindi passa alla password successiva se questa non è possibile.

Con una buona chiave hai ragione che AES 192 bit è abbastanza strong. Ma la tua chiave fa schifo perché hai tirato fuori la tua crittografia. Non farlo.

    
risposta data 13.09.2016 - 14:22
fonte

Leggi altre domande sui tag