Método de cifrado que encripta datos alfanuméricos a datos alfanuméricos [cerrado]

-1

Necesito una forma eficiente (posiblemente tan fuerte como AES o AES en sí) para encriptar (solo) datos aplhanuméricos y obtener solo datos alfanuméricos, usando alguna biblioteca conocida (no quiero ni pretendo implementar AES por mi cuenta).

    
pregunta offlinehacker 05.07.2013 - 22:11
fuente

1 respuesta

3

Codifique la entrada como algunos bytes, cifre eso y codifique la salida de cifrado en hexadecimal , que es, por definición alfanumérico Esto es lo suficientemente simple como para implementarlo e incluirá una implementación existente de AES o cualquier sistema de encriptación que prevea.

Ahora esto implicará un crecimiento en tamaño, porque:

  • El cifrado necesitará algo de IV (las características dependen de modo de operación con el que usas AES) y esa IV debe formar parte de la salida (la que conviertes en hexadecimal) porque será necesaria para el descifrado.
  • Dependiendo del modo de operación, es posible que deba aplicarse algún relleno , de modo que la longitud de los datos de entrada sea un múltiplo de algún valor.
  • El cifrado simétrico adecuado también incluye algún tipo de MAC , porque la mayoría de las situaciones donde se justifica el cifrado también son necesarias, en la práctica, algo de protección contra atacantes activos ; y que MAC volverá a aumentar la longitud.
  • Con hexadecimal, cada byte se convierte en dos caracteres.

Algunos de estos elementos de crecimiento pueden ser mitigados. Por ejemplo, si el modo de cifrado que utiliza es GCM o EAX , entonces no habrá necesidad de rellenar, el tamaño adicional para la parte MAC estará limitado (16 bytes) (y una propiedad muy agradable de GCM y EAX es que cuide el MAC de forma criptográfica y correcta, al contrario de la mayoría de las construcciones hechas en casa) y el IV solo necesita ser único, no aleatorio, y por lo tanto puede ser un simple contador (que podría codificarse en más de cuatro bytes, dependiendo del contexto) ). Además, puede reemplazar el hexadecimal con Base64 , lo que implica un menor crecimiento (tenga en cuenta que Base64 en bruto usa mayúsculas y minúsculas con distintas letras significados; además, usa dos caracteres extra no alfanuméricos '+' y '/', pero una codificación Base62 que usa solo dígitos y letras no sería difícil de diseñar e implementar).

Si la salida debe tener el mismo tamaño que la entrada, entonces las cosas se vuelven mucho más difíciles. No podrá reutilizar una biblioteca existente, o incluso AES en absoluto. Este es el ámbito del Formato de preservación del cifrado , que es más un área de investigación que una herramienta lista para la producción, a menos que eres un criptógrafo capacitado y sabes lo que estás haciendo, en cuyo caso todo lo que escribí anteriormente fue trivial (para ti) y no necesitas leerlo.

    
respondido por el Thomas Pornin 05.07.2013 - 22:35
fuente

Lea otras preguntas en las etiquetas