Yazan : Gökay Bekşen
HAVAL 15 farklı güvenlik seviyesini destekleyen tek yollu bir hash algoritmasıdır. 1992 yılında tasarlanmıştır. Kaynak kodları 1997 yılının nisan ayında yenilenmiştir. Paulo Barreto tarafından keşfedilen bu kod kendi içinde bulunan eski versiyonlarına hata kontrolü yapabiliyor. MD4 ve MD5 gibi diğer çiftlerinin aksine hiçbir saldırı yöntemi(Den Boer ve Bosselaers) HAVAL yöntemine tepki vermez. Bu yöntemler MD4 veya MD5 algoritmalarına tamamını yada bir kısmını kırmayı başarmıştır.
HAVAL genel olarak bahsetmek istersek 1646 değişken uzunluğa sahiptir. MD5 algoritmasının geliştirilmiş versiyonudur. HAVAL mesajları 1024 bitlik bloklar halinde işler ki bu da MD5 in iki katıdır. Sekiz tane 32 bitlik zincir değişkene sahiptir ki yine MD5 in iki katıdır. Birden fazla turlarla hash oluşturabilir ki her tur kendi içinde 16 adıma sahiptir. Böylelikle 128, 160, 192, 224 ve 256 bit uzunluğunda hash türetebilir.
HAVAL, MD5 algoritmasının basit lineer olmayan fonksiyonlarını 7 değişkenli hayli yüksek lineer olmayan fonksiyonlarla değiştirmiştir. Her tur tek bir fonksiyon kullanır ancak turların içindeki her adım girişlere uygulanan farklı permütasyonlara sahiptir. Birinci tur haricindeki turlarda yeni mesajlar elde edilir ve her adım mesaja farklı bir içerik ekler. Algoritma iki rotasyona sahiptir. Çekirdek algoritma aşağıdaki gibidir :
TEMP = (f(j,A,B,C,D,E,F,G) <<< 7) + (H <<< 11) + M[i][r (j)] + K(j)
H = G; G = F; F = E; E = D; D = C; C = B; B = A; A = TEMP
Biraz daha ayrıntıya girmek istersek HAVAL isteğe bağlı uzunluktaki bir mesajı belirli bir değer uzunluğuna sıkıştıran, tek yollu bir hash algoritmasıdır. Çıkış değeri orijinal mesajın parmak izi gibidir. HAVAL geçiş sayılarını kontrol eden 1024 bitlik bir mesaj bloğuna sahiptir. Bir mesaj bloğu 3, 4, yada 5 geçişe maruz kalabilir. Araştırmalar 3 turluk bir geçişte HAVAL’ in MD5 e göre %60 hızlı, 4 turluk geçişe göre %15 hızlı ve 5 turluk geçişe göre en az MD5 kadar hızlı olduğunu gösteriyor.
HAVAL, MD ailesinin dizaynının arkasında bazı farklı kaideler kullanır. Bununla birlikte HAVAL bazı Boolean özelliklerini de kendi içinde barındırır. Bu özellikler :
0-1 seviyesinde dengelidir.
Hayli yüksek seviyede lineer olmayan fonksiyonlardır.
SAC (Strict Avalanche Criterion) tatmin edilir.
Başka bir yapıya koordinatları değiştirilerek veya eklenerek dönüştürülemezler
Lineer fonksiyonlarla yada çıkışlarla direkt olarak bir bağa sahip değildir.
YASTIKLAMA
HAVAL de yastıklamanın iki amacı vardır. Birincisi mesaj uzunluğunu 1024 ün katı yapmak ve mesajın orijinal mesajı içermesi. HAVAL yastıklanmamış mesajlar için 64 bitlik mesaj uzunluğu alanı oluşturur. Böylelikle 2^64 -1 uzunluğundaki bitlere kadar mesaj kabul edilir. Ayrıca 10 bit genişliğinde bir alanda tasnif etmek için boş tutulur. Bununla birlikte 3 er bitlik versiyon ve tur sayısını belirtecek boş alanlarda belirtilir ki 128, 160…256 bitlik tasnifler, 3, 4, 5 zamanlı turlar belirlenir.
H ALGORİTMASINI GÜNCELLEME
Yazının başında H algoritmasını şeklen göstermiştim. Bu algoritmayı güncellemek için daha önce boş bıraktığımız tur sayısını belirlediğimiz bitlere değer veririz. H1, H2, H3, H4, H5 olursa 5 turluk bir geçiş vardır. Şimdi H girişini (Din , B) olarak düşünün. Burada Din 8 kelimelik bir string, B ise 32 kelimelik bir string olsun. Dout ise H girişinin 8 kelimelik çıkışı olsun. Böylelikle H algoritmasının işlenmesi aşağıdaki gibi belirtilebilir olsun :
E0 = Din;
E1 = H1(E0,B);
E2 = H2(E1,B);
E3 = H3(E2,B);
E4 = H4(E3,B); (if PASS=4, 5)
E5 = H5(E4,B); (if PASS=5)
Dout =
E3 + E0 if PASS=3
E4 + E0 if PASS=4
E5 + E0 if PASS=5
Beş geçişin her biri 32 turluk işlemlere sahiptir ve her tur B den farklı bir kelime türetir. Bununla birlikte her turda farklı bir Boolean işlevi kullanılır bu şekilde kelimeler üzerinde bit bazında işlemler yapılabilir. H1, H2, H3, H4 ve H5 tarafından kullanılan fonksiyonlar :
f1(x6, x5, x4, x3, x2, x1, x0) = x1x4 ⊕ x2x5 ⊕ x3x6 ⊕ x0x1 ⊕ x0
f2(x6, x5, x4, x3, x2, x1, x0) = x1x2x3 ⊕ x2x4x5 ⊕ x1x2 ⊕ x1x4 ⊕
x2x6 ⊕ x3x5 ⊕ x4x5 ⊕ x0x2 ⊕ x0
f3(x6, x5, x4, x3, x2, x1, x0) = x1x2x3 ⊕ x1x4 ⊕ x2x5 ⊕ x3x6 ⊕ x0x3 ⊕ x0
f4(x6, x5, x4, x3, x2, x1, x0) = x1x2x3 ⊕ x2x4x5 ⊕ x3x4x6 ⊕
x1x4 ⊕ x2x6 ⊕ x3x4 ⊕ x3x5 ⊕
x3x6 ⊕ x4x5 ⊕ x4x6 ⊕ x0x4 ⊕ x0
f5(x6, x5, x4, x3, x2, x1, x0) = x1x4 ⊕ x2x5 ⊕ x3x6 ⊕ x0x1x2x3 ⊕ x0x5 ⊕ x0
BOOLEAN Fonksiyonun hash algoritmaları tarafından kullanımı :
MD4 MD5 SHS
1 xy ⊕ xz ⊕ z xy ⊕ xz ⊕ z xy ⊕ xz ⊕ z
2 xy ⊕ xz ⊕ yz xz ⊕ yz ⊕ y x ⊕ y ⊕ z
3 x ⊕ y ⊕ z x ⊕ y ⊕ z xy ⊕ xz ⊕ yz
4 y ⊕ z ⊕ xz ⊕ 1 x ⊕ y ⊕ z
SONUÇ OLARAK
HAVAL herhangi uzunluktaki bir mesajı 128, 160, 192, 224 ve 256 bitlik mesajlara dönüştürebilir. Ayrıca kendi bünyesinde ki esneklikten kaynaklanan, mesaj bloğunun geçeceği tur sayısını kendimiz belirleyebiliriz. Daha önceden bahsettiğimiz beş tane BOOLEAN fonksiyonuna yeterli dikkat verildiği için bu algoritma çok esnek ve güvenli bir algoritmadır.
gökay kelimesinin haval hash algoritmasında bit ve round kriterlerine göre hashlenmesi
128, 3 : 288478E5F01DDF8969AD8CAFE2405574
128, 4 :BAC0B0F3A99E3343F2F8E41CBECA5CB3
128, 5 :C3A99F30474D2A52F76EE47C4172D5F0
160, 3 :24140B071A0A311BDB0154E8B36F137583BF376D
160, 4 :E27DC6035F3A3CE67129DD840B8EE388A84F4C90
160, 5 :A3954E608FFA6B7B992948E2B063D4042D8CF699
192, 3 :79554605E0A5BD2C11A98B9B6414050CC0FE642227B3A4C6
192, 4 :7DB892912755C84A19806C77263067BC5F22D3F68CE5C40C
192, 5 :9650F2E16AFC9273D6150C4116A9EE23617C4CD43E18AD12
224, 3 :FE3061991FED054F1B4C61E02C7D850F0EFFA58F46F98532046E5B5A
224, 4 :0D24A535E623D6A745F93D838683F2D1AF617E45145FCA7FC3356586
224, 5 :8F756464D45F377B454CF6B529A3E42A451BAB318285D629E4FF1EE7
256, 3 :57CEBE76C257C1386EECBEDE4C7F1176C786401482F0A139AA4410EE177A215E
256, 4 :BFD4560B5B0ADDAA7B91CA8EE310C81BB58A2EA62CA5CA3DB8A4369411B518D1
256, 5 :2ECDB9722A98A866FE68CE02387EA8A7B63F54DC5214BCDE97B83B18B9E2A78D
The quick brown fox jumps over the lazy dog cümlesinin C# diliyle özel olarak HAVAL hash algoritması içinde dönüştürülme programını yazan kod :
s = “The quick brown fox jumps over the lazy dog”;
// Hash using HAVAL
// There are two additional properties relevant to HAVAL:
// HavalRounds, and KeyLength.
// HavalRounds can have values of 3, 4, or 5.
// KeyLength can have values of 128, 160, 192, 224, or 256
crypt.HashAlgorithm = “haval”;
crypt.HavalRounds = 5;
crypt.KeyLength = 256;
hash = crypt.HashStringENC(s);
textBox1.Text += “Haval:” + “rn”;
textBox1.Refresh();
textBox1.Text += hash + “rn”;
textBox1.Refresh();
// Hash for “The quick brown fox jumps over the lazy dog”
// Haval:
// B89C551CDFE2E06DBD4CEA2BE1BC7D557416C58EBB4D07CBC94E49F710C55BE4
Bu yazınızla diğer yazınız(HAVAL özetleme algoritması) aynı.