<div dir="auto"><div><br><div class="gmail_extra"><br><div class="gmail_quote">Den 31 jan. 2018 03:58 skrev "Nico Williams" <<a href="mailto:nico@cryptonector.com" target="_blank">nico@cryptonector.com</a>>:</div></div></div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="m_-4919608295190479562m_6440972840325564924quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
We had homoglyph problems before computers ('l' vs '1', for example).<br>
They got worse not because of Unicode, but because the world is more<br>
connected now.  Yes, we could, eg, have had a unified CJK codepoint<br>
assignment set, but it turns out people didn't want that.<br>
<br>
Basically, we just have to accept these issues and deal with them as<br>
best we can: with code to heuristically detect phishing based on<br>
homoglyphs, and code to fuzzily match Unicode identifiers.  Such code<br>
has to evolve as scripts are added to Unicode and/or new homoglyph sets<br>
are discovered (if we don't already know all of them).<br>
<div class="m_-4919608295190479562m_6440972840325564924quoted-text"></div></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">I only see one plausible solution for multilingual text form identifiers, although definitely not an easy one (wall of text coming).</div><div dir="auto"><br></div><div dir="auto">It is to actually perform large scale testing with real people, in multiple languages and cultures, and then feed that collected data to algorithms to figure out what patterns (symbols and sets of symbols) that people *actually* are at risk of confusing. </div><div dir="auto"><br></div><div dir="auto">We can not rely exclusively on heuristics without any data from humans. </div><div dir="auto"><br></div><div dir="auto">Finding collision candidates (potential homoglyphs) could be done with fuzzy visual comparison algorithms / heuristics to find pretty much *all plausible* pairs of confusable symbols, and also sets of symbols. This is not for determining what's actually confusable, but to find candidates. Multiple methods would need to be used. We don't care if it suggests obviously distinct pairs here, it will be filtered out later. We'd rather have many false positives than many false negatives. </div><div dir="auto"><br></div><div dir="auto"><span style="font-family:sans-serif">To perform the test you could for example first come up with many, many different kinds of samples of texts and other usage of symbols meant to convey meaning (in multiple fonts!). Not only standard plain texts, but also all forms of lists and instructions and more. </span><br></div><div dir="auto">Then we would be randomly replacing symbols in the sample texts with similar ones. </div><div dir="auto"><br></div><div dir="auto">Then you ask people to try to read these modified texts, as well as originals. You would ask people to identify symbols, and to tell which symbols and/or sentences that are distinct or identical, and whichever other tests may be necessary. </div><div dir="auto"><br></div><div dir="auto">When you have all that real world data on how real people actually read all the symbols, context included, you would probably need machine learning algorithms to process it all (simple statistics are likely to miss a lot of detail). </div><div dir="auto">Then finally you could use the results to produce guidelines for real world usage, producing a model of how real people parse visual symbols.</div><div dir="auto"><br></div><div dir="auto">After all that, if we want a globally usable set of visually distinct symbols complete enough to write in most languages, then we could try to create a sufficiently complete list of non-ambiguous symbols - most likely by "dumbing down" pairs of similar symbols to single "universal" symbols, or "canonical homoglyphs" (?), with less detail and which depending on context is still easily recognizable as the correct intended writing symbols.</div><div dir="auto"><br></div><div dir="auto">However I can imagine a lot of people of non-latin script languages wouldn't be too happy with that solution, if it were the only one (a large number of symbols would be "inaccurate" to various degrees). Another solution, IIRC already used for domain names, is to create such lists per individual script and forbid mixing different scripts. That could still be problematic in but cases obviously, because of an infinite number of multilingual texts and much more. </div><div dir="auto"><br></div><div dir="auto">However, for anything meant to be an identifier in text form, a script mixing ban SHOULD be enforced. </div><div dir="auto"><br></div><div dir="auto">Alternatively, limit the number of combined scripts to fixed sets depending on context, and then ALSO apply the above solution for filtering homoglyphs to replace them with "canonical homoglyphs". Reducing the number of simultaneous scripts limits the number of visual collisions.</div></div>