security - simetrico - md5
Diferencia entre cifrado y hash (6)
Al almacenar el texto plano junto con el texto cifrado, está creando un buen repositorio de cadenas de prueba si alguien quiere encontrar su clave. Dado que aparentemente usas dicha clave para encriptar todo , 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.
En nuestro proyecto, hay varios lugares donde podríamos haber salido con hashing. 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.
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?
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.
Cualquier información que pueda ser encriptada también puede ser descifrada.
Hashing es un proceso unidireccional, especialmente si utiliza los nuevos métodos SHA2.
Por lo que entiendo, quiere alcanzar la integridad de sus datos (es decir, quiere lograr que nadie pueda cambiar sus datos sin que lo note). 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.
Entonces, en su caso, un MAC (como por ejemplo HMAC) debería ser una buena opción.
Si está utilizando un 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 sus propios (u otros) datos de la licencia.
En esos casos, necesita un cifrado asimétrico para "firmar" la licencia con su clave privada que se almacena de manera 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).
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.