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 avrebbe potuto firmarlo. Ci sono anche differenze funzionali; continuare a leggere.
Inverte semplicemente il ruolo delle chiavi pubblico-private?
Assolutamente no. L'uso delle stesse chiavi private per la firma e la decrittografia (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 gestione delle chiavi , dove ad esempio 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 è necessario utilizzare 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, desidero utilizzare la mia chiave privata per generare messaggi in modo che solo io possa essere il mittente.
Questa è 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 sono più utilizzati molto e sono generalmente considerati deprecati.
Si noti che protocolli di firma come CMS possono distribuire un formato contenitore che include sia il messaggio che la firma. In quel caso dovresti prima ottenere il messaggio - ancora non crittografato - dal contenitore, proprio come decomprimere un file da un semplice archivio .zip. Quindi il messaggio può essere nascosto alla vista e non può essere utilizzato direttamente in quel caso.
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.
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 la fiducia nella chiave pubblica. Tuttavia, proteggere il codice del programma è molto diverso dalla protezione dei messaggi. Puoi eseguire la firma del codice ma ti occorrerebbe qualcosa per controllare la firma al di fuori del codice . Ci sono sistemi operativi che offrono questo.
C'è Microsoft Authenticode per esempio. I negozi di applicazioni come l'iStore e l'app store Android possono o meno utilizzare la firma del codice, ma offrono una certa sicurezza che l'applicazione non è clonata o almeno non clonata all'interno del negozio. La crittografia non è sempre la soluzione dopo tutto.
Mantenere il proprio codice di essere clonato / alterato a tutti è molto più difficile, e si sarebbe saldamente in territorio DRM se andate in questo modo.
La firma è utile in questo scenario?
Si assolutamente. Può sicuramente aiutare a assicurarsi che i messaggi siano stati firmati da te solo se c'è fiducia nella chiave pubblica. Se può essere utile per autenticare il codice dell'applicazione / chiave pubblica integrata dipende interamente dall'ambiente in cui ci si aspetta che esegua il codice.