2010-06-20 36 views
8

En nuestro proyecto hay varios lugares donde podríamos haber salido con hash. Por ejemplo, almacenamos una referencia encriptada entre una licencia y el objeto con licencia en la base de datos junto con la referencia no encriptada. Esto es para asegurar que el usuario no pueda cambiar la entidad que tiene licencia mediante el borrado con la base de datos.Diferencia entre encriptación y hash

La razón principal por la que utilizamos el cifrado en todas partes es porque ya teníamos una buena biblioteca de cifrado y una clave del sistema. En realidad, no parecía valer la pena el tiempo para desarrollar una biblioteca hash además.

¿Hay algún riesgo de seguridad que estamos creando mediante el uso de cifrado en lugar de hash?

+7

* ¿Desarrolla * una biblioteca hash? :( –

+1

Hah. Buena captura. Me refería a incorporar una biblioteca hash. Probablemente sea menos de un día de trabajo, pero pensé que sería una buena oportunidad para aprender más sobre la seguridad. – Pace

Respuesta

5

Al almacenar el texto sin formato junto con el texto cifrado, está creando un buen repositorio de cadenas de prueba si alguien quiere encontrar su clave. Dado que aparentemente utiliza dicha clave para encriptar todo Yo diría que es un riesgo.

Recuerde, lo bueno de las bases de datos centrales es que algún día alguien obtendrá los datos. Si la historia es alguna lección, al menos.

+0

Buen punto con respecto al texto plano que permite cadenas de prueba. '' Pensar en eso '' – Pace

+0

Entonces, ¿cuál es la solución si no es una base de datos central? –

+0

Básicamente lo que ya preguntaron: Hashing en lugar de almacenar texto sin formato y texto cifrado en la misma ubicación. solución. – Joey

1

Bueno, el cifrado es un proceso bidireccional. Suponiendo que está utilizando un cifrado basado en claves, estará seguro siempre que la clave de cifrado sea segura y esté utilizando un algoritmo moderno (por ejemplo, AES). Hashing, por el contrario es un proceso unidireccional, que debería ser prácticamente imposible reconstruir la entrada hash del valor hash. Entonces, al no tener una clave, el hash puede considerarse más seguro. También puede ser menos computacionalmente hambriento.

1

Cualquier dato que se pueda cifrar también se puede descifrar.

Hashing es un proceso unidireccional, especialmente si utiliza los nuevos métodos SHA2.

0

Has introducido el secreto de la clave como un punto débil, yo diría que es un riesgo, aunque medir la gravedad requeriría más detalles.

Hashing, por otro lado, se basaría únicamente en la dificultad de encontrar colisiones, que es probablemente un escenario más seguro que mantener esa clave en secreto.

1

Por lo que entiendo, quiere lograr la integridad de sus datos (es decir, quiere lograr que nadie pueda cambiar sus datos son desapercibidos). Esto se puede lograr utilizando una firma digital (por ejemplo, RSA, DSA) o un MAC (Código de autenticación de mensajes). Un mac es el equivalente simétrico de una firma digital, que generalmente es un esquema asimétrico.

Por lo tanto, en su caso, un MAC (como por ejemplo HMAC) debería ser una buena opción.

4

Si está utilizando un sistema de cifrado simétrico y el sistema se implementa en el entorno "hostil", entonces es cuestión de tiempo antes de que un individuo motivado pueda aislar la clave y firmar su propia licencia (u otras) datos.

En esos casos, necesita un cifrado asimétrico para "firmar" la licencia con su clave privada que se almacena de forma segura en una computadora en una bóveda y sin conexión con el mundo exterior. Ok, ligera exageración, pero en un entorno seguro.

Un hash simple no ayudará en este caso porque se pueden usar para firmar licencias falsificadas. Si desea asegurarse de que solo usted puede aprobar los cambios de licencia, la forma más directa es usar un cifrado asimétrico para cifrar la licencia (o un hash de la licencia).

+0

¡Voy a ver más en esto, gracias! – Pace