Qual è la differenza tra crittografia e firma nella crittografia asimmetrica?

Qual è la differenza tra la crittografia di alcuni dati e la firma di alcuni dati (utilizzando RSA)?

Semplicemente inverte il ruolo delle chiavi pubblico-privato?

Ad esempio, voglio usare la mia chiave privata per generare messaggi in modo che solo io possa essere il mittente. Voglio che la mia chiave pubblica sia utilizzata per leggere i messaggi e non mi interessa chi li legge. Voglio essere in grado di crittografare determinate informazioni e usarle come codice prodotto per il mio software. Mi interessa solo che io sia l’unico che può generarli. Vorrei includere la mia chiave pubblica nel mio software per decifrare / leggere la firma della chiave. Non mi interessa chi può leggere i dati nella chiave, mi interessa solo che io sia l’unico verificabile in grado di generarli.

La firma è utile in questo scenario?

Quando si esegue la crittografia, si utilizza la propria chiave pubblica per scrivere un messaggio e utilizzano la propria chiave privata per leggerlo.

Al momento della firma, usi la tua chiave privata per scrivere la firma del messaggio, e usano la tua chiave pubblica per verificare se è davvero tua.

Voglio usare la mia chiave privata per generare messaggi in modo che solo io possa essere il mittente.

Voglio che la mia chiave pubblica sia utilizzata per leggere i messaggi e non mi interessa chi li legge

Questa è la firma , è fatta con la tua chiave privata.

Voglio essere in grado di crittografare determinate informazioni e usarle come codice prodotto per il mio software.

Mi interessa solo che io sia l’unico che può generarli.

Se hai solo bisogno di saperlo a te stesso, non è necessario pasticciare con i tasti per farlo. Puoi solo generare dati casuali e tenerli in un database.

Ma se vuoi che le persone sappiano che le chiavi sono davvero tue, devi generare dati casuali, conservare un database e firmarlo con la tua chiave.

Vorrei includere la mia chiave pubblica nel mio software per decifrare / leggere la firma della chiave

Probabilmente dovrai acquistare un certificato per la tua chiave pubblica da un fornitore commerciale come Verisign o Thawte, in modo che le persone possano verificare che nessuno ti abbia falsificato il software e sostituito la tua chiave pubblica con la loro.

Nella crittografia RSA, quando si genera una coppia di chiavi, è completamente arbitrario quale si sceglie di essere la chiave pubblica e quale è la chiave privata. Se si cripta con uno, è ansible decifrare con l’altro – funziona in entrambe le direzioni.

Quindi, è abbastanza semplice vedere come è ansible crittografare un messaggio con la chiave pubblica del destinatario , in modo che il destinatario possa decrittografarlo con la propria chiave privata .

Una firma è la prova che il firmatario ha la chiave privata che corrisponde ad alcune chiavi pubbliche. Per fare ciò, sarebbe sufficiente cifrare il messaggio con la chiave privata del mittente e includere la versione crittografata accanto alla versione in chiaro. Per verificare il mittente, decrittografare la versione crittografata e verificare che sia uguale al testo in chiaro.

Ovviamente, questo significa che il tuo messaggio non è segreto. Chiunque può decifrarlo, perché la chiave pubblica è ben nota. Ma quando lo fanno, hanno dimostrato che il creatore del testo cifrato ha la chiave privata corrispondente.

Tuttavia, ciò significa raddoppiare le dimensioni della trasmissione (testo in chiaro e testo cifrato insieme (presupponendo che si desideri che le persone che non sono interessate a verificare la firma, leggano il messaggio). Quindi, di solito, una firma viene creata creando un hash del testo in chiaro. È importante che non si possano creare falsi hash, quindi vengono utilizzati algoritmi di hash crittografici come SHA-2.

Così:

  • Per generare una firma, creare un hash dal testo in chiaro, crittografarlo con la chiave privata, includerlo accanto al testo in chiaro.
  • Per verificare una firma, creare un hash dal testo in chiaro, decrittografare la firma con la chiave pubblica del mittente, verificare che entrambi gli hash siano uguali.

Sì, pensa di firmare i dati come se avessi il tuo timbro di cera che nessun altro ha. È fatto per raggiungere l’ integrità e il non ripudio . La crittografia è così che nessun altro può vedere i dati. Questo è fatto per ottenere la riservatezza . Vedi wikipedia http://en.wikipedia.org/wiki/Information_security#Key_concepts

Una firma è un hash del tuo messaggio firmato usando la tua chiave privata.

La firma sta producendo un “hash” con la tua chiave privata che può essere verificata con la tua chiave pubblica. Il testo è inviato in chiaro.

La crittografia utilizza la chiave pubblica del destinatario per crittografare i dati; la decodifica è fatta con la loro chiave privata.

Quindi, l’uso delle chiavi non è invertito (altrimenti la tua chiave privata non sarebbe più privata!).

La firma indica che sei veramente la fonte o la garanzia per l’object firmato. Ognuno può leggere l’object, però.

Crittografia significa che solo quelli con la chiave privata corrispondente possono leggerlo, ma senza la firma non c’è alcuna garanzia di essere dietro l’object crittografato.

Stai descrivendo esattamente come e perché la firma viene utilizzata nella crittografia a chiave pubblica. Si noti che è molto pericoloso firmare (o crittografare) i messaggi aritrary forniti da altri – questo consente attacchi agli algoritmi che potrebbero compromettere le vostre chiavi.

Nel tuo scenario, non criptare nel significato di crittografia asimmetrica; Preferirei chiamarlo “encode”.

Quindi codifichi i tuoi dati in una rappresentazione binaria, quindi firmi con la tua chiave privata. Se non riesci a verificare la firma tramite la tua chiave pubblica, sai che i dati firmati non sono generati con la tua chiave privata. (“verifica” significa che i dati non firmati non sono significativi)

Funzionalmente, si utilizza la crittografia a chiave pubblica / privata per accertarsi che solo il destinatario possa leggere il messaggio. Il messaggio viene crittografato e crittografato utilizzando la chiave pubblica del destinatario.

Firma che usi per far sapere al destinatario che hai creato il messaggio e che non è cambiato durante il trasferimento. La firma dei messaggi viene eseguita utilizzando la tua chiave privata.

Per quanto riguarda l’algoritmo usato: questo invola i numeri primi. Farei una ricerca su google per una spiegazione migliore.

Penso che ci siano messaggi misti sopra. Stavo cercando di ottenere lo stesso risultato di Simucal – cioè volevo generare un codice di licenza che contiene informazioni importanti su chi può utilizzare il software e tra quali intervalli di date, ecc. Ma non voglio che le persone siano in grado di modificarlo informazioni per estendere il periodo di licenza ecc. Il mio primo approccio è stato quello di utilizzare la crittografia asimmetrica, ma nonostante alcuni dei commenti precedenti, sembra che sia ansible crittografare utilizzando la chiave pubblica o privata, ma decifrare SOLO utilizzando la chiave privata. Pertanto, in questo scenario, è necessario memorizzare la chiave privata nel sistema in modo che decodifichi e controlli la chiave di licenza … rendendo il sistema abbastanza insicuro perché chiunque può generare le proprie informazioni di licenza modificate e crittografarlo utilizzando il chiave pubblica O privata (una delle quali verrà memorizzata nei file binari di sistema). Lo stesso rischio per la sicurezza è collegato alla crittografia simmetrica, naturalmente.

Come molti dei commenti sopra riportati, la firma sembra essere la via da seguire per questo scenario, ma non ho ancora trovato un buon esempio. Qualcuno sa di un tutorial o di una demo online che fornisce un run-through di tale metodo? Grazie, Chris

Ci sono due problemi distinti ma strettamente correlati nello stabilire una comunicazione sicura

  1. Cifra i dati in modo che solo le persone autorizzate possano decrittografarli e leggerli
  2. Verifica l’id quadro / autenticazione del mittente

Entrambi questi problemi possono essere risolti elegantemente utilizzando la crittografia a chiave pubblica.

I. Cifratura e decrittografia dei dati

Alice vuole inviare un messaggio a Bob che nessuno dovrebbe essere in grado di leggere.

  • Alice crittografa il messaggio con Bob's public key e lo invia
  • Bob riceve il messaggio e lo decodifica usando la sua Private Key

Nota che se A vuole inviare un messaggio a B, A deve usare la chiave pubblica di B (che è pubblicamente disponibile a chiunque) e nessuna chiave pubblica o privata di A entra in immagine qui.

Quindi se vuoi mandarmi un messaggio devi sapere e usare la mia chiave pubblica che ti fornisco e solo io sarò in grado di decifrare il messaggio poiché sono l’unico che ha accesso alla chiave privata corrispondente

II. Verifica l’id quadro del mittente (autenticazione)

Alice vuole inviare di nuovo un messaggio a Bob. Il problema della crittografia dei dati viene risolto utilizzando il metodo precedente.

Ma cosa succede se sono seduto tra Alice e Bob, presentandomi come “Alice” per Bob e inviando il mio messaggio a Bob invece di inoltrare quello inviato da Alice. Anche se non riesco a decifrare e leggere il messaggio originale inviato da Alice (che richiede l’accesso alla chiave privata di Bob) sto violando l’intera conversazione tra di loro.

C’è un modo in cui Bob può confermare che i messaggi che sta ricevendo vengono effettivamente inviati da Alice?

  • Alice firma il messaggio con la her private key (la chiave privata di Alice) e lo invia
  • Bob lo riceve e decodifica usando Alice's public key . Dal momento che la chiave pubblica di Alice ha decrittografato correttamente il messaggio, Bob può concludere che il messaggio è stato firmato utilizzando Alice

In pratica, entrambi i metodi sopra descritti sono utilizzati insieme a una qualche forma di hashing (SHA, MD5) per ottenere crittografia e autenticità.

Rispondendo a questa domanda nel contenuto che gli intervistati intendevano utilizzare la soluzione per le licenze software, i requisiti sono:

  1. Nessuna terza parte può produrre una chiave di licenza dalla decompilazione della app
  2. Il contenuto della chiave del software non deve essere sicuro
  3. La chiave del software non è leggibile dall’uomo

Una firma digitale risolverà questo problema come i dati grezzi che rendono la chiave può essere firmata con una chiave privata che lo rende non leggibile dall’uomo, ma potrebbe essere decodificato in caso di reverse engineering. Ma la chiave privata è sicura, il che significa che nessuno sarà in grado di creare licenze per il tuo software (che è il punto).

Ricorda che non è ansible impedire a una persona competente di rimuovere i blocchi del software sul prodotto. Quindi se devono modificare ogni versione rilasciata. Ma davvero non vuoi che siano in grado di generare nuove chiavi per il tuo prodotto che possono essere condivise per tutte le versioni.

Python La documentazione di PyNaCl ha un esempio di “Firma digitale” che si adatta allo scopo. http://pynacl.readthedocs.org/en/latest/signing/

e di causare il progetto NaCl agli esempi C