El propósito es el mismo que con el hashing: dado un conjunto de documentos confidenciales, quiero procesarlos y almacenar algo seguro como hashes / bcrypt salados. Más adelante, cuando se proporcione un nuevo documento, quiero comprobar si ya existe en la base de datos.
Algo así como monitoreo de fugas.
El problema es que si este nuevo documento es una versión ligeramente modificada del original, el sistema también debería decir que son muy similares.
Tratando de resolver esta tarea, consideré primero normalizar el texto (eliminar la puntuación, el caso de las letras, el truncamiento, etc.) y luego hacer una búsqueda por duplicado (casi duplicados y shingling).
De todos modos, no estoy seguro de que sea seguro: por ejemplo, si la ventana de tejas es bastante pequeña, entonces es posible la fuerza bruta. Para longitud de ventana = 3 y 50 letras, obtenemos 125k combinaciones y pocas colisiones. Salting tampoco ayudaría: el atacante conoce el algoritmo y puede organizar la fuerza bruta no como 'xyz', sino como 'xyzsalt' y probar todas las combinaciones de 125k 'xyz'. ¿Quién sabe qué más puede estar mal con la seguridad de este enfoque?
Por lo tanto, es por eso que quiero preguntar: ¿hay algunos algoritmos seguros para la comparación aproximada / búsqueda casi duplicada?