Cifrado y descifrado en el terminal móvil

Tabla de contenido

introducción

Clasificación de algoritmos

introducción clave

Introducción al modo

Introducción al algoritmo

resumen

escribe al final


introducción

Hoy compartiré con ustedes un artículo sobre cifrado y descifrado móvil. Con la popularidad de los dispositivos móviles, la tecnología de cifrado se ha vuelto cada vez más importante para proteger los datos de los usuarios.

Este artículo le presentará la clasificación, las ventajas y desventajas de los algoritmos de cifrado y descifrado de Android, así como sus aplicaciones, y le ayudará a comprender y elegir el algoritmo de cifrado y descifrado que más le convenga. También le proporcionaremos el código clave del algoritmo para que lo comprenda y lo utilice mejor. Ven y aprende conmigo.

 Clasificación de algoritmos

       Según si el resultado del cifrado se puede descifrar, el algoritmo se puede dividir en cifrado reversible y cifrado irreversible (cifrado unidireccional), en este sentido, el cifrado unidireccional solo puede denominarse algoritmo de cifrado en lugar de algoritmo de cifrado y descifrado. . Para el cifrado reversible, se puede dividir en cifrado simétrico y cifrado asimétrico según la simetría de la clave. La estructura de clasificación específica es la siguiente:

  • cifrado reversible
  • Cifrado simétrico: DES, 3DES, AES, PBE
  • Cifrado asimétrico: RSA, DSA, ECC
  • Cifrado irreversible (cifrado unidireccional): MD5, SHA, HMAC

introducción clave

       Antes de presentar en detalle varios algoritmos de cifrado y descifrado, debemos dar una breve introducción al concepto de "clave" para facilitar la expansión del siguiente contenido.

       La clave es un parámetro en el algoritmo de cifrado y descifrado, y su longitud varía según los diferentes algoritmos, y la longitud de la clave del mismo algoritmo también puede tener diferentes requisitos. En general, la longitud de la clave es directamente proporcional a la seguridad. Cuando esté en uso, coloque el texto sin formato (o texto cifrado) junto con la clave en el contenedor de cifrado (o descifrado) correspondiente para obtener el texto cifrado (o texto sin formato) para realizar el cifrado y descifrado.

       Al comienzo del algoritmo de cifrado, la forma de la clave es simétrica, lo que significa que la clave para cifrar y descifrar es la misma. Esto está en consonancia con nuestros hábitos de pensamiento. Sin embargo, aquí hay un problema: si la clave es robada durante la transmisión o el almacenamiento, es fácil para los piratas informáticos descifrar el texto cifrado para obtener el texto sin formato correcto. Aunque la clave en forma simétrica es simple y eficiente, no es muy segura.

       En vista de los defectos de la clave simétrica, se propone una nueva forma de clave, la clave asimétrica. Las claves de cifrado y descifrado de la clave asimétrica ya no son las mismas, sino que se dividen en clave pública y clave privada: la clave pública se utiliza para el cifrado y la clave privada para el descifrado. La clave privada no se divulga ni se transmite, y solo la mantienen y retienen las dos partes de la comunicación; la clave pública se puede transmitir públicamente y no hay necesidad de preocuparse por perderla, porque incluso si la clave pública es robado, los piratas informáticos aún no pueden descifrar el texto cifrado en texto plano (esta funcionalidad la proporciona la clave privada). Se puede ver que la seguridad de las claves asimétricas es mejor que la de las claves simétricas.

       Las claves asimétricas también proporcionan una función, las firmas digitales. La clave privada se utiliza para la firma y la clave pública para la autenticación para lograr el propósito de autenticación de identidad.

       Cabe señalar que la introducción anterior a las claves se basa en el cifrado reversible y no existe un concepto de clave para el cifrado irreversible.

Introducción al modo

       Antes de presentar en detalle varios algoritmos de cifrado y descifrado, debemos dar una breve introducción al concepto de "modo" para facilitar nuestra expansión del siguiente contenido.

       Para el cifrado reversible, el modo de cifrado se puede seleccionar durante el cifrado. Se puede entender que el algoritmo de cifrado puede tener diferentes métodos de trabajo y existen diferencias en eficiencia y métodos entre los diferentes métodos de trabajo. Cabe señalar que para los mismos datos, el modo seleccionado para el cifrado debe ser el mismo que el modo seleccionado para el descifrado; de lo contrario, el descifrado no obtendrá el resultado correcto.

       Hay cuatro modos principales de cifrado reversible de Android: ECB (modo de libro de códigos electrónico), CBC (modo de conexión de grupo), CFB (modo de retroalimentación de cifrado), OFB (modo de retroalimentación de salida).

       BCE (modo de libro de códigos electrónico):

       Su uso es que un bloque de texto sin formato se cifra en un bloque de texto cifrado, y el mismo bloque de texto sin formato siempre se cifra en el mismo bloque de texto cifrado. Utilice directamente el algoritmo de cifrado para cifrar cada grupo de texto sin formato de 64 bits con la misma clave de 64 bits. Cada paquete de texto sin formato se procesa de forma independiente el uno del otro.

       Desventaja: bajo una clave k determinada, el mismo grupo de texto sin formato siempre produce el mismo grupo de texto cifrado, lo que expondrá el formato de datos del grupo de texto sin formato. Ciertos formatos de datos de texto sin formato provocarán una gran cantidad de repeticiones o largas cadenas de ceros en el grupo de texto sin formato, y algunos datos importantes a menudo aparecerán en la misma posición, especialmente el encabezado formateado, el número de trabajo, la hora de envío, la ubicación y otras características. se filtró en el texto cifrado, lo que permitió a los atacantes explotar estas características.

       Ventajas: mensajes individuales cifrados con la misma clave, lo que no genera propagación de errores. De hecho, cada paquete puede verse como un mensaje independiente cifrado con la misma clave. Si hay un error en los datos del texto cifrado, al descifrar, el bloque de texto sin formato completo correspondiente se descifrará incorrectamente, pero no afectará el resto del texto sin formato. Sin embargo, si ocasionalmente se pierden o agregan bits de datos al texto cifrado, toda la secuencia del texto cifrado no se descifrará correctamente. A menos que exista una determinada estructura marco que pueda reorganizar los límites del grupo.

       CBC (modo de conexión de paquetes):

       Para el mismo texto sin formato, los resultados del cifrado son diferentes. Esto aumenta la dificultad de descifrar los códigos para los descifradores. Cuando se fija la clave, se cambia la técnica de vinculación de cada entrada de grupo de texto sin formato, de modo que el grupo de texto cifrado no solo esté relacionado con el grupo de texto sin formato actual, sino también con el grupo de texto sin formato anterior a través del efecto de retroalimentación. Se trata de una especie de operación de ofuscación procedente de la esencia de la criptografía.

       Ventajas: puede ocultar el patrón de datos del texto sin formato; hasta cierto punto, puede evitar la manipulación de datos, como la reproducción, incrustación y eliminación de grupos de texto sin formato.

       Desventajas: Se producirá propagación de errores. Cualquier cambio en el texto cifrado implicará algunos grupos de texto cifrado posteriores. Sin embargo, la propagación de errores en el modo CBC no es grande. Un error de transmisión afecta como máximo los resultados de recepción de dos grupos de mensajes, y la propagación de errores es el mas dura 2 grupos

       CFB (modo de retroalimentación de cifrado): el modo de retroalimentación de texto cifrado se utiliza para mejorar la correlación entre textos cifrados. Si el mensaje a cifrar debe procesarse mediante bits de caracteres, se puede utilizar CFB. Cifre fragmentos de texto sin formato cada vez. (1<= s<=" longitud intrínseca original)

       Ventajas: Además de las ventajas del modo CBC, el modo CFB tiene la ventaja única de que es especialmente adecuado para las necesidades de los formatos de datos del usuario.

       Desventajas: primero, es sensible a los errores del canal y provocará la propagación de errores. Dado que CFB utiliza retroalimentación de texto cifrado, si un paquete de texto cifrado tiene uno o más errores durante la transmisión, provocará errores de descifrado en el paquete actual y en los paquetes parciales posteriores. En segundo lugar, se reduce la tasa de cifrado de datos. Pero este modo se utiliza principalmente en las capas inferiores de la red de datos y su velocidad de datos no es demasiado alta.

       OFB (Modo de retroalimentación de salida): supera el problema de propagación de errores causado por los modos CBC y CFB, pero es difícil detectar la manipulación del texto cifrado.

Introducción al algoritmo

cifrado unidireccional

       Como se mencionó anteriormente, el resultado del cifrado unidireccional no se puede descifrar, por lo que el objetivo principal del cifrado unidireccional no es el cifrado y descifrado en el sentido tradicional, sino la confidencialidad y la extracción abstracta de datos de texto sin formato. El cifrado unidireccional incluye principalmente algoritmos como MD5, SHA y HMAC.

  • Características :

    1. Compresibilidad: para datos de cualquier longitud, la longitud se fija después del cifrado unidireccional.
    2. Resistente a la modificación: Cualquier modificación de los datos originales, aunque solo se modifique un byte, dará como resultado un resultado muy diferente.
    3. Resistencia a colisiones débil: conociendo los datos originales y su resultado de cifrado unidireccional, es muy difícil encontrar datos con el mismo resultado (es decir, datos falsificados).
    4. Fuerte resistencia a las colisiones: es muy difícil encontrar dos datos diferentes que tengan el mismo resultado de cifrado unidireccional.
    5. Simple y eficiente: el cifrado de datos unidireccional es muy rápido.

    Nota: Las características anteriores se basan en un algoritmo de cifrado unidireccional específico y existen diferencias entre los diferentes algoritmos de cifrado unidireccional.

       Podemos ver que el cifrado unidireccional tiene una alta garantía para la coherencia de los resultados del cifrado de datos, es decir, es casi imposible falsificar un dato para obtener el mismo resultado después de cifrar un dato. Al mismo tiempo, debido a que el cifrado unidireccional es más rápido y la longitud del resultado del cifrado es fija, el resultado del cifrado unidireccional a menudo se utiliza como el primer paso para generar la clave en el cifrado reversible, del que hablaremos más adelante. .

  • solicitud:

    1. Cifrado de datos, autenticación de acceso seguro

             Este es el uso más extendido del cifrado unidireccional. En concreto, se trata de la protección de las contraseñas de los usuarios. Cuando iniciamos sesión en un sitio web o aplicación, a menudo necesitamos ingresar nuestra propia contraseña o pedirle al cliente o al navegador que nos ayude a guardar la contraseña. Sin embargo, las contraseñas no se pueden autenticar ni almacenar en texto claro. Esto se debe a que los usuarios suelen utilizar una contraseña para varios sitios web o incluso para bancos. Una vez que uno de los sitios web filtra la contraseña del usuario, la información del otro sitio web del usuario también puede ser robada. Por lo tanto, la práctica general es realizar primero el cifrado de un solo elemento en el texto sin formato de la contraseña cuando el usuario inicia sesión para verificar o guardar la contraseña, y luego comparar el resultado con el resultado del cifrado unidireccional de la contraseña del usuario en el lado del servidor. Si son consistentes se permite el acceso, en caso contrario se rechaza. Por ejemplo, en 2012, la función de recordar contraseñas de QQ es cifrar la contraseña del usuario con MD5 una vez y luego almacenarla en la base de datos local.

             Algunos lectores pueden darse cuenta de que, dado que el resultado del cifrado unidireccional para el mismo texto sin formato nunca cambiará, si la contraseña del usuario permanece sin cambios, los piratas informáticos pueden iniciar sesión en el sitio web correspondiente a voluntad siempre que obtengan el resultado cifrado. ¿Se garantizará la seguridad?¿Paño de lana? De hecho, es así. Esto requiere que los ingenieros intenten no revelar la elección del algoritmo de cifrado al diseñar estrategias de almacenamiento de contraseñas o inicios de sesión; por otro lado, también se pueden utilizar algunos medios especiales para procesar objetos cifrados, como agregar "sal" a las contraseñas. La idea de agregar sal se reflejará en la introducción a HMAC más adelante.

    2. Verificación de integridad de archivos, firma digital

             A veces, necesitamos confirmar si un archivo o datos han sido manipulados. Utilizamos tecnología de cifrado unidireccional, que se basa principalmente en la compresión, la antimodificación y la simplicidad y eficiencia del cifrado unidireccional. Aquí hay un ejemplo para que los lectores lo comprendan. Después de descargar una imagen reflejada, encontraremos que la página de descarga también proporciona un conjunto de valores MD5. Este conjunto de valores MD5 se utiliza para verificar la coherencia del archivo. Después de descargar la imagen reflejada, debemos hacer una calibración MD5 en el espejo El valor MD5 obtenido se compara con el valor MD5 proporcionado en la página de descarga para verificar si la imagen ha sido manipulada.

  • seguridad:

           La seguridad del cifrado unidireccional depende principalmente de la longitud del resultado del cifrado. Para el mismo algoritmo de cifrado, la seguridad es proporcional a la longitud del resultado del cifrado. Es posible descifrar el cifrado unidireccional, que incluye principalmente el descifrado por fuerza bruta, el descifrado de diccionarios y el descifrado de ingeniería social. Sin embargo, el costo del descifrado es muy alto y lleva mucho tiempo. Si no se trata de datos extremadamente importantes, casi no hay necesidad de descifrarlos.

  • Clasificación de algoritmos:

    1. MD5: MD5 es el algoritmo de cifrado unidireccional más utilizado, que tiene aplicaciones en cifrado de datos, autenticación de acceso de seguridad y verificación de integridad de archivos. La salida del cifrado MD5 es una cadena numérica hexadecimal de 128 bits. El SDK de Android proporciona una interfaz para usar MD5, a la que se puede llamar directamente cuando se usa. Los ejemplos son los siguientes:

       MessageDigest md5 = MessageDigest.getInstance("MD5"); //获得MD5加密实例 
       md5.update(stringToEncrypt.getBytes());  
       byte[] encrypted = md5.digest();//加密返回值为byte[]数组 
    2. SHA: SHA es en realidad un nombre colectivo para un grupo de algoritmos de cifrado, incluidos SHA-1, SHA-256, SHA-384 y SHA-512. Entre ellos, SHA-1 es el más utilizado, y la función hash HASH utilizada en HTTPS utiliza principalmente SHA-1. En comparación con MD5, la familia SHA tiene mayor seguridad. Hasta ahora, nadie ha podido descifrar sus resultados de cifrado, pero su velocidad de cifrado es más lenta que MD5 y la seguridad se intercambia por velocidad. Por otro lado, SHA tiene un cierto límite de longitud para los datos cifrados. La comparación específica de cada algoritmo SHA es la siguiente:

      Para el algoritmo SHA, el SDK de Android también proporciona una interfaz correspondiente, que es conveniente para los desarrolladores. Similar a MD5, tomando SHA-1 como ejemplo:

       MessageDigest sha = MessageDigest.getInstance("SHA-1"); //获得SHA-1加密实例 
       sha.update(stringToEncrypt.getBytes());  
       byte[] encrypted = sha.digest();//加密返回值为byte[]数组
    3. HMAC: HMAC es diferente del algoritmo de cifrado unidireccional tradicional anterior. Su forma de cifrado es la misma que el cifrado reversible. El proceso de cifrado requiere una clave y un mensaje como entrada, y genera un resumen del mensaje como salida. La definición de HMAC requiere una función hash de cifrado (indicada como H, que puede ser MD5 o SHA-1) y una clave K. Usamos B para indicar el número de bytes en el bloque de datos. (La longitud de palabra del bloque de datos dividido de la función hash mencionada anteriormente es B = 64), y L se usa para representar los bytes de datos de salida de la función hash (L = 16 en MD5, L = 20 en SHA-1) . La longitud de la clave de autenticación puede ser cualquier valor entero positivo menor o igual a la longitud de la palabra del bloque de datos. Si la longitud de la clave utilizada en la aplicación es mayor que B, primero use la función hash H para actuar sobre ella y luego use la cadena de longitud L generada por H como la clave realmente utilizada en HMAC. En general, la longitud mínima K de clave recomendada es L bytes.

      El código HMAC combinado con SHA-1 se implementa de la siguiente manera:

       SecretKeySpec secret = new SecretKeySpec(key.getBytes(), type);//key为开发者自己设定的密钥字符串
       Mac mac = Mac.getInstance("HmacSHA1");//SHA-1的HMAC
       mac.init(secret);
       byte[] digest = mac.doFinal(stringToEncrypt.getBytes());//加密返回值为byte[]数组

Cifrado simétrico

       El algoritmo de cifrado simétrico se aplicó anteriormente y la tecnología es relativamente madura. En el algoritmo de cifrado simétrico, el remitente de datos procesa el texto sin formato (datos originales) y la clave de cifrado junto con un algoritmo de cifrado especial para hacerlo complejo. El texto cifrado se envía afuera. Una vez que el destinatario recibe el texto cifrado, si desea interpretar el texto original, debe utilizar la clave cifrada y el algoritmo inverso del mismo algoritmo para descifrar el texto cifrado y restaurarlo a texto sin formato legible. En el algoritmo de cifrado simétrico, solo se utiliza una clave, y tanto el remitente como el receptor utilizan esta clave para cifrar y descifrar los datos, lo que requiere que la parte de descifrado conozca la clave de cifrado de antemano. Las características del algoritmo de cifrado simétrico son que el algoritmo es abierto y la cantidad de cálculo es pequeña. La desventaja es que ambas partes de la transacción utilizan la misma clave, por lo que no se puede garantizar la seguridad.

  • Características :

    1. La clave es pequeña (generalmente menos de 256 bits). Cuanto más grande sea la clave, más fuerte será el cifrado, pero más lento será el cifrado y descifrado.
    2. Ventajas: algoritmo abierto, pequeña cantidad de cálculo, velocidad de cifrado rápida, alta eficiencia de cifrado, adecuado para el cifrado de grandes cantidades de datos
    3. Desventajas: distribución y gestión de claves, baja seguridad.
    4. Cuatro algoritmos DES, 3DES, AES, PBE
  • Algoritmo :

    1. DES: el algoritmo DES es un mecanismo de cifrado de bloques que divide el texto sin formato en N grupos, luego cifra cada grupo para formar su propio texto cifrado y finalmente combina todos los textos cifrados del grupo para formar el texto cifrado final. Para cambiar un bloque de entrada de texto sin formato de 64 bits en un bloque de salida de texto cifrado de 64 bits, la clave que utiliza también es de 64 bits.

    • Introducción:

      El algoritmo DES funciona así:  

      Si el modo es cifrado, use la clave para cifrar los datos y genere la forma de contraseña de datos (64 bits) como resultado de salida de DES; si el modo es descifrado, use la clave para descifrar los datos en la contraseña forméelo y restáurelo en Datos. El texto sin formato (64 bits) de es la salida de DES.

             En ambos extremos de la red de comunicación, las dos partes acuerdan una clave consistente y usan la clave para cifrar los datos centrales con DES en el origen de la comunicación, y luego los transmiten al final de la red de comunicación en forma de una contraseña en la red de comunicación pública (como la red telefónica) y los datos llegan después del destino, los datos cifrados se descifran con la misma clave y los datos centrales se reproducen de forma clara. De esta forma, se garantiza la seguridad y confiabilidad de los datos centrales (como PIN, MAC, etc.) transmitidos en la red de comunicación pública.

    • Modos admitidos: BCE, CBC, CFB, OFB

    • Ventajas y desventajas:

      (1) La velocidad de cifrado y descifrado del algoritmo DES es relativamente rápida, la clave es relativamente corta y la eficiencia del cifrado es alta. Sin embargo, ambas partes en la comunicación deben mantener el secreto de la clave y la clave DES debe ser reemplazado con frecuencia por seguridad.

      (2) Es sencillo generar una clave, pero la seguridad depende completamente de la clave y la clave debe ser altamente confidencial, por lo que es difícil lograr un cifrado de una sola vez.

    • Aplicación: El algoritmo DES se utiliza ampliamente en puntos de venta, cajeros automáticos, tarjetas magnéticas y tarjetas inteligentes (tarjetas IC), gasolineras, estaciones de peaje de autopistas y otros campos, para garantizar la confidencialidad de los datos clave, como la transmisión cifrada de los datos del titular de la tarjeta de crédito. PIN, la autenticación bidireccional entre la tarjeta IC y POS, la verificación MAC de paquetes de datos de transacciones financieras, etc., utilizan el algoritmo DES.

    • Implementación del algoritmo: el SDK de Android proporciona una interfaz DES, podemos llamar directamente a la implementación. Hay tres parámetros de entrada del algoritmo DES: clave, datos y modo. Entre ellos, la clave tiene 8 bytes y 64 bits en total, que es la clave de trabajo del algoritmo DES; los datos también tienen 8 bytes y 64 bits, que son los datos que se cifrarán o descifrarán; el modo es el modo de trabajo de DES, y hay dos tipos: Cifrar o descifrar.

        加密:
        DESKeySpec dks = new DESKeySpec(key);//创建DESKeySpec对象,其中key为64位的密钥  
        		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");//DES密钥工厂实例	
        		SecretKey securekey = keyFactory.generateSecret(dks);
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//密钥容器的实例。传入的参数依次为加密算法,加密模式,填充模式(可选NOPadding,PKCS5Padding,PKCS7Padding)
        cipher.init(Cipher.ENCRYPT_MODE, securekey);//初始化密钥容器。加密时第一个参数必须是Cipher.ENCRYPT_MODE
        byte[] encryptResult=cipher.doFinal(stringToEncrypt.getBytes());
      
        解密:
        DESKeySpec dks = new DESKeySpec(key);//key必须与加密时保持一致  
        		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        		SecretKey securekey = keyFactory.generateSecret(dks);
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//传入的参数必须与加密时保持一致
        cipher.init(Cipher.DECRYPT_MODE, securekey);//解密时第一个参数必须是Cipher.DECRYPT_MODE
        byte[] decryptResult=cipher.doFinal(encryptResult.getBytes());

    2. 3DES: el algoritmo 3DES se desarrolla sobre la base de DES. En algunos escenarios con altos requisitos de seguridad, la seguridad de la clave de 64 bits de DES no puede cumplir con los requisitos, por lo que las personas adoptan un método de "violencia simple": cifrado de datos triple para cifrar los datos, de modo que la probabilidad de descifrado es mucho menor. La longitud de la clave de 3DES es de 168 bits. Dado que el uso de 3DES es muy similar al de DES, excepto que la longitud de la clave ha cambiado, no lo introduciremos aquí. Los lectores interesados ​​pueden intentar utilizar la interfaz correspondiente.

    3. AES:

    • Introducción: como estándar de cifrado de datos de nueva generación, el algoritmo de cifrado AES reúne las ventajas de seguridad sólida, alto rendimiento, alta eficiencia, facilidad de uso y flexibilidad. AES está diseñado con tres longitudes de clave: 128, 192 y 256 bits. Es el algoritmo de cifrado más seguro disponible actualmente.

    • Modo de soporte: CFB/OFB/ECB/CBC

    • Ventajas y desventajas: AES es superior a otros algoritmos de cifrado simétrico en todos los aspectos, y la desventaja es solo la limitación del cifrado simétrico.

    • Aplicación: AES se usa ampliamente y DES es el algoritmo principal utilizado en el cifrado simétrico, y existe una tendencia a reemplazar gradualmente a DES.

    • Código:

       加密:
        SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();//获得密钥实例
        cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//密钥容器的实例。传入的参数依次为加密算法,加密模式,填充模式(可选NOPadding,PKCS5Padding,PKCS7Padding)
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);//使用加密模式初始化 密钥容器
        byte[] encryptResult = cipher.doFinal(stringToEncrypt.getBytes());
      
        解密:
        SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();//密钥必须与加密时保持一致
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//传入的参数必须与加密时保持一致
       			cipher.init(Cipher.DECRYPT_MODE, secretKey);//解密时必须是Cipher.DECRYPT_MODE
        byte[] decryptResult=cipher.doFinal(encryptResult.getBytes());

    4. PBE: El algoritmo PBE no se utiliza en muchos escenarios y no tenemos que ceñirnos a su uso e implementación, pero proporciona una idea de cifrado que vale la pena aprender y agregar como referencia "sal" para interrumpir.

    • Introducción "Agregue sal": Como dijimos anteriormente, una falla de seguridad importante del cifrado simétrico es que se usa la misma clave para el cifrado y descifrado. La invariancia de esta clave ha causado grandes problemas para la transmisión y el almacenamiento seguros de la clave. Entonces, ¿hay alguna forma de solucionar este problema? Una forma de hacerlo es "salar" la llave. La "sal" aquí puede ser un número aleatorio, ID de usuario, información geográfica de ubicación, etc. La función más importante de la "sal" es perturbar la clave, lo que hace imposible que los piratas informáticos determinen la clave real. Siempre que las partes en la comunicación acuerden la forma de la "sal" y no la revelen, la seguridad del cifrado puede estar garantizado. Entendemos la idea de agregar "sal" a través de la forma de agregar sal al PBE:

      El cifrado PBE primero reemplaza el concepto de clave con una contraseña. Al cifrar, PBE no usa la contraseña para cifrar directamente, sino que usa la función KDF en el algoritmo para codificar la contraseña a través de la "sal" para generar una cuasi clave, y luego usa una función hash para iterar varias veces para generar la clave final Una vez generada la clave, PBE utiliza un algoritmo de cifrado simétrico para cifrar los datos.

      La implementación específica puede ser así:

    1. Las dos partes en la transferencia del mensaje acuerdan una contraseña. Aquí, la Parte A construye la contraseña. 2. Después de que la Parte A construye la contraseña, se la anuncia a la Parte B. 3. El constructor de contraseñas (Parte A) construye el salt utilizado para la transmisión de este mensaje, de hecho, ambas partes pueden acordar un dato, como el número de disco duro, la fecha de hoy, etc. No es necesario escribir un algoritmo de seguridad para calcularlo, siempre que las dos partes estén de acuerdo. 4. La parte A usa contraseñas y salts para cifrar datos 5. La parte A envía salt y datos cifrados a los receptores de mensajes (Parte B) 6. La parte B descifra los datos con la contraseña recibida y salt (pueden ser los datos acordados)
     
      我们可以看到,对密钥加“盐”实际上是一种混淆扰乱的手段。但我们还可以从PBE的加盐思想中抽取出一种更简单的理解,“盐”就是密钥的一部分,只不过这一部分密钥是通信双方在通信之前就协商好的不被外界所知道的,通信过程中,双方只需传输另一部分非盐密钥即可,即使非盐密钥被截获,黑客也无法拿到整个密钥破解密文。

cifrado asimétrico

        El algoritmo de cifrado asimétrico requiere dos claves para el cifrado y descifrado, que son la clave pública y la clave privada. Cabe señalar que la clave pública y la clave privada deben ser un par. Si la clave pública se utiliza para cifrar datos, entonces El descifrado sólo es posible con la clave privada correspondiente y viceversa. La aparición del algoritmo de cifrado asimétrico tiene como objetivo resolver el cifrado y descifrado con una sola clave. Mientras esta clave se pierda o se haga pública, los datos cifrados son fáciles de atacar. Al mismo tiempo, es precisamente debido a la aparición de algoritmos de cifrado asimétrico que existen firmas digitales, certificados digitales, etc.

  • Características : La fuerza del algoritmo es compleja y la seguridad depende del algoritmo y la clave, pero debido a la complejidad del algoritmo, la velocidad de cifrado y descifrado no es tan rápida como la del cifrado y descifrado simétrico.

  • Uso : Hay dos usos principales del cifrado asimétrico: cifrado y descifrado y verificación de firma digital.

    Cifrado de clave pública, descifrado de clave privada; firma de clave privada, verificación de clave pública

    Habla principalmente de firmas digitales:

    Las firmas digitales se implementan mediante algoritmos de clave pública. Las firmas digitales son diferentes de los algoritmos de cifrado de datos comunes y sus procesos de implementación son diferentes de las claves utilizadas. La firma digital utiliza el par de claves del remitente, el remitente utiliza su propia clave privada para cifrar y el receptor utiliza la clave pública del remitente para descifrar. Las firmas digitales se utilizan para verificar que un usuario realmente envió un mensaje, independientemente de si alguien en la red ve el mensaje. El cifrado de datos utiliza el par de claves del receptor, el remitente utiliza la clave pública del receptor para cifrar y el receptor utiliza su propia clave privada para descifrar. El cifrado es una relación de muchos a uno: cualquiera que conozca la clave pública del receptor puede enviar información cifrada al receptor, y sólo alguien con la clave privada del receptor puede descifrar el mensaje. Un usuario suele tener dos pares de claves, uno se utiliza para cifrar y descifrar la firma digital y el otro se utiliza para cifrar y descifrar la clave privada.

  • Algoritmo :

    1. RSA: RSA es un estándar de aplicación de nivel empresarial y muchos software de cifrado de terceros utilizan cifrado RSA de 2048 bits.

    • Ventajas: asignación de contraseña sencilla, alta seguridad

    • defecto:

      1. Velocidad lenta, el RSA más rápido es varias veces más lento que DES y la velocidad de RSA es aproximadamente 1000 veces más lenta que el algoritmo de cifrado simétrico correspondiente al mismo nivel de seguridad.

      2. En términos generales, solo se utiliza para una pequeña cantidad de cifrado de datos.

      3. Es muy problemático generar una clave, que está limitada por la tecnología de generación de números primos, por lo que es difícil lograr un teclado de un solo uso.

      De hecho, estas deficiencias son limitaciones del propio cifrado asimétrico.

    • Implementación del algoritmo:

        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");//产生RSA密钥对产生器
        kpg.initialize(2048);//密钥对产生器初始化,参数为密钥长度,可选长度 512 1024 2048
        KeyPair kp = kpg.genKeyPair();//得到密钥对
        PublicKey publicKey = kp.getPublic();//公钥
        PrivateKey privateKey = kp.getPrivate();//私钥
      		
        加密:
        BigInteger e = publicKey.getPublicExponent();//获取参数
        	BigInteger n = publicKey.getModulus();//获取参数
        BigInteger m = new BigInteger(stringToEncrypt.getBytes());
        BigInteger c = m.modPow(e, n);//计算密文C
      
        解密:
        BigInteger c = new BigInteger(stringToDecrypt);
        BigInteger d = privateKey.getPrivateExponent();//获取参数
        BigInteger n = privateKey.getModulus();//获取参数
        BigInteger m = c.modPow(d, n);//计算解密结果m

    2. DSA: generalmente se usa para firma y autenticación digitales. En la firma y autenticación digital DSA, el remitente usa su propia clave privada para firmar un archivo o mensaje, y el destinatario usa la clave pública del remitente para verificar la firma después de recibir el mensaje autenticidad. DSA es solo un algoritmo. La diferencia con RSA es que no se puede usar para cifrar y descifrar, ni para el intercambio de claves. Solo se usa para firmar. Es mucho más rápido que RSA.

    • Ventajas: la seguridad es similar a RSA y la velocidad de generación de claves es mucho más rápida que RSA

    • Desventaja: si se utiliza DSA como algoritmo de cifrado para firmas digitales, solo se puede utilizar SHA1 como algoritmo hash de mensajes (es decir, resumen de mensajes). Y si se utiliza RSA como algoritmo de cifrado de firma digital, hay muchas opciones para el algoritmo de resumen de mensajes.

    • Implementación del algoritmo: dado que DSA se utiliza principalmente para la autenticación de firmas digitales y no para trabajos de cifrado y descifrado, la implementación específica de los códigos de cifrado y descifrado no se escribirá aquí.

    3. ECC: ECC es un algoritmo de cifrado asimétrico eficiente que se utiliza a menudo en dispositivos móviles.

    • Ventajas: en comparación con RSA, ECC tiene las siguientes ventajas:

      (1) Con la misma longitud de clave, el rendimiento de seguridad es mayor. Por ejemplo, ECC de 160 bits tiene la misma seguridad que RSA y DSA de 1024 bits.

      (2) La cantidad de cálculo es pequeña y la velocidad de procesamiento es rápida. En términos de la velocidad de procesamiento de la clave privada (descifrado y firma), ECC es mucho más rápido que RSA y DSA.

      (3) Pequeño espacio de almacenamiento El tamaño de la clave y los parámetros del sistema de ECC son mucho más pequeños que los de RSA y DSA, por lo que el espacio de almacenamiento ocupado es mucho menor.

      (4) Los bajos requisitos de ancho de banda hacen que ECC tenga una amplia gama de perspectivas de aplicación.

    • Implementación del algoritmo: ECC y RSA tienen características similares y sus implementaciones de código también son muy similares, excepto que hay una diferencia al generar el generador de pares de claves y no hay diferencia en otros lugares, por lo que no se escribe ninguna implementación de código aquí. Los lectores que lo necesiten pueden consultar la implementación de RSA anterior.

resumen

       En este punto, nuestra introducción a los tres tipos de algoritmos ha terminado. Se puede ver que diferentes algoritmos tienen diferentes características y los desarrolladores deben considerar varios factores, como escenarios de uso, requisitos y costos, al elegir usarlos. Para el cifrado unidireccional y el cifrado reversible, es fácil para los desarrolladores distinguir y elegir, pero para el cifrado simétrico y el cifrado asimétrico, la elección puede no ser muy fácil de decidir. Aquí proporcionamos una idea, que también es ampliamente aceptada y Se utiliza, porque el cifrado simétrico es rápido pero relativamente bajo en seguridad, y el cifrado asimétrico es alto en seguridad pero relativamente lento en velocidad. Usamos cifrado simétrico para cifrar una gran cantidad de datos en texto plano y luego usamos cifrado asimétrico para cifrar la clave de cifrado simétrico. , por lo que tanto cuestiones de velocidad como de seguridad.


Gracias por leer, si hay alguna deficiencia, por favor avise, aprenda y avance juntos. Si te gusta, recomiéndalo; si tienes nuevas ideas, bienvenido a presentarlas.

escribe al final

Esta publicación termina aquí y, finalmente, espero que los amigos que lean esta publicación puedan ganar algo.

Está todo aquí, recuerda apoyar a Sanlian.


 Cómo descargar la versión completa del documento:

Estos materiales deberían ser el almacén de preparación más completo y completo para los amigos que se dedican a [las pruebas de software]. ¡Este almacén también me ha acompañado en el viaje más difícil y espero que pueda ayudarlo a usted también! Todo lo anterior se puede compartir.

Interactúa conmigo en el área de comentarios o en privado ❤ conmigo [Prueba y aprendizaje de software] para obtenerlo, no gracias por quitármelo.

Supongo que te gusta

Origin blog.csdn.net/weixin_67553250/article/details/131088568
Recomendado
Clasificación