2010-11-02 13 views
14

Digamos que tengo algunos datos y una contraseña, y quiero encriptar los datos de tal forma que solo puedan recuperarse con la contraseña correcta.¿Cómo funciona la encriptación basada en contraseñas?

¿Cómo funciona esto técnicamente (es decir, cómo implementar esto)? A menudo escucho a la gente usar el cambio de bits para el cifrado, pero ¿cómo se basa eso en una contraseña? ¿Cómo funciona el cifrado basado en contraseña?

Un ejemplo es Mac OS X FileVault

Gracias.


Si das código de ejemplo, preferentemente en C, Objective-C o pseudocódigo.

+6

Una respuesta correcta y completa es de aproximadamente 2 años de clases de posgrado en comp ciencia y matemáticas. Se han escrito muchos doctores sobre cifrado ... –

+7

Lo único que probablemente * no * desee hacer es enrollar su propia biblioteca de cifrado, al menos si realmente le importa la seguridad de los datos cifrados. Obtener la criptografía correcta es ** duro **. –

Respuesta

0

Una manera fácil, pero no exactamente segura, es rotar cada byte en un número determinado por la contraseña. Puede usar un código hash de una cadena, o contar el número de caracteres, o lo que sea para el número.

Lo que probablemente esté pensando, sin embargo, es el cifrado de clave pública. Aquí hay un enlace a un documento que le indicará las matemáticas: tendrá que resolver los detalles de la implementación usted mismo, pero no es tan difícil una vez que comprenda las matemáticas. http://mathaware.org/mam/06/Kaliski.pdf

+1

El cifrado simétrico probablemente funcionaría igual de bien para esto. –

18

Para (simétrica) de encriptación es necesaria una clave secreta para el cifrado y el descifrado.

Normalmente, la contraseña que proporciona se utiliza como origen de esta clave. Por diversas razones de seguridad, la contraseña no es (y, a menudo, no puede, debido a los requisitos del cifrado utilizado) utilizada directamente como clave. En su lugar, se usa key derivation function para generar la clave desde la contraseña.

Esta es la razón por las contraseñas de cifrado deben ser larga y bastante aleatorio: De lo contrario la clave resultante sólo vendrá de un subconjunto muy pequeño de claves posibles, y estos pueden entonces simplemente todo ser juzgados, por lo tanto fuerza bruta del cifrado.

En cuanto a ejemplos de código, hay varias posibilidades:

  • vistazo al código fuente de una biblioteca de cifrado, tales como OpenSSL
  • vistazo al código fuente de un programa que implementa el cifrado, tales como GnuPG
  • google algo de código fuente de ejemplo para un algoritmo de cifrado simple, o una función de derivación de claves, y tratar de entenderlo

Esto depende de lo que quiere aprender.

+0

¿Quiso decir "generalmente, la contraseña que proporciona es ** no ** utilizada como clave"? ? La primera y la segunda oraciones de ese párrafo parecen ser contradictorias. – Thanatos

+1

@Thanatos: Vaya, eso no fue lo que quise decir. Gracias por mencionarlo; fijo. – sleske

5

Tendrá que mirar a otros recursos para una explicación más profunda, ya que esta cuestión es extremadamente amplio.

Hablando en general: utiliza una contraseña como "semilla" para una clave de cifrado, como señaló sleske. Luego, usa esta tecla para aplicar un algoritmo de cifrado bidireccional (es decir, uno que se puede aplicar una vez para encriptar y otra vez para descifrar). Cuando aplica el algoritmo a un dato, se cifra de tal forma que nunca podría volver a obtener los datos sin utilizar la misma clave, y no puede producir prácticamente la misma clave sin tener la misma contraseña que una semilla.

2

Si está interesado en la criptografía, lea Applied Cryptography de Bruce Schneier. Excelente lectura, muchos ejemplos. Pasa por diferentes tipos de criptografía.

0

El bloque de construcción básico de la mayoría de las cifras de bloques es una construcción llamada Feistel Network. Es razonablemente fácil de entender.

Los sistemas de cifrado de flujo son incluso más simples: son básicamente generadores de números pseudoaleatorios, aunque con algunas propiedades de seguridad importantes, donde el estado interno inicial se deriva de la clave.

0

La encriptación basada en contraseña ES simétrica. La entrada generalmente consta de una sal además de la contraseña. FooBabel tiene una aplicación genial en la que puedes jugar con esto ... actualmente codifican el Salt en una matriz de ocho bytes (de cero a siete) para simplificar. Hice una solicitud para ver si permiten que los usuarios ingresen la sal. De todos modos, aquí está - PBECrypto

Cuestiones relacionadas