Hash e firme digitali (app di Windows Store)

Hash

Una funzione hash di crittografia prende un blocco di dati di lunghezza indefinita e restituisce una stringa di bit di lunghezza fissa. Le funzioni hash si utilizzano in genere per la firma dei dati. Dato che gran parte delle operazioni per la firma della chiave pubblica richiede un uso intensivo delle risorse di calcolo, in genere è più efficace firmare (crittografare) l'hash di un messaggio che non firmare il messaggio originario. La procedura illustrata di seguito presenta uno scenario piuttosto diffuso, anche se semplificato:

  • Alice crea una coppia di chiavi, tiene segreta la chiave privata e pubblica quella pubblica tramite un'autorità di certificazione attendibile.
  • Alice crea un messaggio, ne genera l'hash, firma l'hash utilizzando la chiave privata e invia il messaggio (non crittografato) e la firma a Roberto.
  • Roberto recupera la chiave pubblica di Alice e decrittografa la firma per recuperare l'hash di Alice.
  • Roberto genera l'hash del messaggio che ha ricevuto da Alice e confronta l'hash che ha calcolato con l'hash decrittografato. Se i due hash sono uguali, Roberto è abbastanza sicuro che il messaggio di Alice non è stato alterato.

Nota che Alice ha inviato un messaggio non crittografato. Solo l'hash era crittografato. La procedura garantisce che il messaggio originale non è stato alterato, mentre l'uso della chiave pubblica di Alice assicura che l'hash del messaggio è stato firmato da qualcuno che ha accesso alla chiave privata di Alice, presumibilmente lei stessa.

Puoi usare la classe HashAlgorithmProvider per enumerare gli algoritmi hash disponibili e generare un valore CryptographicHash.

Le firme digitali sono l'equivalente a chiave pubblica dei codici MAC a chiave privata. Mentre i codici MAC usano chiavi private per consentire al destinatario di un messaggio di verificare che il messaggio non sia stato alterato durante la trasmissione, le firme digitali usano una coppia di chiavi privata/pubblica.

Firme digitali

Le firme digitali sono l'equivalente a chiave pubblica dei codici MAC a chiave privata. Mentre i codici MAC usano chiavi private per consentire al destinatario di un messaggio di verificare che il messaggio non sia stato alterato durante la trasmissione, le firme digitali usano una coppia di chiavi privata/pubblica.

Tuttavia, poiché gran parte delle operazioni per la firma della chiave pubblica richiede un uso intensivo delle risorse di calcolo, in genere è più efficace firmare (crittografare) l'hash di un messaggio che non firmare il messaggio originario. Il mittente crea l'hash di un messaggio, lo firma invia sia la firma sia il messaggio (non crittografato). Il destinatario calcola l'hash del messaggio, decrittografa la firma e confronta la firma decrittografata con il valore hash. Se i due valori corrispondono, il destinatario può essere abbastanza sicuro che il messaggio proviene dal mittente e non è stato alterato durante la trasmissione.

La firma garantisce che il messaggio originale non è stato alterato, mentre l'uso della chiave pubblica del mittente assicura che l'hash del messaggio è stato firmato da qualcuno che ha accesso alla chiave privata.

Puoi usare un oggetto AsymmetricKeyAlgorithmProvider per enumerare gli algoritmi di firma disponibili e generare o importare una coppia di chiavi. Puoi usare metodi statici sulla classe CryptographicHash per firmare un messaggio o verificare una firma.

Argomenti correlati

MAC, hash e firme

Roadmap per app di Windows Store in C# o Visual Basic