¿Cuántas colisiones hay en el conjunto de todos los resúmenes de valores md5 de más de 32 bytes y más de 33 + n bytes?

Para la mayoría de las aplicaciones (no criptográficas), podemos razonar sobre MD5 como si fuera una función aleatoria. Bajo ese supuesto, cualquier par de valores distintos es una colisión MD5 con probabilidad [matemática] \ tfrac {1} {2 ^ {128}} [/ matemática]. Por linealidad de expectativa, entre cualquier valor [math] k [/ math] distinto, esperamos [math] \ tfrac {1} {2 ^ {128}} \ tbinom k2 [/ math] colisiones.

(Como un caso especial, con solo entradas [matemáticas] k = 2 ^ {64} [/ matemáticas], esperamos una colisión con una probabilidad de alrededor del 50%. Esto se conoce como la paradoja del cumpleaños ).

Aunque no podemos saber con certeza que MD5 realmente se comporta al azar para este propósito (porque las colisiones MD5 “naturales” son demasiado raras), hay buenas razones para creer que sí. Podemos hacer el experimento para una versión intencionalmente truncada de MD5. Aquí hay algunos datos de colisiones parciales de los primeros 16 bits de resúmenes MD5 (código en comentarios); puede ver que el número real de colisiones es muy cercano al número que esperaría estadísticamente, y mucho mayor que el límite inferior que obtendría si los resúmenes se distribuyeran “óptimamente” en lugar de al azar.

  #digests colisiones esperadas lowbound
      128 0 0.1 0
      256 1 0,5 0
      512 3 2 0
     1024 5 8 0
     2048 25 32 0
     4096 119 128 0
     8192 505 512 0
    16384 2109 2048 0
    32768 8045 8192 0
    65536 32634 32768 0
   131072 131033 131071 65536
   262144 525449 524286 393216
   524288 2096093 2097148 1835008
  1048576 8386142 8388600 7864320
  2097152 33547396 33554416 32505856
  4194304 134202102 134217696 132120576
  8388608 536862976 536870848 532676608
 16777216 2147428485 2147483520 2139095040