Döngüsel artıklık denetimi

Döngüsel artıklık denetimi (CRC: Cyclic Redundancy Check), çoğunlukla sayısal şebekelerde ve depolama cihazlarında kullanılan ve ham veride yapılan hatalı değişimleri algılayan, uygulaması kolay ve güvenliği güçlü bir hata bulma yöntemidir.

CRC'ler, denetim (veri doğrulama) değerinde (enformasyon eklenmeden gönderilen) bir artıklık ve döngüsel kodların temelini oluşturan bir algoritma olduğu için bu adla adlandırılır. İkili donanımlarda uygulaması basit, matematiksel analizi kolay ve bilhassa iletim kanallarında gürültünün neden olduğu genel hataları algılamada iyi olduğu için CRC'lerin kullanımı yaygındır. Çünkü denetim değeri sabit bir uzunluğa sahiptir. Bunu oluşturan fonksiyon nadiren bir hash fonksiyonu olarak kullanılır.

CRC'ler ileri hata düzeltme yöntemindeki döngüsel kodun temelini oluştururlar. Sabit uzunlukta bir denetleme değeri ekleyerek mesajların kodunu çözen sistematik döngüsel kodları kullanarak, telekomünikasyon şebekelerinde hata düzeltme ilk olarak 1961'de W. Wesley Peterson tarafından yapılmıştır. Döngüsel kodların yalnızca uygulaması kolay değil, aynı zamanda özellikle patlama hatasının düzeltilmesi için çok idealdir. Patlama hataları, manyetik ve optik veri depolama cihazlarındaki kanallar gibi çoğu iletişim kanalında yaygın bulunan hatalardır. Bir n bitlik CRC'nin tipik uygulaması, rastgele uzunluklu bir veri bloğunun, n bitten uzun olmayan herhangi tek bir patlama hatasını algılamasıdır. Patlama hatalarının tümünün uzunluğu 1 - 2-n ifadesinin bir kesri olarak algılanır. Gönderici her çerçeveye n bitlik FCS (Frame Check Squence) dizi ekler. CRC veri iletiminde kullanılan en yaygın hata denetimi yöntemidir. Az bir ek bilgi ile daha fazla hata tespiti sağlanır.

Veri iletirken ya da saklarken ilettiğimiz/sakladığımız veri ile alınan verinin aynı olduğundan emin olmamız gerekir. Veriler iletim hattında bozunuma uğrarsa bunun fark edilmesi ve verilerin yeniden iletilmesi gerekir. CRC, bu amaçla kullanılır.

Bir CRC kodunu belirlemek için, sözde polinom kod tanımlamak gerekir. Bu polinomdaki, bölme algoritmasında, bölünen, bölen, bölüm ve kalan bulunur. Burada önemli olan polinom katsayıları, sonlu alanın aritmetiğine uygun olarak hesaplanmasıdır. Böylece toplama işlemi, (dijitler (rakamlar) arasında taşıma olmayan) bitsel paralelliği daima gerçekleştirebilir. Kalanın uzunluğu, polinom kod uzunluğundan daima daha küçüktür. Böylece sonucun hangi uzunlukta olacağı belirlenir.

En basit hata düzeltme sistemi, eşlik biti, 1 bitlik CRC'nin durumu ile ilgilidir. CRC-1 olarak adlandırılan ve iki terimli olan x + 1 polinom kodunu kullanır.

CRC'ler, özellikle iletişim kanallarında sıkça rastlanan hata türlerine karşı koruma sağlamak amacıyla tasarlanır. Teslim edilen mesajların tutarlılığını hızlı ve güvenli biçimde gerçekleştirebilirler. Fakat veride istenerek yapılan değişimlere karşı uygun değillerdir.

veride istenerek yapılan değişimlere karşı birbirlerini koruyamazlar. Bu tür saldırılara karşı korunmak için, (temelinde kriptografik özet fonksiyonu bulunan) mesaj doğrulama kodu veya dijital imza gibi kriptografik kimlik denetimi mekanizmaları kullanılmalıdır.

Sonuçta CRC bir dizi şifresi (veya blok şifreleme kipi) ile şifrelenmiş olsa bile, şifreleme anahtarını bilmeye gerek kalmaksızın hem mesaj hem de ilgili CRC ele geçirilebilir. Bu, WEP iletişim kuralının bilenen bir kusurudur.

n bitlik ikili CRC'yi hesaplamak için, bir satırdaki girişi ifade eden bitler ve (polinom olarak adlandırılan) CRC'nin bölenini ifade eden (n+1) bitlik dizinin konumu satırın sol alt köşesindedir.

Aşağıdaki örnekte 14 bitlik mesajın kodunu 3 bitlik CRC ve x³+x+1 polinomu ile çözeceğiz. 3.dereceden bir polinomdur ve dört katsayıya sahiptir. Bu polinom ikili sayı sisteminde katsayılarla şöyle yazılır; 1x³+0x²+1x+1. Bu durumda katsayılar; 1, 0, 1 ve 1'dir. Hesaplama sonucu 3 bit uzunluğundadır.

Bölenin en solundaki bit 1 olduğundan dolayı her bir girişte en soldaki bölüm biti sıfırlanır. Yalnızca giriş satırının (bölümün) en sağındaki n bit sıfırlanamadığında bu işlem sonlandırılır. n bit, bölme adımındaki kalandır. Bunlar aynı zamanda CRC fonksiyonunun değeri olur.

Alınan bir mesajın geçerliliği, yukarıdaki hesaplama tekrar gerçekleştirilerek kolayca doğrulanabilir. Burada sıfırlar yerine denetleme değeri konur. Eğer hata algılanmazsa kalan sıfıra eşitlenir.

CRC veri bitlerini polinom kodlar olarak ele alır. Veriler gönderici tarafından çerçevenin içeriğine göre her çerçevenin sonuna eklenecek bir denetim seti(check digits) hesaplanarak gönderilir. Alıcı tarafı veri üzerinde aynı denetim işlemlerini gerçekleştirerek aldığı veride hata olup olmadığını kontrol eder. İki sonuç uymuyorsa bu hata olduğunu gösterir. n bitlik FCS için n+1 bit bir P polinomu kullanılır. Amaç FCS'yi Q/P sıfır olacak şekilde elde etmektir.

CRC oluşturulması ilk olarak veri içeriği 2n ile çarpılır. Bu verinin sonuna n adet 0 ekleme demektir.İkinci adımda P üreteç polinomu ile bölünmesi üçüncü adımda kalanın FCS olarak iletilmesidir.

CRC kontrolü ise ilk olarak veri çerçevesi alınır. İkinci adımda P üreteç polinomuna bölünür. Üçüncü adımda kalan kontrol edilir. Kalan 0 ise veri doğru aksi halde hata oluşmuştur.

Yani, bir hatalı iletim söz konusu olduğu halde bu hata fark edilememiştir. Ama verilerin P ve P’nin katları kadar bozulma olasılığı hayli düşüktür. Bu yüzden hataların büyük bölümü CRC yöntemi ile saptanabilir.

Gönderi alıcıya P(x) yerine XP.P(x) +R(x) polinomu göndersin.Alıcı kendisine gelen bit dizisini G(x)’e böler.Bölme sonunda kalan olmamaktadır.Alıcı hata yoksa bit dizisinin en sonundaki P adet biti atarak bilgiyi elde eder.

Bu bölme benzeri işlemde, iyi hata düzeltme özelliklerini garanti altına almak için nasıl bir bölen seçilmesi gerektiğinde matematik analizin önemi açığa çıkar. Bu analizde, bit dizisindeki rakamlar, x—değişkenine sahip bir polinomun katsayılarıdır. Bunlar, bilinen sayılar yerine, daha çok GF(2) sonlu alanının elemanlarıdır. İkili polinomlar kümesi, bir matematik halkasıdır.

Polinom kodun seçilmesi, CRC algoritmasını uygulamanın en önemli kısmıdır. Hata düzeltme kabiliyetini azami yapacak ve aynı anda çakışma ihtimalini asgari seviyeye indirecek şekilde polinom seçilmelidir.

Polinomun uzunluğu (herhangi bir terimin en büyük derecesi (üssü) +1) en önemli özelliğidir. Çünkü bu hesaplanan denetleme değerinin uzunluğunu doğrudan etkiler.

Korunacak azami toprak blok uzunluğuna (veri + CRC bitleri), belirlenen hata düzeltme özelliklerine ve CRC uygulamasındaki kaynak türlerine ve hatta istenen performansa göre CRC polinomunu tasarlanır. En büyük yanılgı, "en iyi" CRC polinomlarının ya indirgenemez polinom ya da indirgenemez polinomların 1 + x faktörü ile çarpılmasıyla türetilebileceğidir. Gerçekte, yukarıda bahsedilen tüm faktörler, polinom seçme yöntemi olabilir ve indirgenebilir polinoma yol gösterebilir. Fakat indirgenebilir polinom seçme, bölüm halkasının sıfır böleni bulunduğundan dolayı, hataları azaltmada belirli bir orana sahiptir.