Perché non RSA-criptare l'intero documento?

15

Recentemente ho appreso di un modo per la persona B di verificare che un documento inviato dalla persona A provenga effettivamente dalla persona A.

  1. La persona A dà a Person B la sua chiave RSA pubblica. Questo deve essere fatto in modo affidabile.
  2. La persona A utilizza SHA1 per eseguire l'hash del documento in un hash a 160 bit.
  3. La persona A usa la sua chiave privata RSA per firmare l'hash SHA1 160-bit del documento.
  4. La persona A invia sia l'hash SHA1 firmato da RSA che il documento alla persona B.
  5. La persona B verifica l'hash con la chiave RSA pubblica di Person A.
  6. La persona B genera uno SHA1 per confrontare il documento che la Persona A gli ha inviato.
  7. Se i due hash SHA1 corrispondono, il documento proviene effettivamente dalla Persona A.

Questo processo sembra affidabile, ma anche ingombrante per me. Perché la Persona A non può crittografare il documento direttamente con la sua chiave privata RSA e inviarlo alla Persona B. Perché invece crittografare un hash del documento e inviarlo insieme al documento?

    
posta David Faux 18.10.2012 - 19:35
fonte

6 risposte

25

C'è più di una ragione:

1) In realtà l'algoritmo RSA è più lento. Ad esempio :

By comparison, DES (see Section 3.2) and other block ciphers are much faster than the RSA algorithm. DES is generally at least 100 times as fast in software and between 1,000 and 10,000 times as fast in hardware, depending on the implementation. Implementations of the RSA algorithm will probably narrow the gap a bit in coming years, due to high demand, but block ciphers will get faster as well.

Quindi se guardi qui puoi vedere che elencano DES come prendendo 54.7 cicli per byte e prendendo SHA-1 11,4 cicli per byte.

Quindi calcolare l'hash SHA-1 del documento e firmare è un'ottimizzazione delle prestazioni e criptare l'intero documento con la chiave privata.

2) Suddividendo il documento dalla firma si ha un sistema più flessibile. Puoi trasmetterli separatamente o conservarli in posti diversi. Potrebbe essere un caso in cui tutti hanno già una copia del documento e vuoi semplicemente che la persona A verifichi alla persona B di avere lo stesso documento (o un hash di esso).

3) Pensandoci, se qualcuno crittografa il documento con una chiave privata falsa e lo decifri con la vera chiave pubblica, il tuo algoritmo non può effettivamente dirti il risultato (firmato o meno). A meno che il tuo programma non possa interpretare il significato del documento risultante (forse sai che dovrebbe essere XML, ecc.), Allora non puoi dire in modo affidabile che era "firmato". Hai ricevuto il messaggio giusto o il messaggio sbagliato. Presumibilmente un umano potrebbe dire, ma non una macchina. Usando il metodo hash, presumo che abbia già il testo in chiaro e voglio solo verificare che la persona A abbia firmato.

Dire che ho un programma che lancia armi nucleari. Ottiene un file di comando che è crittografato usando il tuo metodo, quindi decrittalo con la chiave pubblica e inviamo il risultato al mio processore di comandi. Si sta quindi facendo affidamento sul processore dei comandi per sapere se si tratta di un comando valido. È spaventoso. Cosa succede se il protocollo del comando è solo la latitudine e la longitudine di dove indirizzare il missile, codificato in binario? Potresti facilmente lanciarti sul bersaglio sbagliato.

Usando un hash, ottieni un comando e un hash firmato su un canale di testo normale. Hai cancellato il comando, controlla la firma e, se non corrispondono, non ti preoccuperai di inviare nulla al processore dei comandi. Se corrispondono, invii i comandi.

Se vuoi nascondere il contenuto del comando, prendi i comandi e la firma, comprimi assieme e crittografa il tutto con la chiave pubblica della stazione ricevente prima di inviarli.

    
risposta data 18.10.2012 - 20:03
fonte
3

A volte non ti importa particolarmente di lasciare che il mondo intero legga un messaggio (o piuttosto lo facciano), ma desideri fornire un meccanismo per dimostrare che hai scritto il messaggio. La firma fa proprio questo.

RSA è lento, ma la maggior parte del software di crittografia che utilizza RSA in realtà crittografa i documenti con un codice simmetrico come AES e crittografa la chiave utilizzata (a volte chiamata chiave "sessione") con RSA, quindi il rallentamento dalla crittografia dell'intero documento non è ottimo.

    
risposta data 18.10.2012 - 20:44
fonte
1

Ciò richiederebbe ogni byte del documento e lo trasformerebbe in 40 byte. I documenti sarebbero enormi file ora rispetto a quello che erano prima. Richiederebbe molte risorse per crittografare, inviare e decrittografare i dati. Credo che la crittografia dell'intero documento da inviare all'altra persona che la decifra, sia molto più dannosa del modo in cui l'hai descritta.

    
risposta data 18.10.2012 - 19:54
fonte
1

Una parola - non ripudio - non è proprio quello che importa o meno il criptaggio del documento, né il tempo necessario per crittografarlo o hash - è un problema critico con cose come grandi ordini elettronici di acquisto, contratti elettronici, ecc.

Quando è richiesto solo il non ripudio, non è necessario fornire al firmatario con > > > DIRECT < < < < < < accesso a / controllo sulla chiave privata - nei casi in cui il possesso fisico della chiave > CONTAINER < è richiesto insieme a un perno, questo è spesso un mezzo soddisfacente per produrre firme elettroniche affidabili, ad es. link

    
risposta data 19.10.2012 - 02:52
fonte
1

Una ragione è che ciò richiederebbe "crittografare" l'intero documento per ogni destinatario, il che potrebbe portare a dimensioni di file molto grandi.

Anche quando si esegue la crittografia (e non si firma come descritto) si cripta l'intero documento con un codice simmetrico e si cripta solo la chiave risultante con le chiavi pubbliche dei destinatari. La crittografia simmetrica è molto più veloce e hai molta più flessibilità sui tuoi destinatari, ecc.

    
risposta data 19.10.2012 - 19:29
fonte
-3

Il motivo principale di ciò è una delle proprietà significative di una funzione di hash crittografica, ad esempio it is infeasible to find two different messages with the same hash .

Se la persona crittografa l'intero documento con RSA e invia la sua chiave privata insieme ad esso, lo svantaggio principale è che se Adversary viene a conoscenza della chiave privata, anch'egli conoscerà il messaggio e potrà modificarlo.

Considerate ora queste proprietà delle funzioni di hash:

  1. It is infeasible to generate a message that has a given hash.
  2. It is infeasible to modify a message without changing the hash.

Quindi, se Alice usa la funzione hash, anche se Adversary arriva a conoscere la chiave privata con qualche mezzo di compromissione, non sarebbe in grado di generare il messaggio a causa dell'hashing. E nemmeno può modificare il messaggio. Quindi, RSA garantisce una condizione di vincita per la comunicazione tra Alice e Bob .

    
risposta data 18.10.2012 - 20:01
fonte

Leggi altre domande sui tag