Colección de citas famosas - Colección de poesías - Resumen de cifrado (AES, RSA)

Resumen de cifrado (AES, RSA)

Al depurar conjuntamente con un tercero, encontrará varios algoritmos de cifrado, así que los resumiré.

AES no cifra el texto sin formato de una sola vez, sino que lo cifra en bloques. Primero divide el texto sin formato en bloques de igual longitud, cada bloque tiene un tamaño de 128 bits, y luego cifra cada bloque pequeño. Entonces surge el problema. No todas las cadenas de texto sin formato originales se pueden dividir equitativamente en 128 bits. Por ejemplo, si el tamaño de la cadena original es de 200 bits, entonces el segundo bloque tiene solo 72 bits, por lo que es necesario rellenar el segundo bloque. segundo bloque El tamaño alcanza los 128 bits. Los modos de relleno comunes son:

No se requiere relleno y el tamaño de la cadena cifrada original debe ser un múltiplo entero de 128 bits

Suponiendo que el tamaño del bloque es de 8 bytes, si el bloque; El tamaño es de 8 bytes. Si la diferencia es de n bytes, complete n en el bloque original hasta que esté lleno de 8 bytes. Ejemplo: el bloque {1,2,3} tiene 5 bytes diferentes de 8 bytes, luego el resultado completo {1,2,3,5,5,5,5,5} es seguido por cinco 5, el bloque {1, 2,3,..7} es 1 byte diferente de los 8 bytes, entonces la finalización es {1,2,3,...,7,1}, lo que significa que se agrega un 1.

¿Qué pasa si hay exactamente 8 bytes y se selecciona el método de llenado PKCS5Padding? Una vez completado el bloque {1,2,3...8}, se convierte en {1,2,3...8,8...8} y se agregan ocho 8 a la cadena original. esto es que es conveniente para descifrar, solo necesita mirar el último bit para determinar cuál es el tamaño del bloque original.

El método de llenado es el mismo que el de PKCS5Padding. La diferencia es que PKCS5Padding solo llena 8 bytes, mientras que PKCS7Padding puede llenar bloques de 1 a 256 bytes. El método de relleno predeterminado de aes en openssl es PKCS7Padding

AES tiene múltiples modos de cifrado, incluidos: ECB, CBC, CTR, OCF, CFB, los más comunes son los modos ECB y CBC.

El modo de cifrado más simple, cada bloque se cifra de forma independiente y el cifrado entre bloques no se afecta entre sí, por lo que puede ser paralelizado y eficiente.

Aunque este cifrado es muy simple, no es seguro. Si el texto sin formato de los dos bloques es exactamente el mismo, entonces las cosas cifradas serán exactamente iguales.

Funciones relacionadas de openssl:

Se introduce un nuevo concepto en el modo CBC, el vector inicial iv. El propósito de iv es evitar que el mismo bloque de texto sin formato se cifre en el mismo contenido. El principio es que el primer bloque de texto sin formato se realiza mediante XOR con el vector inicial y luego se cifra, el segundo bloque se realiza mediante XOR con el primer bloque de texto cifrado y luego se cifra, y así sucesivamente, para evitar que el mismo bloque se cifre con el mismo contenido.

Funciones relacionadas con openssl:

¡Toca la pizarra! ! Por lo tanto, al conectarse con un tercero, si la otra parte dice que usa cifrado AES, asegúrese de hacerle tres preguntas del alma:

La función de la firma es permitir que el destinatario verifique que el los datos que envió no han sido manipulados; están cifrados. La función es garantizar que los datos no sean robados.

Principio: Tienes una cadena A original que necesita ser verificada.

Paso 1: Seleccione el algoritmo hash para aplicar hash A para obtener hash_a

Paso 2: Cifre hash_a para obtener el valor cifrado encrypt_a

Paso 3: Envíe la cadena A original y el encrypt_a cifrado al tercero, y el tercero verificará la firma. El tercero primero descifra encrypt_a y obtiene un valor hash hash_a1, y luego usa el mismo algoritmo hash para codificar la cadena A original. El resultado es hash_a antes del cifrado. Si hash_a = hash_a1, entonces la verificación de la firma es exitosa.

rsa utiliza la clave privada para cifrar la información para la firma y utiliza la clave pública para descifrarla y verificar la firma.

Funciones relacionadas con Openssl:

Nota: m en las dos funciones es el valor hash de la cadena original y el tipo representa el algoritmo para generar m. Por ejemplo, NID_sha256 representa el uso de sha256. para aplicar hash a la cadena original, devolver 1 significa que la firma o verificación fue exitosa y -1 significa falla.

¡Vuelve a tocar la pizarra! ! Por lo tanto, si un tercero dice que se utilice rsa para verificar la firma, la otra parte debe informarle sobre su algoritmo hash.

En primer lugar, está claro que el cifrado de clave privada no es igual a la firma. Al cifrar, utilice el cifrado de clave pública y el tercero utilizará su clave privada para descifrarlo.

La función de cifrado de clave pública en openssl es RSA_public_encrypt y la función de descifrado de clave privada es RSA_private_decrypt. Para obtener más información, puede consultar la documentación oficial usted mismo.

rsa también implica el método de llenado, por lo que debe preguntar claramente al conectarse.

Al utilizar la clave pública para el cifrado, encontrará que el resultado del cifrado es diferente cada vez. , pero cuando uso el cifrado de clave privada, el resultado es el mismo cada vez que revisé en línea y descubrí que se debe al método de relleno.

Descripción del documento oficial:

Entonces, ¿por qué se debe utilizar la clave privada para la firma y la clave pública para el cifrado, en lugar de la clave pública para la firma y la clave privada para el cifrado?

Por poner un ejemplo: