Hola a todos, ¿tienen el código DES-CBC para VC también disponible? ¡Requiere el modo CBC!
Los algoritmos de cifrado son indispensables en el diseño de software de Internet y el cifrado simétrico se utiliza ampliamente. Los más comunes son el cifrado simétrico: DES, 3DES, RC4, AES, etc.; p>
Los algoritmos de cifrado tienen varias similitudes:
Longitud de la clave (relacionada con la fuerza de la clave)
Modo de cifrado (ecb, cbc, etc.) >
Distinción de relleno en el algoritmo de cifrado de bloques;
Muchos estudiantes no tienen muy claro el modo de cifrado. Por ejemplo, DES, también existen diferentes distinciones como ECB y CBC, que son todas estándar;
La biblioteca de cifrado de Windows está predeterminada en el modo CBC, pero también se puede configurar manualmente.
La biblioteca Openssl debería ser más obvia. Los nombres de sus funciones se escriben así, por ejemplo: DES_ncbc_encrypt, a primera vista, es el modo cbc;
JAVA también es relativamente claro: Cipher c = Cipher.getInstance ("DES/CBC/PKCS5Padding");
Varios ¿Cuál es la diferencia entre los modos de cifrado? (Para mayor comodidad, la clave de cifrado aquí es de 64 bits)
Modo ECB:
El modo más antiguo y simple. , divide los datos cifrados en varios grupos. Divide los datos cifrados en varios grupos, el tamaño de cada grupo es el mismo que la longitud de la clave de cifrado;
Luego cifra cada grupo con la misma clave. como el algoritmo DES. Si el último grupo tiene una longitud inferior a 64 bits, componga 64 bits;
Definición:
Enc(X, Y) es la función de cifrado.
Dec(X, Y) es la función de descifrado Función
Clave es la clave de cifrado;
Dec(X, Y) es la función de descifrado p>
Definición:
Modo de libro de códigos electrónico. La clave es la clave de cifrado.
Pi (i = 0, 1...n) es un bloque de texto sin formato de 64 bits; ;
Ci (i = 0, 1... .n) es el bloque de texto cifrado.
El algoritmo de cifrado del BCE se puede expresar como:
Ci =. Enc(Key, Pi)
El algoritmo de descifrado del BCE se puede expresar como:
Pi = Dec(Key, Ci)
Características del algoritmo:
La longitud de la clave, el texto sin formato y el texto cifrado debe ser de 64 bits cada vez;
No es necesario detectar el orden repetido de los bloques de datos
El mismo bloque de texto sin formato; la misma clave) produce el mismo bloque de texto cifrado, vulnerable a ataques de diccionario
El error sólo afecta a un bloque de texto cifrado;
Modo de cadena de bloques cifrados CBC:
La mayor diferencia con el modo ECB es la adición del vector inicial
Definición:
Enc(X, Y) es la función de cifrado
Dec(X, Y ) es la función de descifrado
Key es la clave de cifrado;
Pi (i = 0, 1...n) es texto sin formato. ...n) es un bloque de texto plano de tamaño 64 bits
Ci (i = 0, 1...n) es un bloque de texto cifrado.
/p>
C0 ( i = 0, 1...n) es el bloque de texto plano, con un tamaño de 64 bits
Ci ( i = 0, 1; ...n) es el bloque de texto cifrado, el tamaño es de 64 bits:
C0 = Enc(Key, XOR(IV, P0))
Ci = Enc(Key, XOR( Ci-1, Pi))
El algoritmo de descifrado del BCE se puede expresar como:
P0 = XOR(IV, Dec(Key, C0))
Pi = XOR(Ci-1, Dec(Key, Ci ))
Características del algoritmo:
La longitud del texto cifrado de cada cifrado es de 64 bits (8 bytes);
Utilice la misma clave y vector inicial Al cifrar el mismo texto sin formato, el modo CBC siempre produce el mismo texto cifrado;
El modo CBC siempre produce el mismo texto cifrado;
El bloque de texto cifrado depende según el resultado de la operación anterior, por lo tanto, los bloques de texto cifrado no se pueden reorganizar;
Se pueden usar diferentes vectores de inicialización para evitar generar el mismo texto cifrado a partir del mismo texto sin formato, que puede resistir ataques de diccionario hasta cierto punto. ;
Después de que ocurre un error, el texto cifrado actual y subsiguiente se verán afectados;
Modo de retroalimentación de cifrado CFB:
El modo de retroalimentación de cifrado supera la desventaja de tener que espere 8 bytes antes del cifrado. Utilice el cifrado en bloque como generador de flujo de claves;
Definición:
Enc(X, Y) es la función de cifrado
Key es la clave de cifrado;
Pi (i = 0, 1...n) es el texto sin formato. ...n) es un bloque de texto plano con un tamaño de 64 bits
Ci (i = 0, 1...n) es un bloque de texto cifrado con un tamaño de 64 bits;
Si (i = 0, 1...n), el tamaño es de 8 bits, n claves.
Oi = Enc (Key, Si);
Lef (x) es tomar los 8 bits de datos x más a la izquierda
A (x, y; ) Es desplazar x hacia la izquierda 8 bits y fusionarlo, y las vacantes se llenan con y
El algoritmo de cifrado CFB se puede expresar como:
S0 es el bloque de texto cifrado con un tamaño de 8 bits:
S0 = IV;
Oi = Enc(Key, Si
Ci = XOR( Ci, Lef); (Oi));
Si = A (Si-1, Ci);
El algoritmo de descifrado de CFB se puede expresar como
S0 = IV; /p>
Oi = Enc(Clave, Si)
p>
Ci = XOR( Ci, Lef(Oi)); Si-1, Ci);
Figura:
Características:
El número de bits de cifrado para cada Pi y Ci no supera los 64 bits;
El algoritmo de cifrado es el mismo que el algoritmo de descifrado y no se puede aplicar el algoritmo de clave pública;
Usando la misma clave y el mismo vector inicial
Cuando usando la misma clave y vector inicial, use el modo CFB para cifrar el mismo texto sin formato y generar el mismo texto cifrado;
Utilizar diferentes variables de inicialización puede producir diferentes textos cifrados para el mismo texto sin formato, evitando así ataques de diccionario;
La intensidad del cifrado depende de la longitud de la clave;
La longitud del cifrado de bloques que son demasiado pequeños aumentará el número de ciclos, lo que resultará en una mayor sobrecarga;
Cifrar un El bloque de 8 bits es una multiplicación de números enteros (multiplicación de bits enteros).
La longitud del bloque de cifrado debe ser un múltiplo entero de 8 bits (es decir, unidades de bytes).
La longitud del bloque de cifrado debe ser un múltiplo entero de 8 bits (); es decir: unidades de bytes), unidad de bytes);
Si un bit de datos es incorrecto, afectará el bloque actual y los siguientes 8;
Modo de retroalimentación de salida OFB:
A diferencia del modo CFB, el registro de desplazamiento de cifrado no tiene nada que ver con el texto cifrado, sino solo con la clave de cifrado y el algoritmo de cifrado;
El método consiste en ya no ingresar el texto cifrado en el modo de cifrado. registro de desplazamiento, pero para ingresar el texto cifrado en el registro de desplazamiento cifrado.
Definición:
Enc(X, Y) es la función de cifrado
Dec(X, Y) es la función de descifrado
La clave es la clave de cifrado;
Pi (i = 0, 1...n) es texto sin formato. ...n) es un bloque de texto sin formato, el tamaño es de 64 bits
Ci (i = 0, 1...n) es un bloque de texto cifrado, el tamaño es de 64 bits; > Si (i = 0, 1...n), el tamaño es de 8 bits, n claves.
n), el tamaño es de 8 bits, n Si consecutivos constituyen un registro de desplazamiento cifrado, generalmente n = 8;
Oi = Enc (Key, Si);
Lef(x) es para tomar los 8 bits más a la izquierda de los datos /p>
S0 = IV
Oi = Enc(Key, Si
Ci = XOR( Ci, Lef(); Oi));
Si = A(Si-1, Oi); observe la diferencia entre este y el modo CFB
El algoritmo de descifrado CFB se puede expresar como:
S0 = IV;
Oi = Enc(Clave, Si);
Ci = XOR(Ci, Lef(Oi)).
Si = A(Si-1, Oi);
Características:
Similar al CFB, las diferencias son las siguientes;
Dado que el texto cifrado no participa en la operación en cadena, esto hace que el modo OFB sea más vulnerable a los ataques;
No se realiza la propagación de errores y un error en un determinado bit del texto cifrado solo afectará al bit en el texto claro correspondiente, pero no afecta a otros bits.
Sin autosincronización, si las dos operaciones de cifrado y descifrado no están sincronizadas, es necesario reinicializar el sistema;
Se debe utilizar un vector de inicialización diferente para cada resincronización.
API de Windows para configuración de parámetros criptográficos:
CryptGetKeyParam le permite consultar un objeto HCRYPTKEY para varios parámetros, incluido el modo de cifrado, el modo de relleno, etc. Sin embargo, este parámetro también se puede usar para configurar el modo de cifrado, el modo de relleno, etc. del objeto HCRYPTKEY, pero esta función no se puede usar para consultar el texto sin formato de la clave de cifrado;
Pero si es necesario; para ver la clave de cifrado real, se requiere otra API: CryptExportKey Seleccione el método PLAINTEXTKEYBLOB para exportar y obtener el texto sin formato de la clave;
Tenga en cuenta al utilizar el cifrado:
Cuándo. los dos algoritmos de cifrado de encapsulación son de 8 bytes. Al cifrar datos, si los resultados del cifrado son los mismos, no piense que los dos algoritmos son intercambiables;
Porque el modo ECB es de hecho el mismo que el modo CBC , que utiliza un vector cero para obtener los primeros 8 bytes de texto cifrado. Solo el texto cifrado posterior es diferente;
Antes de usar el cifrado, podemos usar la clave cifrada para obtener el texto sin formato de la clave;
Cuando utilice CryptExportKey, seleccione el modo PLAINTEXTKEYBLOB para exportar la clave.
p>
Antes de utilizar el cifrado, asegúrese de comprenderlo;
Usar el modo de cifrado en programas de Internet:
ECB no es un método recomendado. Al mismo tiempo, el mismo texto sin formato genera el mismo texto sin formato en diferentes momentos, lo que es fácil de ser atacado por un diccionario.
Debido a la adición de parámetros vectoriales, CBC puede resistir el ataque de las herramientas de diccionario hasta cierto punto; , pero la desventaja es que una vez que alguien en el medio es incorrecto o se pierde, los siguientes datos se verán afectados;
CFB es similar a CBC. La ventaja es que el texto sin formato y el texto cifrado lo hacen. No es necesario que sea un múltiplo entero de 8 bits, y si uno de los datos del medio es incorrecto, solo los siguientes bloques se verán afectados.
OFB es mejor que CFB. se produce un error, no afectará los datos posteriores, pero la seguridad es deficiente.
Por lo tanto, se recomienda utilizar CFB, pero cada paquete de datos está cifrado por separado; de lo contrario, se perderá un paquete de datos y se producirán muchos datos. se requerirá procesamiento de tolerancia a fallas;
Por supuesto, los problemas específicos deben analizarse en detalle. Para aquellos que solo requieren "seguridad específica" ①, no es necesario exceder el software de "seguridad computacional". Se recomienda utilizar OFB. El modo ECB también se puede utilizar para software que requiere sólo "seguridad específica"① y no más que "seguridad computacional"②.