Implicaciones de seguridad del uso de la codificación Base64 con cifrado

8

¿Existen implicaciones de seguridad al convertir una clave de cifrado de matriz de bytes en una cadena Base64 antes de usarla?

Estoy creando un ayudante de cifrado genérico para un proyecto y, por motivos de coherencia y generalidad, utilizo matrices de bytes para todas las entradas y salidas (datos sin formato, clave, sal, etc.)

Sin embargo, la biblioteca de cifrado que uso internamente espera cadenas. Me preocupa que la codificación de la clave como una cadena base64 antes del uso pueda debilitar su fuerza en términos de entropía, etc.

¿Algún pensamiento? En general, ¿la codificación Base64 afecta la fuerza de encriptación de alguna manera?

    
pregunta prmph 19.10.2014 - 01:09
fuente

3 respuestas

1

No hay forma de que una biblioteca de cifrado moderna funcione con caracteres. Todos los cifrados modernos están definidos para operar en bytes (algunos están definidos para operar en bits, pero la mayoría de las bibliotecas asumirán que un byte es la unidad mínima de datos). Si su biblioteca acepta cadenas de caracteres , se convertirán a bytes dentro. Tenga en cuenta que, por ejemplo, std:string no no tiene que contener cadenas de caracteres, también puede contener cadenas de bytes (a.k.a. cadenas de octetos) también.

Por otro lado, la mayoría de las bibliotecas de encriptación utilizan el rango completo del espacio de claves. Esto significa que los bytes que forman la clave pueden tener cualquier valor. Entonces, siempre que su clave codificada en la base 64 tenga un tamaño de clave válido, puede ser aceptada. En ese caso, el único problema es que base64 contendrá 3/4 de la entropía de una clave totalmente aleatoria. Por lo tanto, si tiene una clave AES de 192 bits, se convertirá en una clave AES de 256 bits. En ese caso, no debe reclamar seguridad de 256 bits, ya que la cantidad de claves posibles en su esquema es todavía 2 ^ 192.

Si la biblioteca de encriptación en sí misma decodifica la base64, primero su clave se convierte 1: 1 a base64 y luego vuelve a la clave original. Obviamente, en tal caso, la base 64 no hace una diferencia. Es de esperar que la conversión de base64 o hexadecimals esté bien documentada para la biblioteca.

Parece que hay muy poca información disponible para Synercoding.Encryption, eso no es una buena señal.

Si la clave no es una clave, sino una contraseña ingresada en PBKDF2, solo debe proporcionarle suficiente entropía. Si se alimenta directamente a PBKDF2 o si primero se codifica como base64 no hay diferencia.

Lo suficientemente divertido para una función basada en contraseña PBKDF2 también se define para operar en bytes. Por lo tanto, la API también debe especificar la codificación de caracteres. Sin embargo, generalmente es compatible con ASCII, por lo que es probable que la base 64 funcione. Incluso se puede utilizar como algún tipo de capa de compatibilidad entre implementaciones de PBKDF2.

    
respondido por el Maarten Bodewes 19.10.2014 - 02:33
fuente
2

Mientras la clave se vuelva a convertir al formato binario antes de usarla, se deshará la dilución de bits causada por la codificación base-64.

Sin embargo, si está pasando claves alrededor de una aplicación, tenga cuidado de cómo lo hace. Limpie los buffers de texto, minimice los tránsitos entre los métodos y las aplicaciones, etc.

    
respondido por el kronenpj 19.10.2014 - 01:17
fuente
1

Dado que todos los algoritmos criptográficos decentes están definidos para operar en secuencias de bits o bytes, hay solo dos posibilidades para su "biblioteca de cifrado":

  • o bien convierte internamente cadenas de caracteres a bytes;
  • o utiliza algún algoritmo personalizado basado en caracteres.

En el primer caso, la biblioteca tiene una API descuidada; no debe limitarse artificialmente a las cadenas de caracteres. En el segundo caso, esto es peor: los algoritmos personalizados y caseros son invariablemente débiles.

En cualquier caso, lo más importante no es la biblioteca sino el algoritmo. La biblioteca es responsable de implementar el algoritmo correctamente, pero la seguridad proviene del algoritmo subyacente y de cómo se usa (el ensamblaje de algoritmos criptográficos a menudo se denomina protocolo ). Si lo que hace su biblioteca solo se conoce como "hace algún cifrado", no hay forma de dar una respuesta significativa a su pregunta. Si su biblioteca no especifica qué protocolo implementa, como un estándar bien definido y estudiado, entonces la única acción sensata que puede realizar es deshacerse de esa biblioteca y buscar uno mejor.

    
respondido por el Thomas Pornin 19.10.2014 - 05:46
fuente

Lea otras preguntas en las etiquetas