Come crittografare una stringa breve in un breve testo cifrato utilizzando una crittografia asimmetrica?

3

Sto usando RSA per crittografare del testo, quindi il mio sistema ha già generato chiavi private e pubbliche.

Queste chiavi mi piacerebbe usare per crittografare / decifrare un breve testo (16 caratteri).

  • La condizione principale è: il testo cifrato dovrebbe essere il più breve possibile.
  • La lunghezza minima del testo cifrato è più un evento più importante della sicurezza totale. L'autore dell'attacco non sarà in grado di scegliere testo in chiaro.

Domanda: Esiste un metodo che consenta di creare un breve testo cifrato utilizzando la chiave privata RSA?

Modifica Quello che voglio veramente è essere sicuri che il testo non sia stato cambiato e che provenga davvero dall'applicazione. La soluzione tipica sarebbe - firmare il testo. Ma la solita firma RSA sarebbe troppo lunga per essere inserita nei client mobili, dove implementerei questo sistema.

La mia idea era di crittografare un testo conosciuto con una chiave privata, in modo che potesse essere decifrato con una chiave pubblica. Ciò fornirebbe abbastanza sicurezza da fidarsi, che il testo crittografato proviene dalla base, dal momento che è necessaria la chiave privata per la crittografia.

Vantaggio: devi solo inserire una breve stringa di testo cifrato per convalidare la crittografia, supponendo di poter trovare un metodo di crittografia che possa preservare la lunghezza del testo dopo la crittografia.

    
posta Skip 11.07.2013 - 09:24
fonte

1 risposta

6

"Cifra con la chiave privata, in modo che sia decifrato con la chiave pubblica": questa è un'analogia imperfetta, con la quale sono state descritte per la prima volta le firme RSA, ma anche con RSA non funziona.

Quello che vuoi è davvero un algoritmo di firma, comunque lo vuoi chiamare. È possibile definire algoritmi di firma basati sull'operazione core di RSA, ed è stato fatto, ed è chiamato RSA. Qualunque cosa che sia basato su RSA implicherà alcuni esponenziati modulari che lavorano e generano interi grandi della stessa dimensione del modulo. Quindi una firma basata su RSA con una chiave RSA che vale quel nome (vale a dire almeno 1024 bit) includerà necessariamente un numero intero a 1024 bit, quindi la sua dimensione non sarà inferiore a 128 byte.

C'è una possibile svolta in quanto RSA è un algoritmo di firma "con recupero": sebbene la firma abbia una dimensione di almeno 128 byte, è possibile incorporare alcuni dati aggiuntivi (parte del messaggio che è firmata) . C'è uno standard chiamato ISO 9796-2 che lo fa; ha alcune carenze ma può essere usato. Tuttavia, sebbene questo standard renda le dimensioni totali della firma generali piuttosto piccole, non ti piacerà, perché vuoi limitare la dimensione di ciò che viene inserito da un utente umano . I vantaggi di ISO 9796-2 riguardano i messaggi lunghi.

Algoritmi che producono firme brevi sono un'area di ricerca attiva. In parole povere, se si mira a un livello di sicurezza di n bit (nel senso che un utente malintenzionato dovrebbe investire in uno sforzo computazionale di dimensioni 2 n essere in grado di produrre una firma falsa, ma lo sforzo potrebbe consentirgli di produrre milioni di firme false allo stesso costo):

  • Con DSA e derivati (ad esempio ECDSA), la dimensione della firma è 4n bit.
  • Con BLS , la dimensione della firma è 2n bit (ma la la matematica è difficile da capire e non esiste ancora uno standard)
  • Esiste un minimo teorico assoluto di n bit
  • Non conosciamo buoni algoritmi tra i bit n e 2n , anche se conosciamo alcuni sicurezza discutibile .

Potresti riuscire a risolvere il problema, cambiando i tuoi modelli. Gli algoritmi di firma sono pensati per una cosa: permettere a qualcuno di verificare una firma senza dargli il potere di produrre firme. A seconda del tuo contesto esatto, è possibile che tu non abbia davvero bisogno di questa separazione dei ruoli. Forse non è un problema se chiunque verifica una "firma" potrebbe potenzialmente creare delle firme per conto suo. In questo caso, puoi utilizzare un MAC che può essere notevolmente più breve (ad esempio, 32 bit potrebbero essere sufficienti caso) e anche molto più facile da implementare (suggerimento: utilizzare HMAC / SHA-256 e troncare alla dimensione desiderata).

    
risposta data 11.07.2013 - 16:31
fonte

Leggi altre domande sui tag