Come rendere l'autenticità del testo verificabile senza servizi di terzi?

3

C'è una persona che vuole stabilire un sistema che permetta a lui / lei di pubblicare testi ovunque e di rendere verifiable che lui / lei è la vera origine di quel testo. Solo il primo messaggio non è verificabile, ma stabilirà il sistema.

Esempio:

"Salve, sono la signora X e ti svelerò alcune cose interessanti. Per evitare il compromesso e dimostrare che un testo che potresti trovare ovunque sul web viene da me, userò il seguente metodo ..."

Qualcosa che mi viene in mente è questa:

1) Crea una coppia di chiavi

2) Pubblica quello privato e mantieni la chiave pubblica segreta

3) Annuncio: il testo successivo avrà la Base64 del testo crittografato "che giorno meraviglioso" sotto di esso.

4) La prossima volta: pubblica il messaggio - annuncia il prossimo testo di verifica trovato - crittografa il testo "che giorno meraviglioso" usando la chiave pubblica e basalo su 64 - mettilo sotto il messaggio.

Ora se qualcuno vuole verificare decodificherà il testo di verifica usando la chiave privata conosciuta e così via.

Sarebbe qualcosa di simile a questo lavoro? Oppure esiste un metodo semplice e consolidato?

Possibili vettori di attacco: - scambio di chiave privata pubblicata - usa Base64 (Encrypted (TEXT)) secondi dopo il vero testo pubblicato e rendi indistinguibile quale è vero

    
posta Raffael 15.12.2013 - 17:58
fonte

3 risposte

2

Stai usando l'analogia "criptare con la chiave privata". Non farlo, provocherà solo confusione.

Quello che vuoi è uno schema di firma digitale . Tale schema consiste di tre algoritmi:

  • Generazione chiavi: questo algoritmo produce una nuova coppia di chiavi, con una chiave pubblica K p e una chiave privata K s . La chiave pubblica, come dice il nome, può essere resa public , cioè rivelata al mondo in generale, e questo non rivela la chiave privata (sebbene la chiave privata sia ancora collegata matematicamente alla chiave pubblica ).

  • Generazione firma: dato un messaggio m , viene prodotta una firma s , utilizzando la chiave privata K < sub> s .

  • Verifica firma: dato un messaggio m , un valore di firma s e la chiave pubblica K p , l'algoritmo di verifica restituisce "true" o "false", a seconda che la firma corrisponda al messaggio per quella chiave pubblica, oppure no.

La firma è suono se l'algoritmo di generazione della firma è effettivamente dichiarato valido dall'algoritmo di verifica della firma. La firma è sicura se non è fattibile, senza conoscere K s , per produrre una coppia (m, s) che l'algoritmo di verifica dichiarerà valido per la chiave pubblica K p .

Sfortunatamente, quando è stato descritto il primo algoritmo di firma utilizzabile, la idea dell'algoritmo è stata definita "crittografia asimmetrica al contrario": la firma è stata generata "crittografando il messaggio con la chiave privata" "(o, equivalentemente, scambiando le chiavi private e pubbliche, cioè rendendo pubblica la chiave privata e viceversa). Questo è stato sfortunato perché:

  • Non tutti gli algoritmi delle firme possono essere visti come "crittografia asimmetrica invertita". Questa analogia funziona solo per RSA.
  • In effetti, l'analogia non funziona nemmeno per RSA; funziona solo per il nucleo matematico di RSA, ma non con il "full RSA" che include anche cose come il padding, che sono cruciali per la sicurezza ma rompono l'analogia "reverse encryption".

La descrizione della "crittografia al contrario" è un modo diffuso di "spiegare le firme" e, così facendo, diffonde per lo più confusione. Non cadere in quella trappola.

Un algoritmo di firma sembra mappare bene a ciò che stai immaginando. L'autore includerebbe la sua chiave pubblica nel primo messaggio. Quindi ogni ulteriore messaggio sarebbe firmato con la corrispondente chiave privata, e tutti potrebbero verificare quella firma relativamente alla chiave pubblica nel primo messaggio.

Tuttavia, nota che la paternità è la combinazione di due concetti:

  • Responsabilità: "Sì, sono disposto ad affermare che ho scritto queste parole e che sarò vincolato da loro."
  • Esclusività: "Tutte le altre persone che sostengono di aver scritto queste parole sono dei bugiardi bugiardi."

Una firma garantirà sia solo se le persone hanno un modo per assicurarsi che ciò che vedono come "primo messaggio" sia effettivamente il vero primo messaggio, cioè contiene la chiave pubblica corretta. Un'altra persona che desiderava rivendicare la paternità degli stessi testi potrebbe pubblicare il proprio "primo messaggio" con la propria chiave pubblica e firmare (con la propria chiave privata) qualunque cosa X pubblichi. Il pubblico in generale avrebbe difficoltà a scoprire chi ha scritto il testo prima . Per stabilire la vera paternità (in questo senso), è possibile utilizzare timestamp (oltre alle firme, non sostituendole) .

    
risposta data 23.12.2013 - 15:47
fonte
3

Puoi utilizzare schemi di impegno come le catene di hash a senso unico o gli alberi Merkle a questo scopo per fornire l'autenticazione.

    
risposta data 16.12.2013 - 06:13
fonte
3

Sembra che ci sia un grosso equivoco qui.
Nella crittografia asimmetrica, la chiave privata DEVE essere tenuta privata (per definizione) e la chiave pubblica dovrebbe essere pubblicizzata (di nuovo, per definizione).

Sembra che quello che stai cercando sia una firma digitale , che funziona in base a quello schema semplice.

In poche parole, una firma digitale accetta un hash dei dati che vuoi firmare, quindi esegue una "crittografia" asimmetrica sull'hash, usando la chiave privata . Per la convalida, chiunque può decifrare l'hash crittografato, utilizzare la chiave pubblica dell'autore, prendere un nuovo hash dei dati ricevuti e confrontare gli hash.
Ciò garantisce che i dati non siano stati modificati in quanto ha lasciato l'autore (integrità) e che l'autore è il proprietario della chiave privata corrispondente (autenticità).

Da Wikipedia:

A digital signature is a mathematical scheme for demonstrating the authenticity of a digital message or document. A valid digital signature gives a recipient reason to believe that the message was created by a known sender, such that the sender cannot deny having sent the message (authentication and non-repudiation) and that the message was not altered in transit (integrity).

Quindi, supponendo che tu abbia un modo per avviare questo scenario, pubblicando in modo sicuro la tua chiave pubblica (e sì, questa è la parte difficile), è molto semplice implementare lo schema che stai cercando. (Ricordati solo di usare un algoritmo standard, non provare a implementarlo da solo ...)

    
risposta data 23.12.2013 - 11:23
fonte

Leggi altre domande sui tag