Movatterモバイル変換


[0]ホーム

URL:


Vai al contenuto
WikipediaL'enciclopedia libera
Ricerca

Elliptic Curve Digital Signature Algorithm

Da Wikipedia, l'enciclopedia libera.

Incrittografia, l'Elliptic Curve Digital Signature Algorithm(ECDSA) offre una variante delDigital Signature Algorithm (DSA) usando lacrittografia ellittica. Fu proposto la prima volta nel 1992 da Scott Vanstone. Nel 1998 è diventato uno standardISO (ISO 14888), nel 1999 è stato accettato come standardANSI (ANSI X9.62) mentre nel 2000 è diventato uno standardIEEE (IEEE P1363 2)[1].

Dimensioni della chiave e della firma in confronto al DSA

[modifica |modifica wikitesto]

Come in generale nella crittografia delle curve ellittiche, la dimensione in bit dellachiave pubblica necessaria all'ECDSA è circa il doppio della dimensione del livello di sicurezza in bit. Per esempio, con un livello di sicurezza di 80 bit (un massimo di280{\displaystyle 2^{80}} operazioni necessarie ad un aggressore informatico per trovare la chiave privata) la dimensione di una chiave pubblica ECDSA sarebbe di 160 bit, laddove ladimensione della chiave pubblica DSA è di almeno 1024 bit. La dimensione della firma è la stessa per ECDSA e DSA:4t{\displaystyle 4t} bit, dovet{\displaystyle t} è il livello di sicurezza misurato in bit; nell'esempio precedente (cont{\displaystyle t} = 80 bit), la dimensione della firma è di 320 bit.

Algoritmo di generazione della firma

[modifica |modifica wikitesto]

Si supponga cheAlice voglia mandare aBob un messaggio protetto dafirma digitale. Inizialmente devono accordarsi sui parametri della curva(CURVE,G,n){\displaystyle ({\textrm {CURVE}},G,n)}. Oltre al campo e all'equazione della curva, è necessarioG{\displaystyle G}, un punto base di ordine primo sulla curva;n{\displaystyle n} è l'ordine moltiplicativo del puntoG{\displaystyle G}.

Parametro
CURVEcampo ed equazione della curva ellittica usata
Gpunto base della curva, un generatore della curva ellittica avente ordine primo grande n
nordine intero diG, tale per cuin×G=O{\displaystyle n\times G=O}

Alice genera una coppia di chiavi consistente in una chiave privatadA{\displaystyle d_{A}}, scelta casualmente nell'intervallo[1,n1]{\displaystyle [1,n-1]} ed una chiave pubblicaQA=dA×G{\displaystyle Q_{A}=d_{A}\times G}. Si usa×{\displaystyle \times } per indicare la moltiplicazione di uno scalare per un punto dellacurva ellittica.

Al fine di generare una firma per il messaggiom{\displaystyle m}, Alice segue questi passi:

  1. Calcolae=HASH(m){\displaystyle e={\textrm {HASH}}(m)}, dove HASH è unafunzione crittografica di hash, come SHA-2.
  2. Siaz{\displaystyle z} la stringa formata daiLn{\displaystyle L_{n}} bit più a sinistra die{\displaystyle e}, doveLn{\displaystyle L_{n}} è la lunghezza in bit del gruppo di ordinen{\displaystyle n}.
  3. Seleziona casualmente in modocrittografico-sicuroun interok{\displaystyle k} dall'intervallo[1,n1]{\displaystyle [1,n-1]}.
  4. Calcola il punto della curva(x1,y1)=k×G{\displaystyle (x_{1},y_{1})=k\times G}.
  5. Calcolar=x1modn{\displaystyle r=x_{1}\,{\bmod {\,}}n}. Ser=0{\displaystyle r=0}, ritorna al passo 3.
  6. Calcolas=k1(z+rdA)modn{\displaystyle s=k^{-1}(z+rd_{A})\,{\bmod {\,}}n}. Ses=0{\displaystyle s=0}, ritorna al passo 3.
  7. La firma è la coppia(r,s){\displaystyle (r,s)}.

Computandos{\displaystyle s}, la stringaz{\displaystyle z} risultante daHASH(m){\displaystyle {\textrm {HASH}}(m)} deve essere convertita ad intero. Si noti chez{\displaystyle z} può esserepiù grande din{\displaystyle n} ma nonpiù lunga.[2]

Come stabiliscono gli standard, è cruciale che vengano selezionatik{\displaystyle k} diversi per firme diverse, altrimenti l'equazione al passo 6 può essere risolta perdA{\displaystyle d_{A}}, la chiave privata: date due firme(r,s){\displaystyle (r,s)} e(r,s){\displaystyle (r,s')}, l'impiegare la stessak{\displaystyle k} per due messaggi differentim{\displaystyle m} em{\displaystyle m'} apre ad una vulnerabilità ad attacchi. Un aggressore può calcolarez{\displaystyle z} ez{\displaystyle z'}, e poichéss=k1(zz){\displaystyle s-s'=k^{-1}(z-z')} (tutte le operazioni di questo paragrafo sono svolte in modulon{\displaystyle n}) l'aggressore può trovarek=zzss{\displaystyle k={\frac {z-z'}{s-s'}}}. Dato ches=k1(z+rdA){\displaystyle s=k^{-1}(z+rd_{A})}, l'aggressore può ora calcolare la chiave privatadA=skzr{\displaystyle d_{A}={\frac {sk-z}{r}}}. Questa implementazione errata è stata sfruttata, per esempio, per estrarre la firma digitale usata nella consolePlayStation 3.[3]

Un'altra situazione in cui la firma ECDSA può lasciare trapelare le chiavi private si ha quandok{\displaystyle k} è generato da unrandom number generator difettoso. Una falla simile causò la perdita dei fondi di alcuni portafogli dibitcoin su piattaformaAndroid nell'agosto 2013.[4] Per assicurare chek{\displaystyle k} sia unico per ogni messaggio si può bypassare completamente la generazione casuale e ottenere una firma in modo deterministico computandok{\displaystyle k} dal messaggio e dalla chiave privata.[5]

Algoritmo di verifica della firma

[modifica |modifica wikitesto]

Per autenticare la firma di Alice, Bob deve avere una copia della chiave pubblicaQA{\displaystyle Q_{A}}. Bob può verificare cheQA{\displaystyle Q_{A}} è un punto valido della curva nel modo seguente:

  1. Controlla cheQA{\displaystyle Q_{A}} non sia uguale all'elemento neutroO{\displaystyle O}, e che le sue coordinate siano altrettanto valide.
  2. Controlla cheQA{\displaystyle Q_{A}} appartenga alla curva.
  3. Controlla chen×QA=O{\displaystyle n\times Q_{A}=O}.

Dopo, Bob farà quanto segue:

  1. Verifica cher{\displaystyle r} es{\displaystyle s} siano interi appartenenti a[1,n1]{\displaystyle [1,n-1]}. In caso contrario, la firma non è valida.
  2. Computae=HASH(m){\displaystyle e={\textrm {HASH}}(m)}, dove HASH è la stessa funzione usate nel processo di generazione della firma.
  3. Siaz{\displaystyle z} la stringa formata daiLn{\displaystyle L_{n}} bit più a sinistra die{\displaystyle e}.
  4. Calcolaw=s1modn{\displaystyle w=s^{-1}\,{\bmod {\,}}n}.
  5. Calcolau1=zwmodn{\displaystyle u_{1}=zw\,{\bmod {\,}}n}u2=rwmodn{\displaystyle u_{2}=rw\,{\bmod {\,}}n}.
  6. Calcola il punto della curva(x1,y1)=u1×G+u2×QA{\displaystyle (x_{1},y_{1})=u_{1}\times G+u_{2}\times Q_{A}}.
  7. La firma è valida serx1(modn){\displaystyle r\equiv x_{1}{\pmod {n}}}, altrimenti non è accettata.

Si noti che usando loShamir's trick, una somma di due moltiplicazioni scalariu1×G+u2×QA{\displaystyle u_{1}\times G+u_{2}\times Q_{A}} può essere calcolata in tempo inferiore a quello necessario allo svolgimento indipendente delle due moltiplicazioni scalari.[6]

Correttezza dell'algoritmo

[modifica |modifica wikitesto]

Il corretto funzionamento dell'algoritmo di verifica non è banale. Si denoti conC{\displaystyle C} il punto della curva calcolato al passo 6 della verifica,

C=u1×G+u2×QA{\displaystyle C=u_{1}\times G+u_{2}\times Q_{A}}

Sostituendo la definizione della chiave pubblicaQA=dA×G{\displaystyle Q_{A}=d_{A}\times G},

C=u1×G+u2dA×G{\displaystyle C=u_{1}\times G+u_{2}d_{A}\times G}

La moltiplicazione di un punto della curva ellittica per uno scalare gode della proprietà distributiva,

C=(u1+u2dA)×G{\displaystyle C=(u_{1}+u_{2}d_{A})\times G}

Espandendo la definizione diu1{\displaystyle u_{1}} eu2{\displaystyle u_{2}} dal passo 5 dell'algoritmo di verifica,

C=(zs1+rdAs1)×G{\displaystyle C=(zs^{-1}+rd_{A}s^{-1})\times G}

Raccogliendos1{\displaystyle s^{-1}},

C=(z+rdA)s1×G{\displaystyle C=(z+rd_{A})s^{-1}\times G}

Espandendo la definizione dis{\displaystyle s} dal passo 6 dell'algoritmo di generazione della firma,

C=(z+rdA)(z+rdA)1(k1)1×G{\displaystyle C=(z+rd_{A})(z+rd_{A})^{-1}(k^{-1})^{-1}\times G}

Dato che l'inverso dell'inverso è uguale all'elemento originale, e il prodotto fra l'inverso di un elemento e l'elemento stesso è l'identità, l'espressione si può così semplificare

C=k×G{\displaystyle C=k\times G}

Dalla definizione dir{\displaystyle r}, questo è il passo 6 dell'algoritmo di verifica.

Questo però mostra solo che un messaggio firmato correttamente supererà la verifica; sono necessarie molte altre proprietà per un algoritmo di firma sicuro.

Sicurezza

[modifica |modifica wikitesto]

Nel dicembre 2010, un gruppo che si fa chiamarefail0verflow annunciò di aver scoperto la chiave privata ECDSA usata da Sony per firmare i software della consolePlaystation 3. Tuttavia, questo attacco funzionò perché Sony non implementò correttamente l'algoritmo,k{\displaystyle k} era statico invece che casuale. Come è sottolineato nella precedente sezioneAlgoritmo di generazione della firma, ciò rende risolvibiledA{\displaystyle d_{A}} ed inutile l'intero algoritmo.[7]

Il 29 marzo del 2011, due ricercatori pubblicarono un documento IACR[8] dimostrando che è possibile recuperare una chiave privata TLS di un server usandoOpenSSL il quale esegue un'autenticazione ECDSA su un campo binario attraverso un timing attack.[9] La vulnerabilità ha ricevuto unfix nella release OpenSSL 1.0.0e.[10]

Nell'agosto 2013, è stato reso pubblico che alcune implementazioni della classeJavaSecureRandom. talvolta generavano collisioni nel valorek{\displaystyle k}. Come discusso sopra, questo ha permesso la risoluzione delle chiavi private, di conseguenza ciò ha aperto alla possibilità di rubarebitcoin dalle app Wallet Android, le quali erano basate su ECDSA per l'autenticazione delle transazioni.[11]

Questo problema può essere risolto da una generazione deterministica dik{\displaystyle k}, come descritto da RFC 6979[5].

Note

[modifica |modifica wikitesto]
  1. ^Crittosistemi basati su curve ellittiche, sudi.unisa.it(archiviato dall'url originale il 5 aprile 2013).
  2. ^NIST FIPS 186-4, July 2013, pp. 19 and 26 (PDF).
  3. ^Console Hacking 2010 - PS3 Epic Fail (PDF), pp. 123-128(archiviato dall'url originale il 15 dicembre 2014).
  4. ^Android Security Vulnerability, subitcoin.org.URL consultato il 24 febbraio 2015.
  5. ^abRFC 6979 - Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA), sutools.ietf.org.URL consultato il 24 febbraio 2015.
  6. ^The Double-Base Number System in Elliptic Curve Cryptography (PDF), sulirmm.fr.URL consultato il 22 aprile 2014.
  7. ^ Mike Bendel,Hackers Describe PS3 Security As Epic Fail, Gain Unrestricted Access, Exophase.com, 29 dicembre 2010.URL consultato il 5 gennaio 2011.
  8. ^Cryptology ePrint Archive: Report 2011/232, sueprint.iacr.org.URL consultato il 24 febbraio 2015.
  9. ^Vulnerability Note VU#536044 - OpenSSL leaks ECDSA private key through a remote timing attack.
  10. ^ChangeLog, OpenSSL Project.
  11. ^ 12 Aug 2013 at 00:43, Richard Chirgwin tweet_btn(),Android bug batters Bitcoin wallets, sutheregister.co.uk.URL consultato il 17 gennaio 2017.

Bibliografia

[modifica |modifica wikitesto]

Voci correlate

[modifica |modifica wikitesto]

Collegamenti esterni

[modifica |modifica wikitesto]
 Portale Crittografia: accedi alle voci di Wikipedia che trattano di crittografia
Estratto da "https://it.wikipedia.org/w/index.php?title=Elliptic_Curve_Digital_Signature_Algorithm&oldid=139821482"
Categoria:

[8]ページ先頭

©2009-2025 Movatter.jp