Sağlama Toplamı (Checksum) Nedir?

23 Şubat 2018

Sağlama toplamı, dijital ortamda veri aktarımında veya depolamada, hata tespiti ve veri bütünlüğünün sağlanması amacıyla kullanılmaktadır. Dosya bütünlüğünü algılayabilmek adına ilk veriye ekstra bir element eklemek zorunludur. Kontrol bu ekstra eklenen element üzerinden yapılır.

Bir fonksiyon veya algoritmaya argüman olarak verilen veri girdisinden sağlama toplamı üretilir. İyi bir sağlama toplamı algoritması, girdideki en ufak değişikliklerde bile bambaşka sağlama toplamı üretebilendir.

Sha-1 algoritmasının farklı girdiler üzerinde etkisiSha-1 algoritmasının farklı girdiler üzerinde etkisi

Şekilde görüldüğü gibi iki birbirine çok benzer girdi üzerinde en ufak bir değişiklik yapıldığında bile Sha-1 algoritması bambaşka bir sonuç veriyor.

Önceden hesaplanan sağlama toplamı ile veri girişinden sonra hesaplanan sağlama toplamı eşitlendiği halinde, çok yüksek bir ihtimalle verinin bozulmadığı veya yanlışlıkla değiştirilmediği düşünülebilir.

Temel Algoritmaları

En basit sağlama toplamı algoritması boyuna fazlalık denetimi (longitudinal redundancy check) olarak kabul edilir. Yaptığı işlem çok basit: Sabit bir bit sayısı kadar verileri bölüp, daha sonra tüm bu parçaların bitlerinin ayrı ayrı XOR değerlerini hesaplamak. Bu hesaplamanın sonucu (sağlama toplamı) veri girdisinin sonuna eklenir. Veri girdisinin bütünlüğü, alıcının, tüm parçaların, sağlama toplamı da dahil olmak üzere, XOR değerlerinin hesaplaması sonucunda sağlanır. Eğer alıcının elde ettiği sonuç, sıfırlardan oluşan bir parça değilse aktarım sırasında bir hata olduğu anlaşılır.

Set LRC = 0
For each byte b in the buffer
do
  LRC = LRC XOR b
Boyuna fazlalık denetimi algoritmasının basit yazımı

Bu sağlama toplamı algoritması, aktarım sırasında değişime uğramış farklı bitlerin tek sayıda olması durumunda verilerin birbirinden farklı olmasını tespit etmede sorunla karşılaşmayacaktır.

Boyuna fazlalık denetiminin basit bir örneğiBoyuna fazlalık denetiminin basit bir örneği

Ancak çift sayıda hata bulunması ve bu hataların iki ayrı parçada aynı konumda bulunması durumunda algoritma herhangi bir hata tespiti yapamayacaktır. Farklı çift sayıda bit bulunduğunda, algoritmanın hatayı bulamama olasılığı 1/n olarak hesaplanır.

Boyuna fazlalık denetimi ile tespit edilemeyen hatalara örnekBoyuna fazlalık denetimi ile tespit edilemeyen hatalara örnek

Boyuna fazlalık denetimi algoritmasının bir başka biçimi de modüler olanıdır. Bu versiyonda gönderilecek verinin tüm parçaları byte değerlere çevirilip toplanır.

22 67 21 51 25 12
Mesajın byte değerlere dönüştürülmüş parçaları

Daha sonra iki taraf için hesaplamada kullanılması belirlenen değere bölünür. Bu hesaplamadan geriye kalan değer sağlama toplamı değeridir.

198 % 64 = 6
Sağlama toplamı değeri

Hesapladığımız sağlama toplamı değeri, iletilecek verinin sonuna eklenir.

22 67 21 51 25 12 6
Aktarılan veri

Veriyi elde eden taraf aynı hesaplamaları, (sağlama toplamı değeri katılmadan) yapıp sonucunda aynı sağlama toplama değerini elde ederse, aktarım sırasında bir veri kaybı ya da değişikliği gerçekleşmediği varsayımında bulunur.

Ancak tıpki bir önceki varyasonunda olduğu gibi bu algoritmada da bazı açıklar bulunamaktadır. Yalnızca bir parçanın değerinde tutarsızlık olduğu durumda algoritma hatayı tespit etmede bir sorun yaşamazken,

21 67 21 51 25 12
Hatalı veri - Sağlama toplamı değeri 5 olarak hesaplanır ve algoritma hatayı tespit eder

birbirinin eksiğini kapatan iki farklılık bulunması durumunda algoritma farkı tespit etmede problem yaşayacaktır.

21 68 21 51 25 12
Hatalı veri - Sağlama toplamı değeri 6 olarak hesaplanır ve algoritma hatayı tespit edemez

Adler-32, Fletcher's checksum, döngüsel fazlalık denetimi (cyclic redundancy check) gibi daha sık kullanılan sağlama toplamı algoritmaları bitlerin pozisyonlarını da ele alarak yukarıda bahsedilen algoritmaların sorunlarına çözüm sunarken, sağlama toplamı kontrolünde kaynak kullanımını da birçok durum için arttıracaktır.