In un protocollo di autenticazione , S ha una coppia di chiavi pubblica / privata nota a C, e S e C hanno stabilito un canale sicuro (ad esempio, utilizzando DH o ECDH, o qualsiasi altro scambio di chiavi protocollo). C desidera determinare se il peer su questo canale sicuro possiede la chiave privata.
In ECDSA, la coppia di chiavi è una coppia di chiavi a curva ellittica e l'algoritmo di firma utilizza lo schema DSA (DSS) con la curva ellittica. È noto che lo schema DSA presenta alcune proprietà indesiderabili: i punti deboli del RNG sono una preoccupazione reale, considerando che un utente malintenzionato può ottenere un milione di firme.
Se è richiesta solo l'autenticazione, non è necessario uno schema di firma completo (ovvero, non è richiesta la possibilità di firmare messaggi arbitrari). Quali schemi alternativi potrebbero essere utilizzati per evitare la proprietà terrificante che il riutilizzo della chiave di identificazione in più firme finirà per perderlo?
Segue uno schema semplice:
- C utilizza IES per crittografare un nonce
N1
e invia questo a S (questo è lo schema di crittografia integrato della curva ellittica). - S quindi invia
HMAC(key=Z, N1)
alla C, doveZ
è un segreto condiviso ottenuto tramite la fase di scambio della chiave (ricorda, abbiamo già stabilito un canale condiviso usando DH o qualche altro metodo).
Ciò dimostra il possesso della chiave privata: è richiesta la chiave privata per S per ottenere N1
da EIS(N1)
. Il server non è un oracolo di decodifica - non decifrare messaggi arbitrari per conto di C, ma piuttosto risponde con l'HMAC del valore decrittografato. Infine, poiché il segreto condiviso Z è stato mescolato, che è stato determinato congiuntamente da C e S, la firma non può essere utilizzata per eseguire un uomo nell'attacco centrale: qualcuno che desidera impersonare S a C viene inviato da C al% cifratoN1
, ma non può inoltrarlo a S per la firma, perché la firma è legata al Z
del canale.
Domanda
- Il mio schema semplice-morto ha un nome? È debole? Sembra evitare il problema del DSA in cui più firme potrebbero rivelare la chiave, ma non ho fatto tutta l'algebra per essere sicuro!
- Quali sono le soluzioni standard più diffuse al problema? FHMQV è brevettato, purtroppo, ma è progettato esattamente per questa situazione, non è vero? Immagino che la soluzione popolare sembra essere ECDSA (usata in TLS, SSH), che spero di evitare.
Commento
- L'articolo di Menezes "schemi di firma di curve ellittiche" nella "Enciclopedia della crittografia e della sicurezza" elenca DSA, Schnorr, Nyberg-Rueppel come i vari schemi di firma della curva ellittica noti. Il DSA è quello che non mi piace, e Nyberg-Rueppel apparentemente ha esattamente la stessa debolezza del DSA (due firme che usano nozioni con alcuni bit noti nelle comuni informazioni sulle chiavi private di perdita). Le firme di Schnorr sembrano buone, ma non sembrano essere ampiamente utilizzate.
- L'HCR di Hugo Krawczyk (Hashed Challenge-Response, basato su XCR, Exponential Challenge-Response) sembra molto promettente - è una versione rinforzata di Schnorr che dovrebbe essere più robusta. Penso che sia coperto da Brevetto EP1847062B1 , tuttavia, che scade intorno al 2025 a quanto pare.