Yazan : Şefik İlkin Serengil

SHA özetleme fonksiyonları, NSA tarafından tasarlanmış ve NIST tarafından Birleşik Devletler Federal Bilgi İşleme Standardı olarak yayınlanmış bir dizi kriptografik özetleme fonksiyonudur. SHA, Secure Hash Algorithm yani Güvenli Özetleme Algoritması anlamına gelmektedir. Bugün SHA-0, SHA-1, SHA-2 olmak üzere üç farklı yapıda özetleme algoritması mevcuttur. SHA-3, NIST tarafından organize edilen halka açık bir yarışma ile 2012 yılında seçilecektir.

SHA-1

SHA-1, maksimum (264-1) bitlik mesajdan 160 bit’lik özetleme değeri üretir.

Türkiye’deki dijital imza uygulamaları, sertifikalar ve kök sertifikalar RSA açık anahtar kripto sistemi ve SHA-1 özetleme fonksiyonu üzerine kurulmuştur.

Şekil 1.1 SHA-1 Ailesi Sıkıştırma Fonksiyonundaki Bir İterasyon’da Gerçekleşen İşlem

A, B, C, D ve E 32’şer bitlik bilgi parçalardır.

F, başkalaştırmaya yol açacak lineer olmayan bir fonksiyon.


n,
n bitlik sola dairesel kaydırma işlemini,

Wt, t. turdaki genişletilmiş mesaj bilgisini,

Kt, t. turdaki tur sabitini,


mod 232 deki toplama işlemini simgelemektedir.

Yukarıda bahsi geçen işlemleri daha detaylı bir şekilde inceleyecek olursak

F fonksiyonu,

F = ( B AND C ) OR ( B’ AND D )

F = B XOR C XOR D

F = ( B AND C ) OR ( B AND D ) OR ( C AND D )

F = B XOR C XOR D

Şeklinde aldığı 3 ayrı girdi değerinden bir çıktı üreten bir fonksiyondur. F fonksiyonunun yukarıda belirtilenlerden fonksiyonlara alternatif başka bir fonksiyon olarakta seçilmesi mümkündür. Pseudocode’da yukarıda belirtilen 4 ayrı f fonksiyonu 80 tur’a homojen olarak dağıtılacaktır.

Kt tur 80 tur’da homojen olarak 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, OxCA62C1D6 değerlerini almaktadır. Bu değerler 2, 3, 5 ve 10 ‘un karekök değerleridir.

Pseudocode

Başlangıç durumundaki değişkenlerin ataması yapılır.

h0 = 0x67452301;

h1 = 0xEFCDAB89;

h2 = 0x98BADCFE;

h3 = 0x10325476;

h4 = 0xC3D2E1F0;

h0, h1, h2 ve h3 ilk değerleri MD5 özetleme algoritmasında kullanılan değerlerle aynıdır. h4’te benzer şekilde üretilir.

Ön işleme aşaması

Özet değeri üretilecek mesaj 512 bit’in katı olmadır. Şayet değilse uygulanacak padding işlemi ile önce mesaj 512 bit’in katı olacak hale getirilir. Şifrelenme işlemi daha sonra gerçekleşir.

Örneğin, 64 bitlik bir mesajın özeti çıkarılmak istenilirse;

64 = -448 ( mod 512 ) olacağından orijinal mesajın ardına 448 bit veri ekleme işlemi gerçekleşir. Padding işlemi orijinal verinin ardından gelen ilk bit yerine 1 geri kalanlar 0 olacak şekilde gerçekleşir.

Mesaj 512’nin katı haline getirildikten sonra 512 bitlik bloklara bölünür.

Her blok, 32 bitlik 16 ayrı parçaya ayrılır.

32 bitlik 16 parça, 32 bitlik 80 parça olacak şekilde genişletilir.

for(int i=16;i<80;i++)

{

w[i] = w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16];

w[i] = (( w[i] << 1 ) | ( w[i] >> 31 ) & 0xFFFFFFFF ); // 1 bitlik dairesel sola kaydırma işlemi

}

Bu blok için başlangıç özet değerlerin ataması yapılır.

a = h0;

b = h1;

c = h2;

d = h3;

e = h4;

Ana Döngü

for(int i=0;i<80;i++)

{

if(i>=0 && i<=19)

{

f = ( B & C ) | (B’ & D);

k = 0x5A827999;

}

if(i>=20 && i<=39)

{

f = B ^ C ^ D;

k = 0x6ED9EBA1;

}

if(i>=40 && i<=59)

{

f = (B & C) | (B & D) | (C & D);

k = 0x8F1BBCDC;

}

if(i>=60 && i<=79)

{

f = B ^ C ^ D;

k = 0xCA62C1D6;

}


temp = (( a<<5 ) | (a>>27))&0xFFFFFFFF;

temp = temp + f + e + k + w[i];


E = D;

D = C;

C = ((B << 30) | (B>>2))&OxFFFFFFFF;

B = A;

A = temp;


h0 = h0 + A;

h1 = h1 + B;

h2 = h2 + C;

h3 = h3 + D;

h4 = h4 + E;


}

System.out.println(h0+“”+h1+“”+h2+“”+h3+“”+h4);

2005 yılında SHA-1 özetleme fonksiyonun muhtemel matematiksel bir zayıflığının olduğu duyurulmuştur. Prensip olarak Özetleme Fonksiyonlarının çakışmalara karşı güveliği özetleme değerinin bit uzunluğunun yarısı kadardır. Örneğin, SHA-1 ailesine mensup bir özetleme fonksiyonunun güvenliğini özetleme değeri olan 160 bit’in yarısı kadar olan 80 bit kadardır. Başka bir deyişle, muhtemel bir çakışmayı tespit etmek için yapılması gereken denemelerin sayısı 280 kadar olmalıdır. Ancak, 2005 yılında Xiaoyun Wang, Yiqun Lisa Yin ve Hongbo Yu isimli üç Çinli bilim adamı yapılması gereken denemelerin teorik olarak 263 ‘ten daha iyi olmadığını belirtmiştir.

NIST her ne kadar 2007 Kasım’da yayınladığı bir bildiride SHA-1 özetleme algoritması üzerinde henüz bir çakışma bulunamadığını belirtse de 2006 Mart’ta yayınladığı bir bildiride SHA-1 özetleme fonksiyonunun 2010 yılından sonra kullanılmaması önerilmiştir.

Referanslar

[1] SHA hash functions, http://en.wikipedia.org/wiki/SHA_hash_functions

[2] FIPS 180-1 – Secure Hash Standart, http://www.itl.nist.gov/fipspubs/fip180-1.htm

[3] Çetin Kaya Koç, 2009. 2009 yılı hash (Özet) fonksiyonları yılı olacak (1), BT Haber, 702

[4] Çetin Kaya Koç, 2009. SHA-1 özetleme fonksiyonu hakkında, BT Haber, 569

[5] Çetin Kaya Koç, 2009. Özet (Hash) fonksiyonları üzerine, BT Haber, 567

Yorumlar

  1. muratkan

    bu kod yapısını nasıl okunabilir yaparım bilgi verirseniz sevinirim

    import java.io.PrintStream;

    public final class canakOkeyServer
    {
    public static void main(String[] arg0)
    {
    System.out.println(e.jdMethod_long("¾430=35p8522,p#<3706?n36x^uX"));

    new s(arg0).start(); 16501; -12034;

    System.out.println(e.jdMethod_long("0335-!03,2404dEc07205=Z'27+31&<0132230'16$340O9A311321232I.-9"4t2033B70334H2405213Y42735#9

  2. Şadi Evren ŞEKER Article Author

    Sanırım kodunuzu java decompiler ile ürettiniz. Bu durumda genelde isim olarak jdMethod ön eki kullanılıyor. Bahsettiğiniz koddaki karışık olarak yazılmış karakterler ise bu karakterlerin ne olduğunu ve ne ile şifrelendiğini bilmeniz gerekir.

    Yazıyı SHA algoritmasının altına açmışsınız. Şayet SHA algoritması ile şifrelendiğine eminseniz internette çok sayıda kodlama uygulaması var bunlara bakabilirsiniz ancak unutmayın ki özetleme algoritmaları (hashing algorithms) tek taraflı çalışmak için tasarlanmıştır, yani çıktıdan girdiye gitmeniz neredeyse imkansız denilebilir.

    Başarılar

    1. Şadi Evren ŞEKERŞadi Evren ŞEKER

      Metin özetlemedeki amaçlardan birisi de özetlenmiş metinin de anlamlı olmasıdır. Yani özetleme işleminden sonra çıkan sonucun doğal dilde okunabilen bir sonuç olması gerekir. Oysaki bu ve benzeri ikilik tabanda çalışan özetleme fonksiyonlarının girdisi ve çıktısı ikilik tabandadır. Dolayısıyla çıktısı anlamlı değildir (en azından doğal dilde).

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


sekiz − 2 =