Puede que te interese leer sobre ssdeep , un "hash por tramos activado por el contexto" (CTPH) utilizado como contenido agnóstico Forma de hash borroso. Ssdeep crea hashes de partes de un archivo para que se pueda determinar la similitud; por ejemplo, un carácter cambia entre dos archivos idénticos. La suma de comprobación de las partes del archivo modificadas será diferente, pero las sumas de comprobación de todas las demás partes no, por lo que los archivos se consideran muy similares.
Básicamente, estás intentando hacer esto, pero sin tener la intención de usarlo para medir la similitud de archivos.
Tengo la impresión de que mientras mantengas hashes completos (no los trunques) y que los segmentos que hash sean lo suficientemente grandes como para que las colisiones sean raras (¿tal vez 512 bytes?), tendrás un nivel suficiente de integridad de datos . En teoría, es posible que tenga más integridad, ya que tiene una longitud de hash más larga, pero hay muchas áreas sobre las que debe tener especial cuidado en su implementación que no recomendaría en absoluto. esto.
Dicho esto, especificaste tres hash sha256, incluido uno para todo el archivo. Mientras se cumplan los tres, esto debería ser, en su punto más débil, tan bueno como sha256 solo. Es probable que sea aún más fuerte, pero (probablemente) serás tan susceptible como un solo sha256 en lo que respecta a las vulnerabilidades teóricas de SHA-2, por lo que también deberías buscar otro algoritmo como SHA-3 o incluso (ya que todavía tiene el archivo completo sha256) algo más rápido como MD5. También puede considerar almacenar el tamaño de bytes.
256 bit SHA-2 debería ser suficiente para cualquier cosa a menos que esté preocupado por el futuro lejano. Si ese es el caso, no puede dar nada por sentado, pero me gustaría ir con SHA2-512 y SHA3-512 y el tamaño exacto del archivo.
Si solo desea más velocidad y no le preocupa que lo ataquen (es decir, solo le preocupa la integridad de los datos del hardware defectuoso y / o las redes de mierda), puede comenzar solo con el tamaño del archivo, luego calcular el MD5 y SHA1 al mismo tiempo (dos procesos separados, una lectura del archivo). Todavía no me molestaría en cortar un archivo a menos que quisieras usar ssdeep (que parece usar MD5 para sus piezas de forma predeterminada).
Tal vez un atractivo equilibrio de velocidad e integridad podría ser verificar el tamaño del archivo, luego el MD5 de los primeros 5MB (o todo el archivo si es inferior a 5MB), luego la verificación de integridad real, por ejemplo. sha256 o sha3-512. * Debería ser más difícil crear una colisión y más rápido detectar fallas (detenerse en la primera falla), mientras que solo es despreciablemente más lento que la última comprobación (me tomó 0.003s calcular el hash MD5 de un archivo de prueba aleatorio de 5MB). (* No soy experto en criptoanálisis ni en sumas de comprobación criptográficas: esto no tiene autoridad).
Me siento tentado a decir que si no se sospecha un ataque, estaría bien tanto con el tamaño del archivo como con el MD5 (probablemente solo estaría bien con el MD5, aunque el tamaño del archivo le permitiría fallar más rápido < em> y proporcionan una integridad de datos ligeramente mejor).