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.
Ş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
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.
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 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
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
Hesapladığımız sağlama toplamı değeri, iletilecek verinin sonuna eklenir.
22 67 21 51 25 12 6
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
birbirinin eksiğini kapatan iki farklılık bulunması durumunda algoritma farkı tespit etmede problem yaşayacaktır.
21 68 21 51 25 12
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.