Hashing di una password e somma di ogni byte in un file. Quanto è sicuro?

2

Ho un documento di testo con tutti i miei nomi utente e password che si trovano sul mio desktop. Ho deciso di passare un paio d'ore per renderlo più sicuro. Ho scritto un programma per lo scopo. Prende una password e un file, SHA-512s la password e aggiunge ogni byte di esso al file in blocchi di 64 byte. Sottrae per decifrare. Mi rendo conto che questo cade a pezzi se due hash sommano a 256 per ogni byte e che anche questo è forzato solo se sai cosa aspettarti. Ci sono altri difetti di sicurezza?

    
posta Scruffy 07.02.2015 - 00:48
fonte

2 risposte

6

this is only brute-forceable if you know what to expect

Fermati proprio lì. Quello che stai descrivendo è la sicurezza attraverso l'oscurità. Stai scommettendo che un attaccante non sarà in grado di sapere o indovinare il tuo schema. Questa è un'ipotesi davvero, davvero, davvero terribile. È affascinante, ma più e più volte è stato dimostrato sbagliato. Qualsiasi schema di sicurezza appropriato deve funzionare anche se l'utente malintenzionato conosce il sistema che si sta utilizzando; un utente malintenzionato che sa tutto ma la tua password non dovrebbe essere in grado di attaccare praticamente il sistema.

Quindi, buttando fuori l'ipotesi che un attaccante non conosca il tuo schema: la sicurezza è francamente terribile. In primo luogo, è molto semplice per un utente malintenzionato che impara parte del testo in chiaro a utilizzarlo per recuperare altre parti, perché si aggiunge la stessa cosa a ogni blocco di 64 byte. Un utente malintenzionato che ottiene una tua password può vedere cosa significa averlo in una sezione del significato del testo cifrato; in particolare, se assumono che si trovi nella posizione X, possono sottrarlo dal testo cifrato e ottenere una parte potenziale del keystream, quindi provare quel keystream altrove.

In secondo luogo, il tuo programma è abbastanza vulnerabile alla forza bruta. SHA-512 è un hash estremamente veloce. Gli hash veloci sono grandi, in generale - significano che la tua crittografia è più veloce, il che significa che hai meno spese generali, il che significa che avrai maggiori probabilità di utilizzare cripto ovunque con prestazioni accettabili. Ma sono terribili per le password, perché le password sono quasi invariabilmente di bassa entropia. Con SHA-512, un utente malintenzionato che recupera il file può eseguire il brute-force delle password estremamente rapidamente. Gli hash utilizzati per le password devono essere lenti: la cosa che stai tagliando è bassa entropia, quindi il tuo hash deve impiegare un po 'di tempo per essere eseguito per rallentare. Una GPU può calcolare milioni di hash SHA-512 al secondo; fare la decrittazione è anche veloce, quindi non è adatto a resistere alla forza bruta.

Non dovresti usare questo schema. Piuttosto, dovresti usare la crittografia corretta. Se lo si costruisse da solo, questo sembrerebbe un vero e proprio codice di sicurezza (ad esempio AES in una modalità appropriata), con la chiave derivata da una funzione lenta (ad esempio PBKDF2). Il tuo schema può funzionare? Bene, se la tua password è molto alta entropia, possibilmente - al livello estremo, se la tua password è una stringa veramente casuale a 128 bit, puoi anche usarla direttamente come chiave per AES. Ma la tua password è probabilmente più debole di quanto pensi, quindi dovresti semplicemente usare un hash lento.

Tuttavia, non dovresti farlo neanche . La crittografia è veramente difficile da implementare correttamente. Ove possibile, dovresti usare sistemi sicuri ben collaudati invece di programmare qualcosa da te. Ad esempio, è possibile utilizzare GPG per crittografare il file; potresti anche utilizzare uno strumento di gestione delle password (sono quasi certo che esistano strumenti che non memorizzano nemmeno dati crittografati nel cloud, ma sono interamente locali). Non implementare il proprio sistema ad eccezione della pratica; se lo fai, non utilizzare lo schema qui descritto.

Esaminando la tua altra domanda , sembra che tu pensi ancora di poter nascondere efficacemente il tuo schema a un utente malintenzionato e fare affidamento su " no, non capiranno cosa sto facendo. " Quindi, ecco qualcosa al di là della (pienamente sufficiente) "sicurezza dall'oscurità non è efficace:" L'unica ragione per preoccuparsi di un hacker che decrittografa il file è che hanno già hanno il file. Ciò significa che non è riuscito a proteggere un file sul tuo computer. Il tuo programma è anche un file sul tuo computer. Perché pensi di poterlo mantenere sicuro, anche se il file che contiene le password non lo è?     
risposta data 07.02.2015 - 04:17
fonte
3

Stai crittografando il tuo documento con un cifrario polialfabetico (il più noto dei quali è Vigenere cipher ). Le tecniche per rompere questi sono stati conosciuti dalla metà del 1800. Il tuo è particolarmente vulnerabile poiché il numero di alfabeti (64) è fisso e gli alfabeti sono rotazioni semplici (al contrario di shuffles).

Se vuoi veramente proteggere le tue password, usa la moderna crittografia implementata da qualcuno che sa cosa stanno facendo. Ottieni un gestore di password o utilizza il software di crittografia dei file.

    
risposta data 07.02.2015 - 05:38
fonte

Leggi altre domande sui tag