Digital Signature Standard Corso di Sicurezza A.A. 2006/2007 Luca Palumbo
La storia Digital Signature Standard (DSS) è uno standard che descrive un protocollo di crittografia a chiave pubblica per la firma digitale (standard governativo USA dal 94); E stato creato, nella sua prima versione, dal National Institute of Standard and Technologies (NIST) nell agosto 1991 (ultima revisione nel 2000); La sua creazione è stata possibile in seguito allo sviluppo di un algoritmo a chiave pubblica per la firma digitale, il Digital Signature Algorithm (DSA), basato sugli schemi proposti da ElGamal e Schnorr, e la cui paternità pare risalire a David W. Kravitz, membro NSA (National Security Agency); L avvento di DSS (DSA) fu accolto da non poche critiche e scetticismi, dovuti ad una ragione essenzialmente politica: tutte le grandi compagnie software (Novell, IBM, Microsoft, Apple, ) avevano speso molto nell implementazione di RSA e non erano interessate a perdere i loro investimenti; Furono trovate scuse quali la scarsa efficienza computazionale di DSA rispetto a RSA, o il fatto che DSA, essendo sviluppato dall NSA, poteva contenere diverse trapdoor.
Firma Digitale in RSA Ciphertext Ciphertext Mittente Destinatario Public Key Private Key Message Public Key Private Key Message Hash Hash H(message) H(message) Firma digitale Match OK FAIL H (message) Firma digitale
Firma Digitale in DSS Message Message Mittente Hash (SHA) Destinatario Hash (SHA) H(Message) Public Key Private Key Fingerprint User Public Key Global Public Key Firma digitale (Signing) r derivato da k e Global Public Key; s derivato da k, H(m) e Private Key; numero random k Verifica (Verifying) Calcolo di v ottenuto da H(message), User Public Key, Global Public Key r e s; Se v=r allora OK altrimenti FAIL;
DSA Generazione delle chiavi Scelta di q, numero primo di 160 bit (dovuti a SHA); Calcolo di p=qz+1, dove z numero intero qualsiasi; p numero primo multiplo di 64 lungo L bit, con L [512, 1024] (in realtà, la revisione operata nel 2000 dal NIST sul DSA impone la scelta a 1024). Ne deriva che z=(p-1)/q ; Scelta di h ]1,p-1[ e calcolo di g=h z mod p, tale che g > 1; Scelta di x numero random tale che x Calcolo y=g x mod p. ]0,q[; Public Key (p, q, g,y) Private Key (x) Global Key (p, q, g) User Key (y) Mentre la User Public Key (y) viene calcolata in base alla Private Key (x) scelta (quindi diversa per ogni utente), è possibile che la Global Public Key (p, q, g) sia comune ad un insieme di utenti;
DSA Signing Signing Generazione di k ]0,q[ r = (g k mod p) mod q s = (k -1 (Hash(message) + xr)) mod q User Per-Message Secret Number: k viene generato per ogni messaggio ed entra nella procedura di firma digitale; p q g Sign r r k q x M H Sign s s
DSA Verifying Verifying w = s -1 mod q u 1 =(Hash(message) * w) mod q u 2 =(rw) mod q v = ((g u 1 * y u 2) mod p) mod q Se v=r la firma è verificata. Il test finale v=r non dipende del tutto dal messaggio inviato, in quanto r viene calcolato considerando l User Per- Message Secret Number (k) ma non H(m); M H y q g s q v r w Comparazione
DSA Correttezza Si considerino signing e verifying: s = k -1 (Hash(message)+xr) mod q k = Hash(message)s -1 + xrs -1 mod q = Hash(message)w + xrw (mod q) Consideriamo inoltre g k mod p = = g H(m)w g xrw mod p => (dato y = g x mod p) => = g H(m)w y rw mod p = = (supponendo che g sia di ordine q) = g u 1y u 2 mod p Allora r = (g k mod p) mod q = (g u 1y u 2 mod p) mod q = v g è di ordine q? Dato g=h z (mod p) e h ]1,p-1[, ne deriva che g q (mod p) = h qz (mod p) = h p-1 (mod p) = 1 (mod p) Teorema di Fermat Ne deriva che g ha ordine q g>1 e q è primo;
DSA RSA E possibile ottenere RSA encryption utilizzando DSA; proviamo a supporre che [r, s] = DSASign(p, q, g, k, x, h) RSA Encryption = c = m e mod n (m=messaggio, e=public key, n=pq) RSA Decryption = m = c d mod n (m=messaggio, d=private key, n=pq) Utilizzando ora DSA, è possibile effettuare RSA Encryption = [r, s] = DSASign(n, n, m, e, 0, 0) r = (g k mod p) mod q = = (m e mod n) mod n = = m e mod n = c RSA Decryption = [r, s] = DSASign(n, n, c, d, 0, 0) r = (g k mod p) mod q = = (c d mod n) mod n = = c d mod n = m
DSA Sicurezza Vengono utilizzate funzioni difficilmente invertibili Il calcolo della User Public Key y=g x mod p è un operazione relativamente semplice; ma avendo y è comunque attualmente impossibile risalire alla Private Key x, in quanto bisognerebbe calcolare il logaritmo discreto di y in base g modulo p; Analogamente, avendo la Signature (r,s) è attualmente impossibile risalire a k da r o ripristinare x da s; Inoltre, è possibile effettuare il calcolo di r a priori in quanto non dipende dal messaggio, e così il calcolo di alcuni valori per k e k -1, velocizzando l algoritmo; però Sono possibili attacchi contro l User Per-Message Secret Number k: analizzando il generatore, se questo è inefficace, o utilizzando sempre gli stessi k si potrebbe venire a conoscere come generare k, arrivando alla chiave privata; Ci sono pericoli utilizzando generatori di chiavi comuni (p, q, g); Esistono canali subliminali in DSA.
DSA Canali subliminali 1 Cos è un canale subliminale? Un canale subliminale rappresenta un modo di includere informazioni aggiuntive in una comunicazione pubblica in modo inavvertibile. Per ricostruire tali informazioni è necessario utilizzare un segreto condiviso (verosimilmente, una chiave). I canali subliminali (quando si parla di firma digitale) sono di due tipi: Broadband channel: utilizzano tutto lo spazio rimasto a disposizione nella firma (quindi tutti i bit non utilizzati per prevenire falsificazioni o alterazioni); Narrowband channel: usano solo una frazione dello spazio rimasto a disposizione nella firma
DSA Canali subliminali 2 Gustavus J. Simmons, nel 1993, ne ha scoperti tre dopo l uscita di DSA, di cui un broadband channel e due narrowband channel. Il broadband channel, in particolare, riguarda la scelta dell UPMSN k s = k -1 (Hash(message) + xr) mod q sk = (Hash(message) + xr) mod q k = s -1 (Hash(message) + xr) mod q Condividendo la propria chiave segreta x, si sostituisce quindi il valore di k al suo valore random e si può quindi inserire un messaggio subliminale nel messaggio originale. Inoltre, supponendo ora, invece, di conoscere già k: xr = sk - Hash(message) mod q x = r -1 (sk - Hash(message)) mod q La chiave privata stessa è messaggio subliminale!!!
DSA Canali subliminali 3 Volendo evitare il possibile canale subliminale, dato che il problema è la generazione di k che avviene solo da parte del mittente, una possibile soluzione è la seguente Mittente Destinatario Sceglie k Calcolo u=g k mod p Calcolo k=k k mod p-1 Invia u Invia k Sign e invio Sceglie k Verifying ((uk mod p) mod q) = r
DSA Varianti GoSt R DSA (Gosudarstvennyi Standard of Russian Federation) Nato nel 1995 presso la federazione Russa; Imposta la chiave q a 256 bit al posto di 160 (probabilmente per questione di ultra sicurezza, in quanto già 160 vengono considerati sufficienti); Cambia l equazione di verifica della firma digitale. ECDSA (Elliptic Curve DSA) Opera su gruppi di curve ellittiche (y=x 3 + ax + b) ; Stesso tempo di esecuzione di DSA producendo firme di lunghezze identiche ma con parmetri di sicurezza 4 volte più alti; Una signature DSA ottenuta con p di 1024 bit e q di 160 bit è equivalente ad una signature ECDSA con parametro principale a 160 bit.
Riferimenti FIPS PUB 186 DIGITAL SIGNATURE STANDARD (DSS), NIST, http://www.itl.nist.gov/fipspubs/fip186.htm; Applied Cryptography Second Edition, Bruce Schneier, John Wiley and Sons Inc.; Network and Internetwork Security - Principles and Practice, William Stallings, Prentice Hall International Editions; Subliminal communication is easy using the DSA, Gustavus J. Simmons, Lecture Notes in Computer Science