He visto que en gmail, hay 3 certificados en jerarquía. Noté que todos los certificados tienen el mismo exponente (65537 con 24 bits). ¿Por qué el valor exponencial es el mismo para todos los certificados y cómo?
He visto que en gmail, hay 3 certificados en jerarquía. Noté que todos los certificados tienen el mismo exponente (65537 con 24 bits). ¿Por qué el valor exponencial es el mismo para todos los certificados y cómo?
Este es un truco común para acelerar el cifrado y la verificación. El exponente es especial, ya que es un número primo pequeño con solo dos bits establecidos, lo que hace que la exponenciación modular en el software sea lo suficientemente rápida. Otro exponente público de uso común es 3, pero creo que uno está perdiendo popularidad en estos días.
Consulte esta pregunta para obtener más información. sobre la seguridad de estos exponentes especiales.
En cuanto al "cómo" de estos exponentes, dado que el módulo se genera aleatoriamente (dentro de algunas restricciones, por supuesto), la clave privada es aún aleatoria, y no se puede determinar solo a partir del exponente público y el módulo. p>
La razón por la que queremos la menor cantidad posible de bits en el exponente es la forma en que se realiza la exponenciación modular. Cuando está calculando la exponencia modular utilizando la clave pública, solo tiene dos números: el exponente público, e y el módulo, n . Para las claves privadas, podemos tener más información (en realidad, los factores primarios de n ) para acelerar los cálculos (puede consultar el "Teorema del resto chino" para RSA si está interesado), pero obviamente Estos factores primarios no pueden distribuirse junto con la clave pública. Por lo tanto, nos queda el algoritmo cuadrado y multiplicación .
La idea principal del algoritmo es cuadrar el mensaje para cada bit de su exponente, y multiplicarlo a un acumulador cuando se establece el bit correspondiente en el exponente. Digamos que desea calcular m13 . Primero lo escribe como una multiplicación de una serie de m2j , es decir, m 2 3 · m 2 2 · m 2 0 . Establezca una variable en m y el resultado en 1. Ahora, comience a contar de 0 a 3 (la longitud máxima de bits del módulo). Para cada valor, si 13 tiene la posición de bit en el contador establecido, multiplique su resultado con la variable. Antes de aumentar tu contador, ajusta tu variable. Con este esquema, calculará m , m2 , m4 y m8 en cada iteración de su ciclo desde la cuadratura de su variable. Cuando se establece un bit en exponente, usted elige el valor y lo multiplica por el resultado para obtener m·m·sup>2·m8 ( que es m13 ). Para una clave aleatoria de 1024 bits, deberá llamar a sqrmod(m, n)
1024 veces, y también a mulmod(accumulator, m, n)
aproximadamente 512 veces (los bits son aleatorios, por lo que solo sabemos que es menos de 1024, y 512 en promedio). / p>
Cuando tiene un pequeño exponente con solo dos bits establecidos, digamos 65537, necesita cuadrar solo 16 veces y multiplicar solo una vez ( m 2 k puede calcularse inicializando un valor en m , y cuadrándolo repetidamente k veces, y m 65537 = m 2 16 · m ). Es incluso más rápido cuando el exponente es 3: usted cuadra una vez y se multiplica una vez.
Lea otras preguntas en las etiquetas tls certificates