- Hata bildirimi, indirim kodu girişi, kargo takibi gibi bir kişinin ID’yi okuyup ilettiği süreçlerde
O/0,I/l/1/7gibi görsel belirsizlikler kolayca giriş hatalarına yol açar - Karışıklık yazı tipine ve el yazısına göre artar;
5/S,2/Z,8/B,6/G,9/q/ggibi ayırt etmesi zorlaşan kombinasyonlar tekrar tekrar ortaya çıkar - Müşteri desteği, hata ID’si, ürün ID’si gibi insanların doğrudan kullandığı ID’lerde, rastgele büyük bir karakter kümesinden çok okunması kolay bir karakter kümesi seçmek gerçek kullanım kalitesi açısından daha önemlidir
- Büyük/küçük harf ayrımı yapılırsa 5 karakterli bir ID için
418,195,493kombinasyon üretilebilir; ayrım yapılmazsa bu sayı5,153,632’ye düşer, bu da uzunluk ve güvenlik arasında bir denge gerektirir - Büyük/küçük harf duyarlı ID’ler daha kısa oluşturulabilir, ancak bazı üçüncü taraf sistemler veya protokoller büyük/küçük harf duyarsız çalışabildiği için entegrasyon aşamasında sorun çıkabilir
İnsanların okuduğu ID’lerde ortaya çıkan karakter karışıklığı
- ID’yi hata raporu, indirim kodu girişi, kargo takibi gibi sistem etkileşimlerinde yazarken veya iletirken, önlenebilir karakter karışıklıkları kullanıcı deneyimini bozabilir
- Başlıca görsel olarak belirsiz karakter kombinasyonları şunlardır
O/0: Üzerinde eğik çizgi veya nokta olmayan 0’larda harfOile rakam0benzer görünebilirI/l/1/7: BüyükI, küçükl, rakam1ve rakam7birçok basılı materyalde ve el yazısında ayırt edilmesi zor karakterlerdir5/S,2/Z,8/B,6/G,9/q/g: Belirli yazı tiplerinde, stilize fontlarda ve el yazısında karıştırılabilir
9qg6G8B2Z5SIl170Oörnek dizgesi; Arial, Helvetica, Courier, Times, Verdana, Georgia, Tahoma, Impact, Comic Sans gibi çeşitli sistem fontlarında karşılaştırma amacıyla kullanılırIilelgibi bazı kombinasyonlar birçok yazı tipinde sürekli belirsiz görünebilir;9qggibi bazı kombinasyonlar ise elle yazıldığında daha da kafa karıştırıcı olabilir-
Sorunun özellikle büyüdüğü ID türleri
- Müşteri desteğinde paylaşılan indirim kodları
- Kargo veya lojistikte kullanılan takip kodları
- Sorunun yeniden üretilmesi ve taleplerin işlenmesi için gereken hata ID’leri
- Ürün tanımlamada kullanılan ürün ID’leri
Büyük/küçük harf ayrımı ile karakter kümesi arasındaki denge
- Bir ID’nin
abcileABC’yi aynı değer olarak kabul edip etmeyeceğine, üretim kuralları belirlenirken karar verilmelidir - Büyük/küçük harf ayrımı korunup görsel olarak belirsiz karakterler çıkarıldığında kullanılabilir karakter sayısı 53 olur
- Büyük/küçük harf ayrımı yapılmazsa kullanılabilir karakter sayısı 22’ye düşer
- ID uzunluğuna göre mümkün kombinasyon sayıları şöyledir
- 5 karakter, büyük/küçük harf duyarlı:
53^5 = 418,195,493 - 5 karakter, büyük/küçük harf duyarsız:
22^5 = 5,153,632 - 8 karakter, büyük/küçük harf duyarlı:
53^8 = 62,259,690,411,361 - 8 karakter, büyük/küçük harf duyarsız:
22^8 = 54,875,873,536
- 5 karakter, büyük/küçük harf duyarlı:
- Sonuçta tercih, kısa ama karıştırılma ihtimali yüksek ID’ler ile daha uzun ama okunması kolay ID’ler arasında bir dengedir
- Büyük/küçük harflerin tamamını kullanırsanız, er ya da geç büyük/küçük harf duyarsız çalışan üçüncü taraf bir sistem veya protokolde beklenmedik davranışlarla karşılaşabilirsiniz
- Ticari bir sistemde kullanıcıların
iDileidiçin farklı ID’ler seçmesine izin veriliyordu, ancak var olmayan bir ID sorgulandığında büyük/küçük harf duyarsız eşleme yapıldığı için yanlış veri döndürülüyordu - Bu hataya verilen yanıt, bunun “kolaylık” amacıyla yapılan bir davranış olduğu yönündeydi
- Ticari bir sistemde kullanıcıların
Tek tek karakterler değil, kombinasyonlardan da kaçınmak gerekebilir
- Bazen karakter kombinasyonunun kendisi başka bir karakter gibi görünebilir
rn,mgibi görünebilirvv,wgibi görünebilir
- Sırf bu yüzden çok sayıda karakteri dışarıda bırakmak, kullanılabilir karakter kümesini aşırı daraltabilir; bu nedenle üretim aşamasında yalnızca belirli kombinasyonlardan kaçınmak daha gerçekçi olabilir
- Sözlü aktarım gereken durumlarda ses benzerliği de ayrıca dikkate alınabilir
- Örneğin
bilep, telaffuz edildiğinde birbirine benzer gelebilir
- Örneğin
Yararlanılabilecek mevcut yaklaşımlar
- Crockford’s Base32, belirsiz karakterleri aynı değere çözümler ve istemeden müstehcen ifadeler oluşması sorununu da dikkate alır
- Open Location Code,
23456789CFGHJMPQRVWXkarakter kümesini kullanır- Bu karakter kümesi, görsel olarak belirsiz karakterlerden kaçınmak ve yaygın dillerdeki kelime yazımlarından da uzak durmak için seçilmiştir
- Ancak yine de
6ileG,9ileQkarakterlerini birlikte içerir
3 yorum
Bu da iyi görünüyor: https://stackoverflow.com/a/58098360/8556340
Telaffuzu bile hesaba katmış olmaları gerçekten hayranlık verici.
Hacker News yorumları
İş yerinde milyonlarca cihaza seri numarası verip sevk etmiştik; kafa karıştırıcı harfleri ya da rakamları hiç dışarıda bırakmadığımız için müşteriler bunları doğru okumakta epey zorlanmıştı.
Müşterinin söylediği değerden yola çıkarak olası tüm yazım hatası kombinasyonlarını üreten ve fabrika veritabanıyla eşleşenleri gösteren bir regex betiği yazmam gerekmişti; sonra da tarih gibi başka bilgileri karşılaştırarak gerçek seri numarasını tahmin ediyorduk.
Daha da ironik olan, bazı hanelerin asla değişmemesi ve bazı konumlarda fabrika ayrımı için yalnızca 0, 1, 2 kullanmanın yeterli olmasıydı; yani baştan tüm karakter kümesine gerek yoktu. Sanki 8 katrilyon cihaz üreteceğimize inanmış gibiydik.
Örneğin ürünlere 1, 2, 3 gibi sıralı numaralar verirseniz, küçük bir örneklemle bile toplam satış hacmini oldukça kolay tahmin etmek mümkün olur. Geçerli seri numaralarını tahmin etmeyi zorlaştırmak, iade suistimali gibi şeyleri önlemeye de yardımcı olabilir.
Elbette bu kaygılar olsa bile okunması zor karakterlerden kaçınma önlemi de birlikte alınabilir; hatta hangi numaralandırma sisteminin kullanılacağını birilerinin düşündüğü anlamına geliyorsa, bu tür sorunların daha iyi farkında olunması gerekirdi. Gerçekte ise muhtemelen biri 30 saniye kadar düşünüp “bu kadar hane kullanırsak asla tükenmez, tamam” demiştir.
Cihaz seri numaralarında yalnızca ünsüzler ve rakamlar kullanılıyor gibi görünüyor.
Kodlama kullanıcıya göre değişmeli. Base32, özellikle Crockford ve RFC 4648, kısa ifade için iyi; belirsiz olmayan alfabeleri ve bunların gerekçeleri de sağlam.
Ama kullanıcı bunu yüksek sesle söylemek zorundaysa, s/key RFC 1751’deki “TIDE ITCH SLOW REIN RULE MOT” gibi kelime listesi gösterimi daha iyi olabilir.
Kendi kelime listenizi yapmamalısınız. Deyimler, eşsesliler, lehçeler vb. gizli tuzakların sonu yok. “wet clam butterfly” gibi büyük bir kazayı istemeden yaratmamak gerekir.
Bu örneğin yer aldığı RFC 1751 [0], sözlü aktarım için bir kodlama öngörmüyordu; amaç kullanıcının daha kolay “okumasını, hatırlamasını ve girmesini” sağlamaktı.
Uzmanlar arasında sözlü aktarım yapılacaksa yalnızca 26 büyük harf kullanıp NATO fonetik alfabesine dayanmak makul bir seçimdir. Ancak eğitim almamış bir kullanıcıdan gürültülü bir sözlü ortamda kod alma sorunu hâlâ çözülmüş değil.
[0] https://datatracker.ietf.org/doc/html/rfc1751
“Anahtarlı mesaj özeti algoritması MD5 kullanılmalıdır ve yeterince güçlüdür” kısmı başlı başına güldürüyor.
“Çoğu insan için okumak, hatırlamak ve girmek zordur” kısmına kadar iyi gidiyordu; sonra “İngilizce kelimeleri insanların hatırlaması ve girmesi çok daha kolaydır”a dönüyor. Çoğu insanın İngilizce bilmediği sorunu var ama belki kelime listesini değiştiririz diye düşünürken, “birlikte çalışabilirlik nedeniyle dillere göre ayrı sözlükler bulundurmak arzu edilmez” diyor.
Sonuçta tüm dünyanın İngiliz alfabesindeki 26 harfi öğrendiği, birkaç kelime daha eklemenin sorun olmayacağı varsayılıyor; ama
char Wp[2048][4] = […]içinde yeni başlayanlara uygun yaygın kelimeler değil, “WAD, BESS, MERT…” gibi şeyler var. Hatta “ORR? AGEE EGAN HAAS!!”, “GAUL FLAM! DRAB!” bile geçiyor.Bu konu bana eski bir olayı hatırlattı. Hasta olduğum bir gün, ağrımı unutmak için rastgele tabanlı aritmetik yapan oyuncak bir modül yazmıştım; kolay olduğu için CPAN’e koydum.
Modül şu: https://metacpan.org/pod/Math::Fleximal
Yaptığım önemsiz şeyler arasında bunun asla destek talebi almayacağını düşünmüştüm ama gerçekten geldi. Nedeni, onaltılık sayıları alfanümerik koda çeviren bir örnek koymuş olmamdı; birileri uzun sayıları okunabilir koda dönüştürmek için bunu aynen kullanmanın harika bir fikir olduğunu düşünmüş.
Modül düzgün çalışıyordu ama bunun bir yerlerde production’a girmiş olması oldukça şaşırtıcıydı.
Yazıda el yazısında da ayırt edilmesi zor karakterlerden kaçınmak gerektiği vurgulanıyor ama örnek tabloda 7 rakamı var. Birinin yazdığı 7 ile 1’i ayırt etmekte sayısız kez zorlandım.
7’ye yatay çizgi çekmek yardımcı olur ama birçok kişi öyle yazmadığı için, bunun 7 mi yoksa serifli bir 1 mi olduğundan emin olmanın zorlaştığı zamanlar oluyor.
İkisi bazen neredeyse ayırt edilemiyor. NATO/havacılık standart alfabesi (Alpha, Bravo, Charlie, Delta...) kullanılabilir ama müşteri kitlesi çok sıkı biçimde sınırlı değilse pek yardımcı olmaz. Bu tür kombinasyonlardan da kaçınmak daha iyi.
ID dizisi biraz uzasa bile karakterleri okuma, söyleme ve duyma becerisini en üst düzeye çıkarmak çok daha iyidir; zamandan ve sinirden çok daha fazla tasarruf sağlar.
Hangi el yazısı stilinde 1’in 7’ye benzediğini merak ediyorum. 7’nin üst yatay çizgisi bile ayırt etmek için yeterli görünür.
Hem büyük hem küçük harf kullanırsanız, bir gün büyük/küçük harf duyarsız bir üçüncü taraf sistem ya da protokol yüzünden sorun yaşamanız çok olası.
Kullanıcıların büyük/küçük harfe duyarlı ID seçmesine izin verip
iDileiddeğerlerini farklı kabul eden, buna rağmen var olmayan bir ID sorgulandığında büyük/küçük harfi yok sayarak eşleştirme yapıp yanlış veriyi döndüren ticari bir sistem gördüm.Bu hatayı bildirdiğimde “kolaylık için eklenmiş bir özellik” diye yanıt verdiler.
Nintendo Switch’te DLC seri numarası girerken belirsiz karakter tuşlarının ekran klavyesinde devre dışı olduğunu görmüştüm; oldukça iyi bir kullanıcı deneyimi olduğunu düşündüm
Bu, seri numarasının en baştan belirsiz karakterler olmadan üretildiği anlamına geliyor. Bu UX’in işletim sistemine yerleşik mi olduğunu, yoksa oynadığım oyun olan Mario + Rabbids Sparks of Hope’a özgü mü olduğunu pek bilmiyorum
Açık kaynak parola yöneticisi KeepassXC, parolaları daha okunabilir yapmak için renk kullanıyor. Büyük harf, küçük harf, rakam ve sembol gibi karakter türlerinin her biri için farklı renkler kullanıyor
Çok basit bir fikir ama özellikle rastgele parolalarda, zaten okunabilirliği yüksek bir yazı tipi kullanıyor olsanız bile çok yardımcı oluyor
Parola odaklı yazılımların, hiçbir renk ayrımı olmadan belirsiz bir yazı tipiyle karakterleri göstermesine izin vermesini anlamak zor
TV kumandası gibi bir arayüzle uzun bir parola girerken
l1|Iyi karıştırdığınızı fark ettiğiniz an o kadar sinir bozucu ki bunları kendim hariç tutuyorumSık sık karşılaştığım bir sorunu ele alan bir yazı olduğu için okumak güzeldi
Kâğıda iki aşamalı kimlik doğrulama yedek kodları yazdığım her seferinde
o/0,v/u,5/Sgibi karakterlere geldiğimde huzursuz oluyorum. Bu yüzden böyle karakterleri özellikle farklı görünsün diye biraz süsleyerek yazmaya başladım“Ses benzerliği” kısmı bana Wi‑Fi parolası seçtiğim zamanı hatırlattı. Tek bir cümleyle paylaşıldığında bile belirsiz olmayacak, ilkokul üçüncü sınıf öğrencisinin bile harflerini yazabileceği ve içinde birden fazla sessiz harf bulunan yaygın bir kelime istiyordum; sonunda “vacation”ı seçtim
5/S,0/O,8/Bgibi sorunlar çözülüyor. Gerçekte sorun olan çiftler kişinin el yazısına göre değişiyorGerçekten emin olamazsam NATO/havacılık alfabesini [1] de ekliyorum. Örneğin
Uvarsa,Udan başlayıp çapraz şekildeUniformyazıyorumSadece biraz disiplin gerekiyor. 10 yılı aşkın süredir böyle yapıyorum ve iki aşamalı kimlik doğrulama kodlarını hiç kaybetmedim
[1] NATO ve havacılık kodlarının gerçek farklarıyla ilgili kusur aramalar güvenle
/dev/nulla gönderilebilirKafa darboğaz oluyor
Böyle tartışmaları seviyorum. En ileri teknoloji ya da heyecan verici bir konu olmayabilir ama hem insanların hem de makinelerin hayatını kolaylaştırmada ciddi bir anlamı ve gücü var
Bunlar, iyi yapıldığında tam tersine kimsenin fark etmediği en iyi uygulamalar alanına da giriyor. Ayrıntılara gösterilen özen ve samimiyetin “zaten böyle olmalı” diye görülüp özel olarak takdir edilmemesi üzücü bir gerçek
Yazıdaki hatayı göstermek gerekirse,
9qg6G8B2Z5SIl170O (ariel)içinde yazı tipinin adı Ariel değil Arial. Denizkızı burada yokLinux’ta satırların çoğu aynı görünüyor
https://github.com/gajus/gajus-com/blob/main/src/blogPosts/2...
Yazım hatasını düzelttim