Resumen cifrado (AES, RSA)
Me he encontrado con una amplia variedad de algoritmos de cifrado mientras trabajaba con terceros, así que los resumiré.
AES no es un cifrado de texto plano de una sola vez, sino un cifrado de bloques, es decir, el texto plano se corta primero en bloques de igual longitud, cada bloque tiene un tamaño de 128 bits y luego cada uno pequeño. El bloque está cifrado. El problema es que no todo el texto sin formato original se puede dividir en bloques de 128 bits; por ejemplo, si el tamaño de la cadena original es de 200 bits, entonces el segundo bloque es de solo 72 bits, por lo que es necesario rellenar el segundo bloque para que el segundo bloque sea de 128 bits. Los modos de relleno comunes son
Sin relleno, la cadena cifrada original debe ser un múltiplo entero de 128 bits. 128bit;
Suponiendo que el tamaño del bloque es de 8 bytes, si este bloque tiene n bytes menos de 8 bytes, entonces el bloque original se rellenará con n bytes hasta que esté lleno de 8 bytes. Por ejemplo: bloque de datos {1,2,3}, 8 bytes difieren en 5 bytes, luego el resultado después de completar {1,2,3,5,5,5,5,5} es 5 5, y el bloque de datos {1,2,3,...7} es 1 byte diferente de 8 bytes, por lo que el complemento es {1,2,3,...
Si son exactamente 8 bytes, y ¿Qué ¿Qué debo hacer si elijo PKCS5Padding? El bloque {1,2,3....8} se convierte en {1,2,3...8,8...8} después de completarse, y la cadena original se completa más tarde con 8 8, la razón de esto. es para facilitar el descifrado, puede saber el tamaño del bloque original con solo mirar el último bit.
Idéntico a PKCS5Padding, excepto que PKCS5Padding solo se usa para 8 bytes de relleno, mientras que PKCS7Padding se puede usar para tamaños de bloques de datos de 1 a 256 bytes: los más comunes son los modos ECB y CBC.
Uno de los modos de cifrado más simples es que cada bloque se cifra de forma independiente. El cifrado entre bloques no se afecta entre sí, por lo que es paralelo y eficiente.
Aunque este método de cifrado es simple, no es seguro. Si el texto sin formato de los dos bloques es exactamente el mismo, el resultado cifrado será exactamente el mismo.
Funciones relacionadas de openssl:
Se introduce un nuevo concepto en el modelo CBC, a saber, el vector inicial iv. El principio es utilizar el vector inicial para cifrar el primer bloque de texto sin formato, utilizar el primer bloque de texto sin formato para cifrar el segundo bloque de texto sin formato, y así sucesivamente para evitar que el mismo bloque de texto sin formato se cifre con el mismo contenido.
Funciones relacionadas con openssl:
Blackboard! Por lo tanto, al interactuar con un tercero, si la otra parte dice que usa cifrado AES, asegúrese de hacerle tres preguntas:
La firma es para que el destinatario verifique que los datos que le pasa no han sido manipulado; cifrado Esto es para garantizar que los datos no sean robados.
Cómo funciona: tienes una cadena A sin formato que necesita ser firmada.
Paso 1: Elija un algoritmo de hash para aplicar el hash A y obtenga hash_a;
Paso 2: Cifre hash_a y obtenga el valor cifrado encrypt_a; 3: Envíe la cadena A original y el encrypt_a cifrado a un tercero, y el tercero verificará la firma. El tercero descifra encrypt_a, obtiene el valor hash hash_a1 y luego utiliza el mismo algoritmo hash para cifrar la cadena A original (es decir, hash_a antes del cifrado). Si hash_a = hash_a1, la verificación de la firma es exitosa.
rsa utiliza la clave privada para cifrar el mensaje para su firma y la clave pública para descifrar el mensaje para su verificación de firma.
funciones relacionadas con openssl:
Nota: m en las dos funciones es el valor de la cadena original después del hash, y el tipo indica el algoritmo que genera m. Por ejemplo, NID_sha256 significa que la cadena original se aplica mediante hash usando sha256, devolviendo 1 si la firma es exitosa o la verificación de la firma es exitosa, y -1 bit si falla.
¡Vuelve a llamar a la puerta! Entonces, si un tercero dice que use rsa para verificar firmas, pídale que le diga su algoritmo hash.
En primer lugar, el cifrado de clave privada es obviamente diferente de la firma. Al cifrar, su clave pública se utiliza para cifrar y el tercero utiliza su clave privada para descifrar.
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, por lo que puede consultar la documentación oficial usted mismo.
rsa también implica el método de llenado, por lo que también debe preguntar claramente al conectarse.
Al utilizar el cifrado de clave pública, encontrará que el resultado del cifrado es diferente cada vez y cuándo. Usando cifrado de clave privada, el resultado es el mismo cada vez que revisé en línea y descubrí que se debía al método de relleno.
Documento oficial:
Entonces, ¿por qué debemos utilizar firma de clave privada y cifrado de clave pública en lugar de firma de clave pública y cifrado de clave privada?
Por ejemplo: