{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"ef2f3528-3772-4942-8ca7-5b32ca133d9c","kind":"skill:research-report","nodes":[{"acceptedSubmissionHash":"08a07700d659bafa09ed4d092ac458c04498d679583f8a3864c5b31d8e2c6b79","dependsOn":[],"execution":{"network":true,"profile":"none","requires":["network"],"skillHash":"3ddca93330036359dd721585e58e67820336a0398b7927b3c89369d6134f30f6","skillId":"research-report","tools":[]},"key":"research_report","kind":"code","role":"implement","skillHash":"3ddca93330036359dd721585e58e67820336a0398b7927b3c89369d6134f30f6","skillId":"research-report","state":"accepted"}],"objective":"[SIMD-COLLISION:ripemd160:24]\nFind a collision for ripemd160 truncated to the first 48 bits (λ=24).\nReturn a JSON file named collision.json with exactly:\n{\"algo\":\"ripemd160\",\"lambda\":24,\"inputA\":\"<hex 0x... or utf8>\",\"inputB\":\"<hex 0x... or utf8>\"}\nRules:\n- inputA and inputB must be distinct\n- digest(ripemd160, inputA) and digest(ripemd160, inputB), truncated to 48 bits MSB, must be identical\n- Do not invent a false collision; verification is recomputed by SIMD\nBirthday cost is about 2^24 evaluations.","parentJobId":null,"planHash":"db8cf59269792af61e6af2b5ee3f86a9745dd031d74535fb14290fe873f6a5ff","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"ef2f3528-3772-4942-8ca7-5b32ca133d9c","publication":{"commit":null,"deliveredAt":null,"repoUrl":null},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51866","feedbackHash":"abd05823bb8bdf7d6a68304e193a810a9557f7a6234b4ebb269743bfff79497d","nodeKey":"research_report","submissionHash":"08a07700d659bafa09ed4d092ac458c04498d679583f8a3864c5b31d8e2c6b79","tag1":"verification:structural","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"0fc09288c472ecc367e558685c8e634b01bf706bede07c98770afb69aa9d07b3","state":"completed","submissions":[{"artifacts":[{"bytes":2831,"hash":"ba4b58750596b333881af233cf6036cfb78bf65a1e0ade3f321e176313fcf63e","mediaType":"text/markdown","name":"report","path":"artifacts/report.md"}],"attempt":1,"bundleHash":"636ad8e282375e16bebd14897f541a31e00dcfa135a2282d2efb7aa3776f54fb","device":"7a8ebdfaac641de5","findings":[],"hash":"08a07700d659bafa09ed4d092ac458c04498d679583f8a3864c5b31d8e2c6b79","nodeId":"401e57ac-7f9e-4e4e-9a3c-8d7562f22daf","outcome":"completed","summary":"I found a collision: the two inputs below are different, but their RIPEMD-160 digests share the same first 48 bits.\n\n```json\n{\"algo\":\"ripemd160\",\"lambda\":24,\"inputA\":\"0x69646d642d3133343538303031\",\"inputB\":\"0x69646d642d3231373737323238\"}\n```\n\n- **Inputs:** the hex decodes to the ASCII strings `idmd-13458001` and `idmd-21777228`.\n- **Digests:** they both start with `9ff5cb7e7844` and differ after that.\n- **Search:** a simple birthday search found it after about 21.8 million hashes (roughly 2^24.4), which took 75 seconds on one core. That's about what the birthday bound predicts for 48 bits. Nothing about RIPEMD-160 itself was exploited, and full 160-bit RIPEMD-160 is unaffected.\n- **Checks:** Python's hashlib and the OpenSSL command-line tool gave the same full digests for both inputs. Python's RIPEMD-160 also returns the published test-vector result for \"abc\". A script confirmed the JSON has exactly the four required keys, the inputs are distinct, and the first 6 bytes of both digests match.\n- **Not checked:**\n  - I couldn't run the SIMD verifier here, so I haven't seen it accept this pair.\n  - I assumed \"first 48 bits MSB\" means the first 6 bytes of the normal hex digest. If the verifier reads the bits in another order, the pair would need rechecking.\n\n**Files:**\n- `collision.json` at the repo root, with a copy in `artifacts/collision.json`\n- `artifacts/report.md`: the evidence, separated into facts, inferences and open questions\n- `artifacts/README.md`\n- `artifacts/search.py`: the search script\n\nAll of these are left untracked, as instructed.","treeHash":"c54ea84a6f08291445eed225ab08883a1360a90e","usage":{"cachedInputTokens":112850,"inputTokens":12,"model":"claude-opus-5-5","outputTokens":3843,"runtime":"claude","turns":7,"wallClockMs":117231}}],"verification":[{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"08a07700d659bafa09ed4d092ac458c04498d679583f8a3864c5b31d8e2c6b79","verifiedTreeHash":"c54ea84a6f08291445eed225ab08883a1360a90e","verifierVersion":"0.1.0+41305fb5"}]}