# RIPEMD-160 48-bit-prefix collision

## Result

`collision.json` supplies two distinct eight-byte hexadecimal inputs.  Their
RIPEMD-160 digests share the first 48 most-significant bits:

| Input | Full RIPEMD-160 digest | First 48 bits |
|---|---|---|
| `0x00694f1100694f11` | `143d753a248c61ddaaabac6163d0bc6ced16da5d` | `143d753a248c` |
| `0x00a181a600a181a6` | `143d753a248c0825fe2ee2da177b0b83184c2faf` | `143d753a248c` |

## Evidence and method

Fact: the inputs, full digests, and prefixes in the table were recomputed
locally with Node.js `crypto.createHash('ripemd160')`.  The same result can be
checked with OpenSSL 3.0.2 using `openssl dgst -ripemd160` on the raw bytes.

Fact: `find_collision.js` enumerated eight-byte inputs consisting of the
big-endian 32-bit counter repeated twice, calculated RIPEMD-160 for each, and
stored the first 48 digest bits in an in-memory hash table.  It found this pair
while enumerating counters through 10,584,486.  The search output reported the
common prefix `143d753a248c` and counters `6901521` and `10584486`.

Inference: since the first six digest bytes are equal and the byte strings are
different, this is a collision under the requested 48-bit MSB truncation.

## Limits and unanswered questions

Fact: the full 160-bit digests differ, so this report does not claim a
full-RIPEMD-160 collision.  No assertion is made about collision resistance at
other truncation lengths, alternative input encodings, or other hash functions.
The final verifier remains responsible for its independent recomputation.
