Algoritmi di decodifica del computer e conoscenza della soluzione

7

Questa è una domanda generale sull'uso dei computer per decrittografare le informazioni. Mi ha lasciato perplesso per un po '.

La domanda è in realtà composta da due parti:

  1. In che modo un computer controlla se una chiave "indovinata" è la chiave corretta? Un umano potrebbe farlo perché il risultato è leggibile - per gli umani. SO cosa significa dire che il computer sta controllando una chiave?

  2. In che modo l'alogirmo sa di aver trovato la chiave corretta? Ad esempio, se il computer esegue solo la forza bruta controlla le chiavi una ad una (se utilizza un algoritmo migliore per questo non è così rilevante), a che punto si ferma e dice "questa è la chiave e il messaggio!" ?

posta 31.07.2012 - 12:20
fonte

3 risposte

4

Ecco le tue due domande:

  1. Se il testo normale previsto è un testo normale, il computer esaminerà le frequenze lettera per la lingua prevista. Se il testo in chiaro è una sorta di file, ad esempio un foglio di calcolo, il computer sembrerà corrispondere al formato di tale file, in genere l'intestazione. Ancora una volta, le statistiche sulla frequenza possono aiutare; un file bitmap con molto spazio bianco conterrà più byte 0x00 rispetto a un file casuale.

  2. Non è così. Trova una decifrazione che sembra adattarsi al modello previsto, o che si discosta in modo significativo da casuale. Spetterebbe a un essere umano determinare se questo fosse corretto o solo un falso positivo.

risposta data 31.07.2012 - 13:00
fonte
3

Dipende dal cryptosystem e dalla sua implementazione: non è garantito che il computer possa dire una decrittazione corretta da una errata.

Tuttavia, la maggior parte dei sistemi progettati per la crittografia statica dei dati (ad esempio, crittografia di file o posta elettronica, invece di crittografare temporaneamente i dati per trasferirli su una rete non sicura) includono un modo per rilevare quando un errore la chiave è stata data. Il meccanismo esatto varia, ma alcuni di quelli comunemente usati includono:

  • Controlla la chiave prima tentando la decrittografia, includendo un hash crittografico di come parte dei dati crittografati. (Per i messaggi crittografati usando crittografia a chiave pubblica , uno potrebbe semplicemente includere la chiave pubblica, o un hash di esso, nel messaggio crittografato.)

  • Controlla la chiave all'inizio della decrittografia, anteponendo un'intestazione nota ai dati di testo in chiaro: potrebbe essere semplice come un blocco di byte nulli e controllare che decrittografi correttamente.

  • Verifica la chiave e l'integrità dei dati includendo un codice di autenticazione dei messaggi nella crittografia dati (o utilizzando una modalità di crittografia autenticata ). Lo scopo principale di un MAC è proteggere i dati crittografati dalla manomissione, ma come effetto collaterale serve anche a rilevare le decifrazioni errate. Tuttavia, il MAC non può essere verificato senza aver prima letto ed elaborato tutti i dati, quindi, per motivi di usabilità, potrebbe comunque essere utile combinarlo con uno degli altri metodi di verifica delle chiavi sopra descritti.

In ogni caso, un formato di crittografia ben progettato permetterà all'utente di essere informato rapidamente, se provano a decodificarlo con la chiave sbagliata - ma non troppo rapidamente, in quanto ciò lo renderebbe semplicemente più facile da rompere la chiave con la forza bruta senza fare nulla per aiutare gli utenti legittimi. Il metodo consigliato per ottenere ciò, per la crittografia simmetrica con una chiave derivata da una passphrase, consiste nell'utilizzare una funzione di derivazione della chiave ( come PBKDF2 o scrypt ) con un parametro regolabile che controlla quanto lavoro è necessario per calcolare la chiave dalla passphrase. Questa chiave derivata (che dovrebbe essere abbastanza lunga - diciamo, 128 bit o più - per non essere intaccata dalla forza bruta) può quindi essere verificata con uno dei metodi descritti sopra.

    
risposta data 31.07.2012 - 15:53
fonte
0

hai bisogno di un modo per convalidare una chiave da un computer con un algoritmo, potresti fare delle euristiche per tagliare l'albero, questo è uno pseudocodice

foreach (keys as key) {

if (isPossibleKey(key)) {

result=tryBruteForce(key);
if (result) break; 

}

}

potresti fare qualsiasi tipo di euristica sul metodo isPossibleKey come "la chiave è presente nel dizionario online" o "è leggibile" usando alcune regole. più sintonizza il metodo isPossibleKey meno le chiamate al metodo tryBrutoForce che fai.

    
risposta data 31.07.2012 - 12:43
fonte

Leggi altre domande sui tag