Posso firmare un messaggio a carattere singolo con la chiave privata RSA?

52

Se firmo un messaggio molto breve (0 o 1) con la mia chiave privata (e il lato ricevente verifica la firma usando la chiave pubblica), è meno sicuro che inviare il messaggio firmato sufficientemente lungo?

    
posta h22 20.10.2015 - 15:06
fonte

4 risposte

117

Il problema non è quello di falsificare la firma, ma del significato del messaggio .

Ciò che è firmato non è il messaggio, ma un hash del messaggio. L'hash ha sempre la stessa lunghezza.

Un messaggio composto da un singolo bit o da un byte può essere sottoposto a hash, quindi può essere firmato, quindi può essere provato che la tua chiave l'ha firmato.

Ma anche se può essere provato, cosa significa il messaggio? Se è la risposta a una domanda "si / no", devi comunque includere qualche riferimento a cui viene risposto a una domanda, per impedire riprodurre attacchi .

  1. Alice: il tuo nome è h22?
  2. Bob: Signed(Yes) (Eve origlia)
  3. Alice: sei colpevole di attività sovversiva?
  4. Eve: Signed(Yes) (Alice pensa che sia di Bob)

Quindi ogni risposta deve includere una sorta di riferimento alla domanda, quindi la risposta non può essere riutilizzata. Puoi farlo assegnando a ogni domanda un "numero usato una sola volta" (nonce) che includi nella risposta.

  1. Alice: Q1: il tuo nome è h22?
  2. Bob: Signed(Q1:Yes) (Eve origlia)
  3. Alice: Q2: sei colpevole di attività sovversiva?
  4. Eve: Signed(Q1:Yes) (Alice non è ingannata - questo è il numero di domanda sbagliato, quindi è un attacco di riproduzione)
  5. Bob: Signed(Q2:No) (Alice sa che questo è veramente Bob ora)

Ovviamente Alice ha davvero bisogno di firmare anche le sue domande. Altrimenti Mallory potrebbe ingannare Bob nel rispondere a diverse domande.

  1. Alice: Q1: il tuo nome è h22?
  2. Bob: Signed(Q1:Yes)
  3. Alice: Q2: sei colpevole di attività sovversiva? (Intercettato da Mallory)
  4. Mallory: Q2: sei conosciuto come h?
  5. Bob: Signed(Q2:Yes) (Rispondendo alla domanda di Mallory, ma Alice pensa che questa sia una sua risposta)

Quindi è importante che l'intera conversazione sia protetta. In realtà ciò significa generalmente includere l'ora e la data come parte del messaggio che è firmato, così come la firma di messaggi in entrambe le direzioni e la protezione contro la riproduzione usando un nonce.

    
risposta data 20.10.2015 - 16:23
fonte
11

Se firmo un messaggio non criptato M utilizzando la mia chiave privata che fornisce una firma S, allora chiunque nel mondo può leggere quel messaggio e saprà che il messaggio M firmato con la mia chiave privata fornisce la firma S. Se prevedi una risposta da parte mia, quindi chiunque nel mondo potrebbe darti la risposta M con la firma S, e sapresti che è stato firmato con la mia chiave privata, tranne per il fatto che il messaggio non era destinato a te.

Quindi, se mai ho firmato il messaggio "Sì" e il messaggio "No" con la mia chiave privata, e chiedi "sei d'accordo con il nostro piano", allora chiunque potrebbe inviare un messaggio "Sì" o un messaggio "No" a te, apparentemente firmato da me.

Per evitare questo rischio, potresti solo generare un numero casuale lungo R e dirmi "Sei d'accordo con il nostro piano, e per favore includi R nella tua risposta". Dovresti quindi accettare solo le risposte "Sì R" e "No R". Dato che R è casuale, non ho mai inviato e firmato "Sì R" o "No R" prima, quindi nessuno può forgiarlo.

    
risposta data 20.10.2015 - 22:10
fonte
6

Gli algoritmi di firma digitale funzionano su input che sono sequenze di bit di lunghezza arbitraria. In effetti, la maggior parte del lavoro esegue prima l'hashing dei dati da firmare (o verificare) e quindi operare solo sull'output della funzione hash; quindi, il messaggio può essere qualsiasi cosa si adatti alla funzione hash. Pertanto, un messaggio a un byte, o anche un messaggio vuoto, può certamente essere elaborato.

(La maggior parte delle funzioni hash hanno una lunghezza di ingresso massima formale, ma in genere così ridicola da risultare praticamente infinita in termini pratici. Ad esempio, SHA-256 accetta ingressi fino a 2 64 -1 bit, ovvero più di un paio di milioni di terabyte).

Ora, ovviamente, le firme digitali dimostrano solo che la chiave privata è stata coinvolta, ad un certo punto, su uno specifico messaggio di input; non trasmette più significato di quello che si sceglie di inserire nel messaggio, e non c'è molto spazio in un messaggio a byte singolo. @Ben, in la sua risposta , mostra come gli hacker potrebbero riutilizzare i messaggi firmati fuori dal contesto; questo è generalmente noto come un attacco di replay e l'usuale contromisura è usare un nonce : l'input include un valore che è stato fornito da chiunque sta per verificare la firma, e quel verificatore si accerta che accetterà un determinato valore nonce solo una volta. In un messaggio a 8 bit, è possibile inserire al massimo 256 diversi valori nonce, quindi questo diventa presto piuttosto limitato.

    
risposta data 20.10.2015 - 16:41
fonte
3

Non solo è insicuro nel permettere che i messaggi siano presi fuori dal contesto, può provocare la perdita della chiave privata: link

Quindi l'operazione di firma viene solitamente eseguita su hash (padding casuale + hash (messaggio)) piuttosto che solo (messaggio) o hash (messaggio). Vedi link

Qualcosa di simile si applica alla crittografia. Dato che nei sistemi PK è in genere possibile per chiunque criptare un messaggio, ogni crittografia dello stesso messaggio dovrebbe produrre un risultato diverso. Altrimenti è possibile produrre un dizionario di tutti i cyphertexts dei messaggi brevi.

Se i tuoi avversari si scambiano solo due tipi di messaggi brevi "aiourghaoihvbu" e "048yqnb038" potresti essere in grado di capire che cosa significa sì e che significa no senza fare alcun criptaggio.

    
risposta data 21.10.2015 - 15:16
fonte

Leggi altre domande sui tag