Ho visto che in gmail ci sono 3 certificati in gerarchia. Ho notato che tutti i certificati hanno lo stesso esponente (65537 con 24 bit). Perché il valore dell'esponente è lo stesso per tutti i certificati e in che modo?
Ho visto che in gmail ci sono 3 certificati in gerarchia. Ho notato che tutti i certificati hanno lo stesso esponente (65537 con 24 bit). Perché il valore dell'esponente è lo stesso per tutti i certificati e in che modo?
Questo è un trucco comune per accelerare la crittografia e la verifica. L'esponente è speciale, in quanto è un numero primo piccolo con solo due bit impostati, il che rende l'esponenziazione modulare nel software abbastanza veloce. Un altro esponente pubblico comunemente usato è 3, ma penso che uno stia perdendo il favore in questi giorni.
Vedi questa domanda per ulteriori informazioni sulla sicurezza di questi esponenti speciali.
Per quanto riguarda il "come" di questi esponenti, poiché il modulo è generato casualmente (entro certi limiti, ovviamente), la chiave privata è ancora casuale e non può essere determinata dall'esponente pubblico e dal modulo da solo.
Il motivo per cui desideriamo il minor numero possibile di esponenti è il modo in cui viene eseguita l'esponenziazione modulare. Quando si calcola la componente a potenza modulare utilizzando la chiave pubblica, si hanno solo due numeri: l'esponente pubblico, e e il modulo, n . Per le chiavi private, possiamo avere ulteriori informazioni (in realtà i fattori principali di n ) per accelerare i calcoli (puoi cercare "Teorema del resto cinese" per RSA se sei interessato), ma ovviamente questi fattori primi non possono essere distribuiti insieme alla chiave pubblica. Pertanto, rimaniamo con lo algoritmo quadrato standard
di base. L'idea principale dell'algoritmo è di quadrare il messaggio per ciascun bit del tuo esponente e moltiplicarlo per un accumulatore quando viene impostato il bit corrispondente nell'esponente. Dì, vuoi calcolare m 13 . Per prima cosa scrivi come una moltiplicazione di una serie di m 2 j , cioè m 2 3 · m 2 2 · m 2 0 . Impostare una variabile su m e ottenere su 1. Ora, iniziare a contare da 0 a 3 (la lunghezza massima del modulo del bit). Per ogni valore, se 13 ha la posizione di bit al contatore impostato, moltiplicare il risultato con la variabile. Prima di aumentare il tuo contatore, piazza la tua variabile. Con questo schema, calcolerai m , m 2 , m 4 e m 8 ad ogni iterazione del tuo loop dalla quadratura della tua variabile. Quando un bit è impostato in esponente, scegli il valore e moltiplicalo con il risultato per ottenere m · m 2 · m 8 ( che è m 13 ). Per una chiave casuale a 1024 bit, dovrai chiamare sqrmod(m, n)
1024 volte e anche mulmod(accumulator, m, n)
circa 512 volte (i bit sono casuali, quindi sappiamo solo che è inferiore a 1024 e 512 in media).
Quando hai un piccolo esponente con solo due bit impostati, ad esempio 65537, devi quadrare solo 16 volte e moltiplicare una sola volta ( m 2 k può essere calcolato inizializzando un valore in m e ripetendo ripetutamente k e m 65537 = m 2 16 · m ). È ancora più veloce quando l'esponente è 3: si piazza una volta e si moltiplica una volta.
Leggi altre domande sui tag tls certificates