¿Hay un hash SHA1 especialmente improbable?

Tengo un Map<SHA1, BinaryBlob> . Muy similar a Git.

Me gustaría poner un número pequeño y finito de inputs "especiales" en este map. Me gustaría poder cambiar los valores de los blobs binarys, pero aún así referirme a ellos con la misma key.

La forma correcta de hacerlo es usar un Map<Either<SHA1, SpecialKey>, BinaryBlob> .

La forma de hack para hacer esto (que es la forma en que realmente estoy haciendo esto) es definir:

 SHA1 specialKeyA = 0x00000 ... 00 SHA1 specialKeyB = 0x00000 ... 01 

Entiendo que SHA1 produce valores que están distribuidos uniformemente. Pero me pregunto si tal vez hay un asterisco, y si hay un par de hash de esquina (como 0x00.. o tal vez 0xFF... ) que están garantizados que no sucederán.

Me siento bastante seguro con mi layout actual, pero tenía curiosidad 🙂

EDITAR: ya estoy contando con la singularidad de hash, por lo que me siento muy seguro con el layout. La pregunta es por curiosidad: ¿hay un puñado de valores que SHA1 es incapaz de generar? El censo en los comentarios hasta ahora parece ser no …

A mi leal saber y entender, SHA1 no tiene una preimage conocida de 00…00 (y tampoco de 00…01 , 00…02 , u otros valores "especiales"). Aunque no violaría ninguna de las definiciones formales de un hash seguro, los IV están diseñados para evitar tales patrones humanos reconocibles.

De todos modos, probablemente desaconsejaría el uso de estos valores, porque a otros también se les podría haber ocurrido la idea de utilizar estos valores especiales, por ejemplo, ver esta pregunta sobre un commit de git con todos los ceros . Si le da lo mismo, generaría un valor aleatorio de 80 bits, por ejemplo 83a…c3 , y anexaría su contador, por ejemplo 83a…c300…01 , 83a…c300…02 , etc.