En primer lugar, esta pregunta no es sobre el hashing de contraseñas, mis requisitos son diferentes. En particular, estoy totalmente de acuerdo en que las sales no son útiles para agregar complejidad criptográfica en los hashes de contraseña, ya que el atacante casi siempre conoce la sal. En mi situación, la sal es desconocida.
Tengo una tabla con registros, una columna de la cual contiene un nombre de usuario que cubre dos fechas diferentes. Puede haber varios registros con el mismo nombre de usuario. Quiero compartir esta tabla con otra persona, sin embargo, esta persona no puede saber qué nombre de usuario va con qué registro, sin embargo, debería poder vincular registros para el mismo nombre de usuario en la misma fecha.
Mi solución sugerida para esto es generar una sal aleatoria de 1024 bits (CSPRNG) para cada fecha. Luego hago un hash de los nombres de usuario, usando el salt para sus fechas respectivas, y sustituyo el nombre de usuario con esto. Enviaré las tablas, sin embargo no las sales.
Mi afirmación es que no es computacionalmente factible (en el hardware actual de computación sin quatum) para el destinatario de estos datos para:
- siempre que tenga un nombre de usuario, averigüe qué datos pertenecen a este nombre de usuario
- averigüe (solo en la columna de nombre de usuario) qué registros pertenecen al mismo usuario, a menos que los registros estén en la misma fecha
- incluso si conoce los nombres de usuario verdaderos y con hash del 99.9% de los registros, para determinar los nombres de usuario a partir de los valores de hash del 0.1% restante
Para completar: Me doy cuenta de que siempre hay una posibilidad de que dos nombres de usuario diferentes se asignen al mismo hash, perdiendo así la propiedad de que el receptor debería poder distinguir qué registros tenían los mismos nombres de usuario en la tabla original, sin embargo estas posibilidades son tan pequeñas desde el punto de vista astronómico que estoy dispuesto a aceptarlas.
Mi pregunta: ¿Mi reclamo es correcto? ¿Hay algún documento que pueda señalar que lo respalde (sin que alguien necesite un doctorado en matemáticas, me gustaría poder "probarlo" ante el departamento legal)? Creo que estoy buscando el mismo tipo de garantías que (a) el cifrado simétrico del valor con una clave que luego se elimina, da, aunque siento que el hashing con un salt de 1024 bits es más fuerte que el cifrado con un 1024 clave de bit.
Tenga en cuenta que (por razones organizativas) no es posible para mí simplemente asignar cada nombre de usuario a un valor aleatorio, y almacenar este valor en la memoria de modo que si vuelvo a ver el mismo nombre de usuario / fecha, usaré el mismo valor.