¿Cómo cifrar RSA con una clave pública RSA codificada en 16? Repasemos el algoritmo de cifrado RSA. Partimos de la definición del algoritmo de cifrado de clave pública y del algoritmo de firma, y utilizamos un lenguaje relativamente estandarizado para describir este algoritmo. El sistema de cifrado de clave pública RSA incluye los siguientes tres algoritmos: KeyGen (algoritmo de generación de claves), Encrypt (algoritmo de cifrado) y Decrypt (algoritmo de descifrado). (PK, SK)\leftarrowKeyGen(\lambda). El algoritmo de generación de claves toma la constante de seguridad \λ como entrada y genera la clave pública PK y la clave privada SK. La constante de seguridad se utiliza para determinar la seguridad del algoritmo de cifrado y generalmente está relacionada con el tamaño del número primo p utilizado en el algoritmo de cifrado. Cuanto mayor sea \lambda, mayor será el número primo P y mayor será la seguridad del sistema garantizada. En RSA, el algoritmo de generación de claves es el siguiente: primero, el algoritmo genera aleatoriamente dos números primos grandes diferentes, P y Q, y calcula N = pq. Luego, el algoritmo calcula la función de Euler\var phi(n)=(p-1)(q-1). A continuación, el algoritmo selecciona aleatoriamente un número entero e menor que \varphi(N) y calcula el elemento inverso modular d de e con respecto a \varphi(N). Finalmente, la clave pública es PK=(N, e) y la clave privada es SK=(N, d). CT\leftarrowEncrypt(PK,M) El algoritmo de cifrado toma la clave pública PK y el mensaje M a cifrar como entrada y genera el texto cifrado CT. En RSA, el algoritmo de cifrado es el siguiente: el algoritmo genera directamente el texto cifrado como CT = m e \ mod \ varphi (n) m \ leftarrow decryption (sk, CT). El algoritmo de descifrado toma la clave privada SK y el texto cifrado CT como entrada y genera el mensaje m. En RSA, el algoritmo de descifrado es el siguiente: el algoritmo genera directamente el texto sin formato como m = CT d \ mod \ varphi (n). Como e y d son recíprocos entre sí bajo \varphi(N), tenemos: CT d = m {ed} = m \ mod \ var phi (n). Por lo tanto, a partir de la descripción del algoritmo, también podemos ver que la clave pública se usa para cifrar datos y la clave privada para descifrar datos. Por supuesto, esto también se puede entender intuitivamente: la clave pública es la clave pública, y sólo si se hace pública la gente puede utilizarla para cifrar datos. La clave privada es la clave privada. Quien tenga esta clave puede descifrar el texto cifrado. De lo contrario, todos podrán ver el descifrado de la clave privada y será un caos. = = = = = = = = = = = = = = línea divisoria = = = = = = = = = = = = = = = = = = = = = = = = = = = = Repasemos nuevamente el sistema de firma RSA . El sistema de firma también incluye tres algoritmos: KeyGen (algoritmo de generación de claves), Sign (algoritmo de firma) y Verify (algoritmo de verificación). (PK, SK)\leftarrowKeyGen(\lambda). El algoritmo de generación de claves también toma la constante de seguridad \λ como entrada y genera la clave pública PK y la clave privada SK. En las firmas RSA, el algoritmo de generación de claves es exactamente el mismo que el algoritmo de cifrado. \sigma\leftarrowSign(SK, M). El algoritmo de firma toma la clave privada SK y el mensaje a firmar m como entrada y genera la firma \sigma. En las firmas RSA, el algoritmo de firma genera directamente la firma como \sigma = m d \ mod \ varphi (n). Tenga en cuenta que el algoritmo de firma es muy similar al algoritmo de descifrado del sistema de cifrado RSA. b\leftarrowVerify(PK,\sigma,M). El algoritmo de verificación toma la clave pública PK, la firma \sigma y el mensaje m como entrada y genera un valor de bit B. B=1 indica que se pasó la verificación. B=0 significa que la verificación falló. En la firma RSA, el algoritmo de verificación primero calcula m' = \sigma e \ mod \varphi (n) y luego compara m ' y m. Si son iguales, genera b=1; de lo contrario, genera b=0. Nota: El algoritmo de autenticación es muy similar al algoritmo de cifrado del sistema de cifrado RSA. Por lo tanto, en un algoritmo de firma, la clave privada se utiliza para firmar los datos y la clave pública para verificar la firma.
Esto también se puede entender de manera muy intuitiva: para firmar un archivo, por supuesto debemos usar la clave privada, porque esperamos que solo nosotros podamos completar la firma. Por supuesto, espero que todos pasen por el proceso de verificación. Cuando todos vean la firma, pasará la verificación, lo que demuestra que la firmé yo mismo. = = = = = = = = = = = = = = = = = = = = = = = = = = = = Entonces, ¿por qué el sujeto hizo tal pregunta? Podemos ver que los procesos de cifrado/verificación, descifrado/firma de RSA son demasiado similares. Al mismo tiempo, el sistema RSA en sí es simétrico: si tratamos a E como la clave privada y a D como la clave pública, este sistema también se puede implementar bien. Creo que es por eso que el sujeto tiene este tipo de confusión al aprender el sistema RSA. Entonces ¿cuál es la solución? Se sugiere que el tema pueda aprender de otros sistemas de cifrado de clave pública y sistemas de firma. Otros sistemas no tienen esta simetría. Por ejemplo, para los sistemas de criptografía de clave pública, considere el cifrado ElGamal y el cifrado Cramer-Shoup, más seguro. Para los sistemas de firma, podemos observar más de cerca las firmas de El Gamal, o incluso las firmas BLS, que pueden ayudar al sujeto a comprender mejor las diferencias y posibles conexiones entre el cifrado y las firmas. En cuanto a cómo se combinan el cifrado y la firma. Este sistema se llama SignCrypt. En RSA, este signcrypt parece muy especial y puede causar confusión fácilmente. No quiero presentar aquí en detalle el esquema de combinación de cifrado y firma en RSA. Me gustaría recordarle al sujeto que cuando se combinan el cifrado y la firma, los dos conjuntos de claves públicas y privadas son diferentes.