Me gustaría saltear la función hash de OpenSSL externa, para poder asignar un salt por mi cuenta. ¿Es eso posible o es la función hash de OpenSSL siempre "salted"?
Me gustaría saltear la función hash de OpenSSL externa, para poder asignar un salt por mi cuenta. ¿Es eso posible o es la función hash de OpenSSL siempre "salted"?
Los algoritmos hash se utilizan en OpenSSL para las comprobaciones de integridad de los datos y la firma de certificados y CRL. En el nivel de aplicación se utiliza la técnica de salchicha con sal. Podrías usar JavaScripts para lograr eso. Háganos saber qué es lo que está tratando de lograr.
Lo siguiente se basa en las entradas y los requisitos de una implementación insegura para fines de prueba.
Las funciones de hash SHA-1 y SHA256 no agregarán sus datos internamente. Todas las múltiples iteraciones de hash de un dato dado resultarán siempre en el mismo hash. Por lo tanto, lo que intentas construir es posible.
Paso 1 : pida al usuario que ingrese los datos que se van a hashear.
Paso 2 : pregunte al usuario qué opción prefiere:
Se requiere salting - hash=SHA256(SHA256(data)+random(1))
Entrada manual de salt - hash=SHA256(SHA256(data)+manual_salt)
Sin salting - hash=SHA256(data)
Si estás codificando en C ++, revisa algunos de estos enlaces:
SHA-1 y SHA-256 son funciones hash criptográficas . Toman como entrada una secuencia arbitraria de bits, y solo eso. No hay "sal" en las funciones hash.
Cuando se dice que una función hash está "salada", entonces esta no es una función hash; esta es otra construcción que utiliza, entre sus parámetros de entrada, una que se considera una "sal", y que puede usar, internamente, una función de hash como elemento de construcción. Un ejemplo de tal construcción es PBKDF2 .
La distinción es importante, porque cuando alguien dice "Quiero saltear mi hash", esto puede significar una de las dos cosas siguientes:
Ese alguien está intentando implementar alguna construcción existente, bien especificada, como PBKDF2, y simplemente lo llama "un hash salado". La forma correcta es buscar una implementación existente de la construcción completa o, en su defecto, implementarla utilizando la especificación que indicará exactamente qué secuencia de bits se inyecta en cualquier función hash que se use internamente. En cualquier caso, la cuestión de "cómo eliminar un hash" no tiene sentido.
Que alguien está en el proceso de hacer su propia construcción casera que involucra una función hash, y trata de mezclar algunos valores y algunas funciones criptográficas, esperando que todos los ingredientes de alguna manera interactúen bien y resulten en "seguridad" , imaginada como una especie de pastel. Esta es una receta conocida para el desastre; solo la tristeza recorre ese camino.
Usualmente , la noción de "sal" proviene del concepto de hash contraseñas , donde las contraseñas son "secretos débiles" ("secretos" porque se supone que permanecen confidencial, "débil" porque pueden ser recordados por cerebros humanos, y los cerebros humanos son realmente malos al recordar valores aleatorios). Hashear contraseñas no es algo que tolere bien la improvisación; hay mucha teoría e investigación sobre el tema, y la experiencia ha demostrado repetidamente que los esquemas caseros son casi invariablemente patéticamente débiles. Lea esta respuesta como una introducción sobre el tema.