Checksum'lar nasıl çalışır
Kart numaraları, IBAN'lar, vergi kimlik numaraları ve kripto adreslerinin hepsinde diğer rakamlardan hesaplanan gizli bir veya iki ekstra basamak bulunur. Bir karakter yanlış yazıldığında aritmetik artık tutmaz — işte bu sayede bir doğrulayıcı, bankaya veya blok zincire sormadan anında ve çevrimdışı olarak yazım hatasını tespit edebilir.
Checksum nedir?
Bir checksum (veya kontrol basamağı), kasıtlı olarak oluşturulan fazlalıktır. Bir sayı verildiğinde, basamaklarından bir veya daha fazlası serbestçe seçilmez: bunlar kalan rakamlar üzerinden belirli bir yöntemle hesaplanır. Yöntemi bilen herkes daha sonra bu basamakları yeniden hesaplayıp karşılaştırabilir. Eşleşirlerse sayı içsel olarak tutarlıdır. Eşleşmezlerse bir yazım hatası, yanlış okuma veya bozulma meydana gelmiştir.
Checksum'un vaat ettiği tek şey budur. Hesabın var olup olmadığı, kime ait olduğu veya ne içerdiği hakkında hiçbir bilgi vermez — bu sitedeki her doğrulayıcının defalarca vurguladığı bir noktadır, çünkü bu ikisi kolayca karıştırılabilir.
Uygulamalı örnek 1 — Luhn, kart numarası algoritması
Luhn algoritması Visa, Mastercard ve diğer çoğu ödeme kartında kullanılır. Klasik örnek olarak 7992 7398 713 alalım. En sağdaki rakamdan başlayarak her ikinci rakamı ikiye katlayın; ikiye katlama sonucu iki basamaklı bir sayı çıkarsa bu basamakları toplayın. Ardından tüm değerleri toplayın.
| Rakam | Sağdan konum | İkiye katlandı mı? | Buna denk gelir |
|---|---|---|---|
3 | Kontrol basamağı | — | 3 |
1 | Sağdan 2. basamak | 1 × 2 = 2 | 2 |
7 | 3. basamak | — | 7 |
8 | 4. basamak | 8 × 2 = 16 → 1 + 6 | 7 |
9 | 5. basamak | — | 9 |
3 | 6. basamak | 3 × 2 = 6 | 6 |
7 | 7. basamak | — | 7 |
2 | 8. basamak | 2 × 2 = 4 | 4 |
9 | 9. basamak | — | 9 |
9 | 10. basamak | 9 × 2 = 18 → 1 + 8 | 9 |
7 | 11. | — | 7 |
Sağdaki sütun toplamı 3 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 7 = 70 eder. Yetmiş ona bölünebilir, bu yüzden sayı geçerlidir. Herhangi bir rakamı değiştirirseniz toplam onun katı olmaktan çıkar. Bunu Kredi Kartı Doğrulayıcı üzerinde deneyin — cihazınızda tam olarak bu hesaplamaları yapar.
Uygulamalı örnek 2 — ağırlıklı toplam (ISBN-10)
Birçok ulusal kimlik numarası ağırlıklı toplam yöntemini kullanır: her rakamı belirli bir ağırlıkla çarpın, toplayın ve kalanı kontrol edin. ISBN-10 bunun en net örneğidir. 0-306-40615-2 için ağırlıklar 10’dan 1’e doğru sıralanır:
0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 + 2×1 = 132
132 tam olarak 11 × 12’dir, bu yüzden 11 ile modülü sonucu sıfırdır ve ISBN geçerlidir. Brezilya'nın CPF'si, Polonya'nın PESEL'i ve düzinelerce diğer tanımlayıcı kendi ağırlıkları ve modülleriyle aynı yapıyı izler; bu yüzden tek bir Toplu Kimlik Doğrulayıcı bir saniyede binlercesini kontrol edebilir.
Uygulamalı örnek 3 — IBAN ve mod 97
Uluslararası banka hesap numaraları iki kontrol basamağına sahip daha güçlü bir sistem olan ISO 7064 mod 97-10'u kullanır. Standart örnek olarak GB82 WEST 1234 5698 7654 32’yi ele alalım:
- Ülkeye göre uzunluğu kontrol edin: Birleşik Krallık IBAN'ı 22 karakterdir. ✓
- İlk dört karakteri sona taşıyın:
WEST12345698765432GB82. - Her harfi iki basamakla değiştirin (A = 10 … Z = 35): W→32, E→14, S→28, T→29, G→16, B→11; böylece
3214282912345698765432161182elde edilir. - Bu sayıyı 97'ye bölün. Kalan kesinlikle 1 olmalıdır — ve öyledir.
97 asal bir sayı olduğu ve iki basamaklı bir değişimden daha büyük olduğu için mod 97 her tek karakterli hatayı ve her yer değiştirmeyi tespit eder; rastgele oluşturulan her 97 dizeden yalnızca biri şans eseri geçerli olur. IBAN Doğrulayıcı bu katmanların her birinin geçip geçmediğini gösterir.
Kripto adresleri: hash'lerden oluşturulan kontrol toplamları
Bitcoin ve Ethereum adresleri standartları yükseltir; çünkü buradaki bir yazım hatası parayı kalıcı olarak hiç kimseye göndermez. Eski tip Bitcoin adresleri (1…, 3…) Base58Check kullanır: adres içeriği iki kez SHA-256'dan geçirilir ve sonucun ilk dört baytı kontrol toplamı olarak eklenir. Tek bir yanlış karakter hash'i tamamen değiştirir; bu yüzden bir yazım hatasının fark edilmeme olasılığı yaklaşık dört milyarda birdir. Daha yeni bc1… adresleri ise Bech32 veya Bech32m kullanır; bu hata düzeltme kodları dört karaktere kadar olan hataların tespit edilmesini garanti eder. Ethereum'un EIP-55 standardı kontrol toplamını büyük ve küçük harflerin deseninde gizler.
Bitcoin Adres Doğrulayıcı ve Ethereum Adres Doğrulayıcı, bu algoritmaları tarayıcıda uygular ve her sayfa yüklenişinde resmi test vektörleriyle kendilerini doğrular.
Algoritma özetleri
| Algoritma | Kullanıldığı yerler | Tespit edilen hatalar | Rastgele bir hatanın fark edilmeme olasılığı |
|---|---|---|---|
| Luhn (mod 10) | Kredi ve banka kartları, IMEI, birçok ulusal kimlik kartı | Her bir basamak hatası ve çoğu bitişik karakter yer değiştirmesi | Yaklaşık 10'da 1 |
| ISO 7064 mod 97-10 | IBAN, bazı vergi ve şirket numaraları | Her türlü hata ve her türlü yer değiştirme | Yaklaşık olarak 97'de 1 |
| Ağırlıklı toplam, mod 10 veya 11 | ISBN-10, Brezilya CPF, Polonya PESEL ve birçok kimlik numarası | Tekil hatalar ve çoğu yer değiştirme | Yaklaşık olarak 10'da 1 veya 11'de 1 |
| Base58Check (çift SHA-256, 4 bayt) | Bitcoin eski adresleri (1…, 3…) | Herhangi bir yazım hatası, neredeyse kesin olarak tespit edilir | Yaklaşık olarak 4 milyar'da 1 |
| Bech32 / Bech32m (BCH kodu) | Bitcoin SegWit ve Taproot adresleri (bc1…) | Garanti edilir: en fazla 4 karakteri etkileyen herhangi bir hata | Milyarda 1'den daha az |
| EIP-55 (keccak-256 büyük/küçük harf düzenlemesi) | Ethereum adresleri | Yazım hataları, büyük ve küçük harf deseni yoluyla oluşur | Karışık büyük/küçük harfli giriş için çok düşüktür |
Neden bir doğrulayıcı cihazınızda çalışmalı?
Yukarıdaki her şey zaten sahip olduğunuz rakamlar üzerinde yapılan aritmetik işlemlerdir. Bir doğrulayıcının kart numarası, vergi kimlik numarası veya cüzdan adresini bir sunucuya göndermesi için hiçbir neden yoktur — hatta bunu yapmaması için çok iyi bir neden vardır. Bu sitedeki tüm doğrulayıcılar yerel olarak çalışır; çevrimdışı araçlar listesi bunları gruplandırır ve bir aracın verilerinizi yükleyip yüklemeyeceğini kontrol etme rehberimiz, herhangi bir site için yirmi saniyede bunu doğrulamanın yolunu gösterir.
SSS
Geçerli bir kontrol toplamı, numaranın gerçek veya aktif olduğu anlamına mı gelir?
Hayır. Bir kontrol toplamı yalnızca rakamların içsel olarak tutarlı olduğunu — yani numaranın var olabileceğini kanıtlar. Hesabın açık olup olmadığını, kime ait olduğunu veya bakiyesinin ne olduğunu söyleyemez. Bu sitedeki tüm doğrulayıcılar sayfalarında bunu belirtir, çünkü bu ayrım önemlidir.
Yanlış bir numaranın yine de geçerli olma ihtimali nedir?
Bu durum kullanılan yönteme bağlıdır. Tek bir mod-10 kontrol basamağı yaklaşık olarak 10’da 1 rastgele hatanın geçmesine izin verir; IBAN’ın mod 97’si yaklaşık olarak 97’de 1’inin geçmesine izin verir; 4 baytlık Base58Check kontrol toplamı ise yaklaşık olarak 4 milyar’da 1’inin geçmesine izin verir. Önemli olan nokta, yaygın insan hataları olan yanlış bir rakam veya yer değiştmiş iki rakamın hepsinde tespit edilebilmesidir.
Neden bazı tanımlayıcılarda hiç kontrol toplamı yoktur?
Daha eski veya daha basit yöntemler çevrimdışı kontrol yerine bir kayıt defterinde aranmak üzere tasarlanmıştır ve bazı numaralandırma sistemleri bu uygulamadan önce ortaya çıkmıştır. Bu durumlar için doğrulayıcı yalnızca uzunluğu ve biçimi kontrol edebilir.
Kart veya kimlik numaramı bir doğrulayıcıya yapıştırmak güvenli midir?
Yalnızca doğrulama cihazınızda çalışıyorsa. Kontrol toplamı, zaten sahip olduğunuz rakamlar üzerinde yapılan bir aritmetik işlemdir; bu yüzden bir doğrulayıcının bunları bir sunucuya göndermesi için meşru bir neden yoktur. Bir aracın verilerinizi yükleyip yüklemeyeceğini kontrol etmek için rehberimizde anlatılan uçak modu testiyle aracın yerel olarak çalıştığından emin olabilirsiniz.
Kontrol toplamı, hash ve şifreleme arasındaki fark nedir?
Kontrol toplamı, kazara yapılan yazım hatalarını tespit etmek için tasarlanmış kısa bir kontrol basamağıdır. Kriptografik hash, kasıtlı bir değişikliğin bile tespit edilebilmesi ve orijinal verinin yeniden elde edilememesi için tasarlanmış uzun bir parmak izidir. Şifreleme, verileri yalnızca bir anahtarla okunabilecek hale getirir. Base58Check kontrol toplamını oluşturmak için hash kullanır; bu yüzden kazara yanıltmak çok zordur.