Domanda

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

Inverte semplicemente il ruolo delle chiavi pubblico-private?

Ad esempio, voglio usare la mia chiave privata per generare messaggi, così solo io posso essere il mittente. Voglio che la mia chiave pubblica venga utilizzata per leggere i messaggi e non mi interessa chi li legge. Voglio essere in grado di crittografare determinate informazioni e utilizzarle come chiave del prodotto per il mio software. Mi importa solo di essere l'unico in grado di generarli. Vorrei includere la mia chiave pubblica nel mio software per decrittografare / leggere la firma della chiave. Non mi interessa chi può leggere i dati nella chiave, mi interessa solo di essere l'unico verificabile in grado di generarli.

La firma è utile in questo scenario?

È stato utile?

Soluzione

Durante la crittografia, usi la loro chiave pubblica per scrivere un messaggio e loro usano la loro chiave privata per leggerlo.

Quando firmi, 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 venga utilizzata per leggere i messaggi e non mi interessa chi li legge

Questo è firma , è fatto con la tua chiave privata.

  

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

     

Mi interessa solo di essere l'unico in grado di generarli.

Se hai solo bisogno di saperlo da solo, non devi fare confusione con le chiavi per farlo. Puoi semplicemente generare dati casuali e conservarli in un database.

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

  

Vorrei includere la mia chiave pubblica nel mio software per decrittografare / 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 abbia falsificato il tuo software e sostituito la tua chiave pubblica con la loro.

Altri suggerimenti

In RSA crypto, quando generi una coppia di chiavi, è del tutto arbitrario quale scegli di essere la chiave pubblica e quale sia la chiave privata. Se si crittografa con uno, è possibile decrittografare con l'altro: funziona in entrambe le direzioni.

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

Una firma è la prova che il firmatario ha la chiave privata che corrisponde a una chiave pubblica. Per fare ciò, sarebbe sufficiente crittografare il messaggio con la chiave privata del mittente e includere la versione crittografata insieme alla versione in testo normale. Per verificare il mittente, decodifica la versione crittografata e verifica che corrisponda al testo normale.

Ovviamente, questo significa che il tuo messaggio non è segreto. Chiunque può decodificarlo, 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 (supponendo che tu voglia che le persone che non sono interessate a verificare la firma, leggano il messaggio). Quindi, invece, in genere viene creata una firma creando un hash del testo in chiaro. È importante che non sia possibile creare hash falsi, quindi vengono utilizzati algoritmi hash crittografici come SHA-2.

  • Per generare una firma, crea un hash dal testo in chiaro, crittografalo con la tua chiave privata, includilo insieme al testo in chiaro.
  • Per verificare una firma, crea un hash dal testo in chiaro, decodifica la firma con la chiave pubblica del mittente, controlla che entrambi gli hash siano uguali.

Sì, pensa a firmare i dati come a dare il tuo timbro di cera che nessun altro ha. È fatto per ottenere integrità e non ripudio . La crittografia è così che nessun altro può vedere i dati. Questo viene fatto per ottenere 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 "quot" hash " con la tua chiave privata che può essere verificata con la tua chiave pubblica. Il testo viene inviato in chiaro.

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

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

Esistono due problemi distinti ma strettamente correlati nello stabilire una comunicazione sicura

  1. Crittografa i dati in modo che solo le persone autorizzate possano decrittografarli e leggerli.
  2. Verifica l'identità / autenticazione del mittente.

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

. Crittografia e decrittografia dei dati

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

  • Alice crittografa il messaggio con la chiave pubblica di Bob e lo invia.
  • Bob riceve il messaggio e lo decodifica utilizzando la sua chiave privata.
  

Nota che se A vuole inviare un messaggio a B, A deve usare il Pubblico   chiave di B (che è pubblicamente disponibile a chiunque) e né pubblica   né la chiave privata di A appare qui.

Quindi, se vuoi inviarmi un messaggio, dovresti conoscere e utilizzare la mia chiave pubblica che ti fornisco e solo io sarò in grado di decrittografare il messaggio poiché sono l'unico che ha accesso alla chiave privata corrispondente .

II. Verifica l'identità del mittente (autenticazione)

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

Ma cosa succede se mi siedo tra Alice e Bob, presentandomi come "Alice" a 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 dirottando l'intera conversazione tra di loro.

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

  • Alice firma il messaggio con la sua chiave privata e lo invia. (In pratica, ciò che è firmato è un hash del messaggio, ad esempio SHA-256 o SHA-512.)
  • Bob lo riceve e lo verifica utilizzando la chiave pubblica di Alice. Poiché la chiave pubblica di Alice ha verificato correttamente il messaggio, Bob può concludere che il messaggio è stato firmato da Alice.

La firma indica che sei veramente l'origine o il certificato dell'oggetto firmato. Tutti possono leggere l'oggetto, però.

Crittografia significa che solo quelli con la chiave privata corrispondente possono leggerlo, ma senza firma non c'è garanzia che tu sia dietro l'oggetto crittografato.

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

Nel tuo scenario, non crittografare nel significato di crittografia asimmetrica; Preferirei chiamarlo " codificare " ;.

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 vengono generati con la tua chiave privata. ("verifica" indica che i dati non firmati non sono significativi)

Funzionalmente, si utilizza la crittografia della chiave pubblica / privata per assicurarsi che solo il destinatario possa leggere il messaggio. Il messaggio viene crittografato e quindi 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 del messaggio viene eseguita utilizzando la propria chiave privata.

Per quanto riguarda l'algoritmo utilizzato: questo invola i numeri primi. Farei una ricerca su Google per una spiegazione migliore.

  

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

La crittografia mantiene la riservatezza del messaggio ("alcuni dati"), mentre la firma fornisce non ripudio: vale a dire che solo l'entità che lo ha firmato potrebbe averlo firmato. Ci sono anche differenze funzionali; continua a leggere.

  

Inverte semplicemente il ruolo delle chiavi pubblico-private?

Assolutamente no. L'uso delle stesse chiavi private per la firma e la decodifica (o, allo stesso modo, le stesse chiavi pubbliche per la verifica e la crittografia ) è disapprovato, poiché non si devono mescolare scopi. Questo non è tanto un problema matematico (RSA dovrebbe essere ancora sicuro), ma un problema con gestione delle chiavi , dove ad es. la chiave di firma dovrebbe avere una durata più breve e contenere una maggiore protezione prima di essere utilizzata.

Per lo stesso messaggio, è necessario utilizzare la chiave privata dei mittenti per la firma e la chiave pubblica attendibile dei destinatari per la crittografia. Comunemente segno-allora-crittografare viene utilizzato altrimenti un avversario potrebbe sostituire la firma con la propria. Allo stesso modo dovresti usare la chiave privata del destinatario per la decrittazione e la chiave pubblica attendibile del mittente per la verifica.

Inoltre, dovresti capire che la generazione della firma non usa " la crittografia con la chiave privata " ;. Sebbene tutte le operazioni RSA siano basate sull'esponenziazione modulare, lo schema di imbottitura è completamente diverso per la generazione della firma. Inoltre, la chiave pubblica ha proprietà completamente diverse rispetto alla chiave privata RSA in tutti gli usi pratici di RSA.

  

Ad esempio, voglio usare la mia chiave privata per generare messaggi, in modo che solo io possa essere il mittente.

Questa è una proprietà di non ripudio, che può essere ottenuta firmando.

  

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

La chiave pubblica dovrebbe essere considerata conosciuta da tutti. Se vuoi che tutti leggano i messaggi, semplicemente non li crittografano.

La firma generalmente non influenzerà il contenuto del messaggio. Il messaggio è considerato separato dalle firme. Ufficialmente tali firme sono note come "firme con appendice" dove l'appendice è il messaggio. È un nome un po 'strano poiché il messaggio è considerato più importante della firma su di esso, ma sì. Solo poche firme offrono il recupero (parziale) dei messaggi; non vengono più utilizzati molto e sono generalmente considerati obsoleti.

Notare che protocolli di firma come CMS possono distribuire un formato contenitore che include sia il messaggio che la firma. In tal caso dovresti prima ottenere il messaggio - ancora non crittografato - dal contenitore, proprio come decomprimere un file da un semplice archivio .zip. Quindi il messaggio potrebbe essere nascosto alla vista e non può essere utilizzato direttamente in quel caso.

  

Voglio essere in grado di crittografare determinate informazioni e usarle come chiave del prodotto per il mio software. Mi importa solo di essere l'unico in grado di generarli.

La crittografia viene utilizzata per ottenere la riservatezza. In passato la generazione della firma RSA veniva spesso considerata come "crittografia con la chiave privata". Tuttavia, le operazioni sono piuttosto diverse come spiegato sopra e gli standard successivi cercano disperatamente di separare la generazione di crittografia e firma.

  

Vorrei includere la mia chiave pubblica nel mio software per decrittografare / leggere la firma della chiave. Non mi interessa chi può leggere i dati nella chiave, mi interessa solo di essere l'unico verificabile in grado di generarli.

Sì, questo si chiama stabilire trust nella chiave pubblica. Tuttavia, proteggere il codice del programma è molto diverso dalla protezione dei messaggi. Puoi eseguire firma del codice b

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

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

Una firma digitale risolverà questo problema in quanto i dati grezzi che rendono la chiave possono essere firmati con una chiave privata che la rende non leggibile dall'uomo ma potrebbe essere decodificata se decodificata. Ma la chiave privata è sicura, il che significa che nessuno sarà in grado di rilasciare licenze per il tuo software (che è il punto).

Ricorda che non puoi impedire a una persona qualificata di rimuovere i blocchi software sul tuo prodotto. Quindi, se devono hackerare 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 contiene un esempio di "firma digitale" che servirà allo scopo. http://pynacl.readthedocs.org/en/latest/signing/

e causa il progetto NaCl in esempi C

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top