Idea
Mine the real subset of BitAbuse — BitCore (~26k genuine phishing visually-perturbed sentences, not the synthetic BitViper portion) — for confusables that real attackers actually used but that UTS#39 / the bundled table lacks. Verify each, and upstream them to Unicode rather than carry a private divergence.
Why this is principled (and why BitViper is not)
- BitCore = real attacker choices → legitimate real-world signal about which homoglyphs are used in the wild.
- BitViper = Viper's visual-nearest-neighbor confabulations → synthetic; encoding them would overfit a benchmark and produce a circular recovery number. Explicitly out of scope (see the coverage-expansion discussion).
The bar here is deliberately high so this doesn't become benchmark-fitting by the back door:
- Real subset only. Restrict to BitCore; exclude BitViper-generated rows.
- Human / rendered-glyph verification. Each candidate must be a genuine visual confusable of its target (render and compare), not merely "improves the metric."
- Authoritative destination. Propose verified pairs to the Unicode Consortium (UTS#39
confusables.txt). translit then picks them up automatically on the next Unicode data refresh — no private fork of the standard.
- Measurement stays honest. BitAbuse remains a measuring instrument; do not tune the table to it.
Scope / steps
- Separate BitCore from BitViper in the dataset (id/source field).
- Align perturbed → clean (text↔label) to extract candidate
confusable → target pairs (reuse the difflib miss-mining harness).
- Filter to pairs absent from the bundled
confusables.txt; dedupe; rank by frequency.
- Rendered-glyph similarity check per candidate; drop ambiguous/many-to-one ones.
- Draft a submission to Unicode for the surviving, clearly-confusable pairs.
Non-goals
- No private additions to translit's table to "win" on BitAbuse.
- No BitViper-derived mappings.
Acceptance
- A short, human-verified list of real-attacker confusables missing from UTS#39, with rendered-glyph evidence.
- A Unicode submission (or a documented decision not to, per case).
Context: sibling to the transitive-ASCII coverage issue; this is the real-world-signal path, kept separate and lower priority because it requires human verification and an external (Unicode) destination.
Idea
Mine the real subset of BitAbuse — BitCore (~26k genuine phishing visually-perturbed sentences, not the synthetic BitViper portion) — for confusables that real attackers actually used but that UTS#39 / the bundled table lacks. Verify each, and upstream them to Unicode rather than carry a private divergence.
Why this is principled (and why BitViper is not)
The bar here is deliberately high so this doesn't become benchmark-fitting by the back door:
confusables.txt). translit then picks them up automatically on the next Unicode data refresh — no private fork of the standard.Scope / steps
confusable → targetpairs (reuse the difflib miss-mining harness).confusables.txt; dedupe; rank by frequency.Non-goals
Acceptance
Context: sibling to the transitive-ASCII coverage issue; this is the real-world-signal path, kept separate and lower priority because it requires human verification and an external (Unicode) destination.