Kriptografide, SHA-1 (Secure Hash Algorithm 1) NSA (National Security Agency) tarafından dizayn edilmiş ve NIST (National Institute of Standarts and Technology)1 tarafından yayınlanmış bir Amerika Birleşik Devletleri Federal Bilgi İşleme Standartı (Federal Information Processing Standard)'nda bir kriptografik özet fonksiyonudur. SHA-1, mesaj özeti olarak da bilinen 160-bit özet değeri üretir. Bir SHA-1 özet değeri genellikle 40 basamaklı bir onaltılık sayı olarak üretilir.
SHA-1 artık güvenli bir algoritma olarak düşünülmemektedir. Kriptanalistlerin 2005'te yaptığı bir saldırıyla SHA-1'in devam eden kullanım için2 yeterince güvenli olmadığını ispatladılar.3 Bu yüzden 2010'dan beri SHA-1 yerine daha güvenli olan SHA-2 veya SHA-3456 öneriliyor. 2017 itibarıyla ise Microsoft7, Google8, Apple9 ve Mozilla101112 SSL sertifikalarından SHA-1 desteğini çekeceklerini açıkladılar.
23 Şubat 2017'de CWI Amsterdam ve Google SHA-1'e1314 çakışma saldırısı yaptıklarını duyurdular ve iki farklı PDF dosyasının aynı SHA-1 özetini ürettiklerini kanıtladılar.15
SHA-1 ile üretilen mesaj özeti, MIT'den Ronald L. Rivest tarafından tasarlanmış MD4 ve MD5 algoritmaları ile üretilen mesaj özetlerine benzer fakat daha sade bir yapıdadır.
SHA-1 Amerika Birleşik Devletlerinin Capstone Projesi16 kapmasında üretilmiştir. Algoritmanın orijinal özellikleri NIST (National Institute of Standards and Technology) tarafından 1993 yılında Güvenli Özet Standartı, FIPS PUB 180, başlığı altında yayınlandı.(18-19).1718 Bu versiyon şu anda SHA-0 olarak bilinmektedir. Bu versiyon NSA tarafından yayınlanmasından kısa bir süre sonra geri çekilerek tekrar gözden geçirilmiş ve 1995 yılında FIPS PUB 180-1'de SHA-1 olarak yayınlanmıştır. SHA-1'in SHA-0'dan tek farkı, SHA-1'in sıkıştırma fonksiyonundaki mesaj planındaki bir bit işlemi rotasyonudur. NSA'ya göre bu işlem orijinal algoritmadaki şifreleme güvenliğini azaltan bir hatayı çözmek için yapılmıştır, fakat NSA bunun hakkında daha fazla bilgi paylaşmamıştır. Gerçekten de SHA-0 bilinen tekniklerle SHA-1'den daha önce kırılmıştır.
SHA-1 TLS, SSL, PGP, SSH, S/MIME ve IPsec gibi birçok güvenlik uygulaması ve protokolünün bir parçası olarak kullanılmaktadır. Bu uygulamalarda SHA-1 yerine MD5 da kullanılabilmektedir. Hem SHA-1 hem de MD5, MD4'ten yola çıkılarak tasarlanmışlardır. Ayrıca SHA-1 Git, Mercurial ve Monotone gibi dağıtık revizyon kontrol sistemlerinde revizyonların belirlenmesinde ve veri bozulmalarının ve/veya müdahalelerinin algılanmasında kullanılmaktadır. Algoritma Nintedo Wii oyun konsollarında booting sırasında imza doğrulaması sağlamak için kullanılmıştır, fakat algoritmanın ilk uygulanmasında saldırganların sistemin güvenlik planını rahatlıkla geçebildiği önemli bir açık oluşmuştur.19
Başka kriptografik algoritma ve protokolleri kullanan ABD Hükümeti uygulamalarında hassas ve gizli bilgilerin güvenliği için SHA-1 ve SHA-2 kriptografik özet algoritmalarının kullanılması yasalar tarafından zorunlu tutulmuştur. Ayrıca FIPS PUB 180-1, özel kurumların da SHA-1 algoritmasını kullanmasını desteklemiştir. SHA-1 artık hükümet işlerinin çoğunda kullanılmıyor. NIST ( National Institute of Standards and Technology)'in bir açıklamasında, "Federal ajanslar çakışma direnci gerektiren uygulamalarda en kısa zamanda SHA-1 algoritmasını kullanmayı bırakmalı ve bu uygulamalar için 2010'dan sonra SHA-2 kriptografik özet algoritma ailesini kullanmaya başlamak zorundadırlar."(orijinal vurgu).20 Bu zorunluluk daha sonra gevşetildi.21
Güvenli özet fonksiyonlarının yayınlanmasındaki en önemli motivasyon Dijital İmza Algoritması'dır.
SHA özet fonksiyonları SHACAL blok şifreleme'nin temelinde kullanılmıştır.
Git ve Mercurial gibi revizyon kontrol sistemleri SHA-1'i sadece güvenlik için kullanmaz ayrıca verinin herhangi bir bozulmaya uğrayarak değişmediğine emin olmak için kullanır. Linus Torvalds Git ile ilgili şunları söylemiştir;
Eğer disk bozulması varsa, DRAM bozulması varsa, veya herhangi bir sorun varsa Git hepsini algılayacaktır. Ya algılamazsa sorusu yok, bu bir kesinliktir. Zarar vermeye çalışan insanlar olabilir. Kesinlikle başaramayacaklar. [...] Kimse SHA-1'i kıramadı, fakat Git'i ilgilendiren SHA-1'in güvenlik özellikleri değil. Tamamiyle tutarlılık kontolü özelliği. Güvenlik kısmı bir yana, birçok insan şunu düşünüyor: Git SHA-1'i kullanıyor ve SHA-1 de kriptografik güvenlikte kullanılıyor. Demek ki Git'in güvenliği bununla sağlanıyor, diye düşünecekler. Git'te bunun güvenlikle hiçbir ilgisi yok. Bu sadece bulabileceğin en iyi özet fonksiyonu. [...]
Size şunun garantisini verebilirim: eğer verinizi Git'e koyarsanız, sizin sabit disk'inizden DVD'ye - veya 5 yıl sonra hangi teknoloji kullanılırsa ona - kopyalanınca bundan 5 yıl sonra bile verdiğiniz veriyi tamamı ile aynı şekilde geri alabilirsiniz. [...]
İlgilendiğim bir konu da çekirdek. İnsanların çekirdek kaynak kodlarını bozmaya çalıştıkları BitKeeper sitelerinden birinde açık yakalandığını gördük.22 Fakat Git çakışma durumda nesnenin en eski sürümünü tutmayı tercih edeceğinden bir saldırganın gizlice dosyaların üzerine yazmasını engellemiş olur. Böylece SHA-1'in ikinci-öngörüntü direnci güvenlik özelliğine ihtiyaç duymaz.
L bit özet uzunluğuna sahip bir kriptografik özet fonksiyonunda, özete karşılık gelen bir mesaj her zaman brute-force saldırısı ile yaklaşık 2<sup>L</sup> denemede bulunabilir. Bu saldırıya öngörüntü saldırısı denir ve L'nin uzunluğuna ve bilgisayar sistemine göre pratik olabilir veya olamayabilir. İkinci ölçüt "çakışma" aynı mesaj özetini üreten iki farklı mesaj bulmak, doğum günü saldırısı kullanılarak ortalama 1.2 × 2<sup>L/2</sup> denemede bulunabilir. Bu ikinci kriterden dolayı bir kriptografik özet fonksiyonunun direnci özet değeri uzunluğunun yarısının kadardır. Böylece SHA-1'in direnci 80-bit karmaşıklığında düşünülebilir.
Kriptologlar SHA-0 için çakışma çiftleri üretmeyi başarmışlar ve SHA-1'i de normal direnci olan 2<sup>80</sup> denemeden daha kısa sürede çakışma bulabilen bir algoritma bulmuşlardır.
Pratik güvenlikte, bu yeni saldırılarla ilgili en büyük endişe, daha etkili saldırılara yol açmalarıdır. Her ne kadar durumun böyle olup olmadığı daha bilinmese de, daha güçlü özet fonksiyonlarına geçilmesinin gerekliliğine inanılıyor. Parolaların saklanması gibi basit kriptografik özet fonksiyonu uygulamaları çakışma saldırılarından minimum şekilde etkilenirler. Belirli bir hesap için çalışan bir parola oluşturmak için öngörüntü saldırısı ve orijinal parolanın özetine erişim gerektirir. Parola şifrelemesini tersine çevirmek (Kullanıcının parolasını başka yerlerde denemek gibi) bu ataklarla mümkün değildir. (Bununla birlikte, çok güvenli bir özet fonksiyonu bile zayıf parolaları brute-force saldırısına karşı koruyamaz.)
Belge imzalatmada ise, saldırgan var olan bir belge için kolaylıkla sahte bir imza üretemez. Şöyle yapabilir: saldırgan normal ve hileli iki belge üretir ve özel anahtar sahibine normal belgeyi imzalatır. Bu saldırının mümkün olduğu bazı pratik koşullar vardır. Örneğin, 2008'in sonuna kadar bir MD5 çakışma kullanılarak sahte SSL sertifikaları üretmek mümkündü.24
Algoritmalar blok, yineleme yapısı ve ek son adımların olmamasından dolayı tüm SHA fonksiyonları (SHA-325 dışında) uzunluk uzantısı ve kısmı mesaj çakışması saldırılarına karşı savunmasızdır.26 Anahtarlı özet fonksiyonlarında — SHA(mesaj || anahtar) veya SHA(anahtar || mesaj) — saldırgan, anahtarı bilmeden sadece mesajı uzatıp özet değerini yeniden hesaplayarak anahtarla imzalanmış mesajı bulabilir. Bu saldırıyı önlemek için yapılmış basit bir iyileştirme mesajın özetinin iki kere almaktır. SHA<sub>d</sub>(mesaj) = SHA(SHA(0<sup>b</sup> || mesaj)) (0. blok olan 0<sup>b</sup>nin uzunluğu özet fonksiyonunun blok boyutuna eşittir.)
2005 yılının başlarında, Rijmen ve Oswald'un yayınladığı saldırıda, SHA-1'in basit versiyonunda — 80 turdan 53'ü — 2<sup>80</sup> işlemden daha az işlemde çakışmalar bulunmuştur.27
Şubat 2005'te Xiaoyun Wang, Yiqun Lisa Yin, ve Hongbo Yu tarafından bir saldırı duyuruldu. Saldırıda SHA-1'in normal versiyonunda 2<sup>69</sup> işlemden daha kısa sürede çakışmalar bulundu. ( Bir brute-force saldırısı ile çakışma bulmak 2<sup>80</sup> işlem gerektirir.)
Saldırıyı yapanlar şöyle açıkladılar: "Analizimiz SHA-0'daki orijinal diferansiyel saldırıya ve çakışma saldırılarına, çok bloklu çakışma tekniklerine ve MD5'teki çakışma arama saldırılarında kullanılan mesaj değiştirme tekniklerine dayanıyor. SHA-1'i bu güçlü analitik tekniklerin yardımı olmadan kıramazdık."28 Aynı zamanda 58-tur SHA-1'i 2<sup>33</sup> özet işleminde kırabilen bir çakışma sundular. Saldırının tüm detaylarını içeren makale 2005 yılının ağustos ayında CRYPTO konferansında sunuldu.
Yin bir röportajında, "Kabaca şu iki zayıflıktan yararlandık: İlki dosya ön işleme aşaması yeteri kadar karışık değil, ilk 20 turdaki bazı matematiksel işlemlerde beklenmedik güvenlik açıkları mevcut."29
17 Ağustos 2005'te bir CRYPTO 2005 oturumunda Xiaoyun Wang, Andrew Yao ve Frances Yao adına SHA-1 saldırısında yapılan bir iyileştirme duyuruldu. Çakışma bulmak için gereken ortalama işlem sayısı 2<sup>63</sup> 'e düşürüldü.30 18 Aralık 2007'de bu sonucun ayrıntıları Martin Cochran tarafından açıklanmış ve doğrulanmıştır.31
Christophe De Cannière ve Christian Rechberger, "SHA-1 Özelliklerini Bulma: Genel Sonuçlar ve Uygulamalar"32 makalesi ile SHA-1 saldırılarını daha da geliştirdiler ve ASIACRYPT 2006'daki en iyi makale ödülünü almaya hak kazandılar. 64-tur SHA-1 için 2 blok çakışma optimize edilmemiş yöntemler kullanılarak 2<sup>35</sup> işlemde bulundu. Bu saldırı yaklaşık 2<sup>35</sup> işlemde yapılabildiğinden teorik bir eşik olarak kabul edilir.33 Daha sonra 2010'da Grechnikov tarafından bu saldırı 80'de 73-tur'a kadar geliştirildi.34 Bununla tüm 80-turluk bir özet fonksiyonunda çakışma bulmak için muazzam şekilde işlem süresi gerekiyor. Bu yüzden, 8 Ağustos 2007'de SHA-1'de çakışma bulmak amacıyla Graz Teknoloji Üniversite'sinde dağıtılmış bilgi işlem platformu olan BOINC ile çakışma araması başlatıldı fakat 12 Mayıs 2009'da yeterince ilerleme sağlanamadığından sonlandırıldı.35
2006'daki CRYPTO oturumunda, Christian Rechberger ve Christophe De Cannière saldırganın SHA-1'deki mesajın en azından bir kısmını elde edebilecekleri bir saldırı bulduklarını duyurdular.3637
2008'de Stéphane Manuel tarafından yayınlanan bir raporda özet fonksiyonunda çakışmanın tahmini olarak 2<sup>51</sup> - 2<sup>57</sup> işlemlik teorik karmaşıklıkta bulunabileceğini öne sürdü.38 Fakat daha sonrasında yerel çakışma yollarının aslında bağımsız olmadığı anlayıp bu tahminin geri çekmiş ve bilinen en etkili çakışma vektörünün yine bu çalışmadan önceki bilinen yöntem olduğunu aktarmıştır.39
Cameron McDonald, Philip Hawkes ve Josef Pieprzyk Eurocrypt 2009 oturumunda 2<sup>52</sup> karmaşıklıkta kırılabilen yeni bir özet çakışma saldırı bulduklarını öne sürdüler.40 Fakat bu iddianın makalesi olan "O(2<sup>52</sup>) karmaşıklığında SHA-1 için Diferansiyel Yolu" makalesindeki hatalar sebebiyle yazarlar iddialarını geri çektiler.41
Başka bir saldırıda da Marc Stevens42 tek bir özet değerini kırmak için bulut sunucularından tahmini değeri $2.77M olan CPU gücü kiralamıştır.43 Stevens bu saldırıyı HashClash44 adlı projede bir diferansiyel yol saldırısı kullanarak gerçekleştirdi. 8 Kasım 2010'da SHA-1'e karşı tamamen çalışan bir çakışmaya yakın bir çakışma saldırısını tahmini olarak 2<sup>57.5</sup> işlemde gerçekleştirebileceğini iddia etti. Ayrıca bu saldırının tahmini 2<sup>61</sup> işlemde kırılabilen bir tam çakışma saldırısına dönüştürülebileceğini öne sürdü.
8 Ekim 2015'te Marc Stevens, Pierre Karpman, ve Thomas Peyrin SHA-1 özet fonksiyonunda yalnızca 2<sup>57</sup> işlem gerektiren bir çakışma saldırısı yayınladılar. Bu tam olarak bir tam SHA-1 özet fonksiyonu çakışma saldırısı (saldırgan iç aşamasını özgürce seçemediği) değildir, fakat yine de SHA-1'in güvenlik iddiasını zayıflatır. Özellikle, ilk defa tam SHA-1'e bir çakışma saldırısı yapılabildiği gösterildi. Önceki saldırıların hepsi pratik olarak gerçekleştirilmeleri çok pahalı saldırılardı. SHA-1'in kriptanalizindeki bu önemli atılım The SHAppening45 olarak isimlendirildi.
Bu metot Joux ve Peyrin'in yardımcı yolları(veya bumerangları) hızlandırma tekniği ile daha önceki çalışmalarına ve NVIDIA'nın yüksek performans/maliyet 'e sahip GPU 'larının kullanımına dayanıyor. Çakışma, toplamda 64 grafik kartına sahip 16 düğümlü bir küme ile bulundu. Yazarlar benzer bir çakışmanın EC246'de $2,000 'lık GPU zamanıyla bulunabileceği tahmininde bulundular.
Yazarlar aynı zamanda, tam SHA-1 çakışması yapmak için 75 bin ile 125 bin ABD doları maliyetindeki EC2 CPU/GPU gücünün yeterli olacağını söylemişler ve bunun bir suç örgütünün veya herhangi bir ulusal istihbarat örgütünün bütçesiyle rahatlıkla yapılabileceğini belirtmişlerdir. Ayrıca yazarlar SHA-1'in kullanımının olabildiğince çabuk durdurulmasını önerdiler.47
23 Şubat 2017'de Google SHAttered saldırısı ismini verdikleri saldırı ile yaklaşık 2<sup>63.1</sup> işlemde aynı SHA-1 özeti veren 2 farklı PDF dosyası ürettiklerini duyurdular. Bu saldırı 2<sup>80</sup> işlemde bulunabilen brute-force ile SHA-1 özeti çakışması bulmaktan (doğum günü saldırısı) yaklaşık 100,000 kat daha hızlıdır. Bu saldırı yaklaşık tek CPU işlem gücüyle yaklaşık 6,500 yıl veya tek GPU işlem gücü ile yaklaşık 110 yıl sürerdi.48
CRYPTO 98 'de Florent Chabaud ve Antoine Joux isimli iki Fransız araştırmacı, 2<sup>61</sup> karmaşıklıkta yapılabilen bir çakışma buldular, ki bu saldırı aynı uzunluktaki ideal özet fonksiyonu karmaşıklığı olan 2<sup>80</sup> işlemden çok daha azdır.49
2004 'te Biham ve Chen SHA-0 için çakışmaya yakın saldırılar keşfettiler. (Neredeyse aynı özet değeri olan —160 bitten 142'si aynı — iki farklı mesaj buldular.) Aynı zamanda SHA-0 'ın tam çakışmalarını 80-turdan 62-tura düşürülebildiğini buldular.
Daha sonra, 12 Ağustos 2004'te Joux, Carribault, Lemuet, ve Jalby tarafından tam SHA-0 algoritması için çakışma bulunduğu açıklandı. Bu saldırı Chabaud ve Joux 'un saldırılarının genelleştirilmesiyle yapıldı. Çapışıma 2<sup>51</sup> karmaşıklıkta bulundu ve 256 Itanium 2 işlemcisine sahip bir süper bilgisayarda yaklaşık 80,000 işlemci zamanı sürdü. (Bir bilgisayarın 13 gün sürekli kullanılmasına eşdeğer süre)
17 Ağustos 2004'teki CRYPTO 2004 oturumunda Wang, Feng, Lai, and Yu tarafından MD5, SHA-0 ve başka özet fonksiyonlarıyla ilgili saldırıların ön sonuçları açıklandı. Bu sonuçlarda, SHA-0 saldırısının karmaşıklığı 2<sup>40</sup> olarak açıklandı. Bu da Joux 'a ait saldırıdan çok daha verimli.5051
Şubat 2005 'te Xiaoyun Wang, Yiqun Lisa Yin, ve Hongbo Yu SHA-0 çakışmasını 2<sup>39</sup> işlemde bulduklarını duyurdular.5253
2008 'de yapılan bumerang saldırısı ile çakışma bulmak 2<sup>33.6</sup> işleme indirildi, ki bu ortalama bir bilgisayarda 1 saatte yapılabilmektedir.54
SHA-0 'daki sonuçların ardından bazı uzmanlar, SHA-1 'in yeni kriptosistemlerdeki kullanımına ilişkin planların tekrar gözden geçirilmesi gerektiğini önerdi. CRYPTO 2004'ten sonra, NIST 2010 yılına kadar SHA-1 'in kullanımının aşamalı olarak durdurulacağını ve yerine SHA-2 'nin kullanılacağını açıkladı.55
FIPS tarafından kabul gören tüm güvenlik fonksiyonları NIST (National Institute of Standards and Technology) ve CSE (Communications Security Establishment) tarafından yürütülen CMVP (Cryptographic Module Validation Program) programı tarafından doğrulanır. Gayri resmi doğrulama için, çok sayıda test vektörü içeren paket NIST 'in sitesinden indirilebilir, fakat bu testlerden çıkacak sonuç bazı uygulamalar için kanunen zorunlu olan resmi CMVP doğrulaması yerine geçmez.
Aralık 2013 itibarıyla, SHA-1 'in 2000'den fazla farklı ve geçerli uygulaması vardır, fakat bunlardan sadece 14 tanesi mesaj boyutu 8 ve katı bit uzunluğundaki mesajlar dışındakilerde çalışabilir.
Bunlar onaltılık tabanda ve ASCII Base64 formatındaki SHA-1 mesaj özetleri
SHA1("The quick brown fox jumps over the lazy
<span style="background:#c8ccd1">d
</span>og")
onaltılık tabandaki özeti: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
ASCII
Base64
özeti: L9ThxnotKPzthJ7hu3bnORuT6xI=
Even a small change in the message will, with overwhelming probability,
result in many bits changing due to the avalanche
effect. For example, changing dog
to
cog
produces a hash with different values for 81 of the 160 bits:
SHA1("The quick brown fox jumps over the lazy
<span style="background:#c8ccd1">c
</span>og")
onaltılık tabandaki özeti: de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3
ASCII
Base64
özeti: 3p8sf9JeGzr60+haC9F9mxANtLM=
The hash of the zero-length string is:
SHA1("")
onaltılık tabandaki özeti: da39a3ee5e6b4b0d3255bfef95601890afd80709
ASCII
Base64
özeti: 2jmj7l5rSw0yVb/vlWAYkK/YBwk=
SHA-1 algoritmasının sözde kodu:
<span style="color: green;">Note`` ``1:`` ``All`` ``variables`` ``are`` ``unsigned`` ``32-bit`` ``quantities`` ``and`` ``wrap`` ``modulo`` ``2
<sup>32
</sup> ``when`` ``calculating,`` ``except`` ``for
</span>
<span style="color: green;">
ml,`` ``the`` ``message`` ``length,`` ``which`` ``is`` ``a`` ``64-bit`` ``quantity,`` ``and
</span>
<span style="color: green;">
hh,`` ``the`` ``message`` ``digest,`` ``which`` ``is`` ``a`` ``160-bit`` ``quantity.
</span>\ <span style="color: green;">Note`` ``2:`` ``All`` ``constants`` ``in`` ``this`` ``pseudo`` ``code`` ``are`` ``in``
big`` ``endian
.
</span>
<span style="color: green;">
Within`` ``each`` ``word,`` ``the`` ``most`` ``significant`` ``byte`` ``is`` ``stored`` ``in`` ``the`` ``leftmost`` ``byte`` ``position
</span>
<span style="color: green;">Initialize`` ``variables:
</span>
h0 = 0x67452301
h1 = 0xEFCDAB89
h2 = 0x98BADCFE
h3 = 0x10325476
h4 = 0xC3D2E1F0
ml = message length in bits (always a multiple of the number of bits in a character).
<span style="color: green;">Pre-processing:
</span>
append the bit '1' to the message e.g. by adding 0x80 if message length is a multiple of 8 bits.
append 0 ≤ k < 512 bits '0', such that the resulting message length in
bits
is
congruent
to −64 ≡ 448 (mod 512)
append ml, the original message length, as a 64-bit
big-endian
integer. Thus, the total length is a multiple of 512 bits.
<span style="color: green;">Process`` ``the`` ``message`` ``in`` ``successive`` ``512-bit`` ``chunks:
</span>
break message into 512-bit chunks
for
each chunk
break chunk into sixteen 32-bit big-endian words w[i], 0 ≤ i ≤ 15
<span style="color: green;">Extend`` ``the`` ``sixteen`` ``32-bit`` ``words`` ``into`` ``eighty`` ``32-bit`` ``words:
</span>
for
i
from
16 to 79
w[i] = (w[i-3]
xor
w[i-8]
xor
w[i-14]
xor
w[i-16])
leftrotate
1
<span style="color: green;">Initialize`` ``hash`` ``value`` ``for`` ``this`` ``chunk:
</span>
a = h0
b = h1
c = h2
d = h3
e = h4
<span style="color: green;">Main`` ``loop:
</span>5657
for
i
from
0
to
79
if
0 ≤ i ≤ 19
then
f = (b
and
c)
or
((
not
b)
and
d)
k = 0x5A827999
else`` ``if
20 ≤ i ≤ 39
f = b
xor
c
xor
d
k = 0x6ED9EBA1
else`` ``if
40 ≤ i ≤ 59
f = (b
and
c)
or
(b
and
d)
or
(c
and
d)
k = 0x8F1BBCDC
else`` ``if
60 ≤ i ≤ 79
f = b
xor
c
xor
d
k = 0xCA62C1D6
temp = (a
leftrotate
5) + f + e + k + w[i]
e = d
d = c
c = b
leftrotate
30
b = a
a = temp
<span style="color: green;">Add`` ``this`` ``chunk's`` ``hash`` ``to`` ``result`` ``so`` ``far:
</span>
h0 = h0 + a
h1 = h1 + b
h2 = h2 + c
h3 = h3 + d
h4 = h4 + e
<span style="color:green;">Produce`` ``the`` ``final`` ``hash`` ``value`` ``(big-endian)`` ``as`` ``a`` ``160-bit`` ``number:
</span>
hh = (h0
leftshift
128)
or
(h1
leftshift
96)
or
(h2
leftshift
64)
or
(h3
leftshift
32)
or
h4
hh
sayısı mesaj özetini gösterir. Genellikle ASCII
Base64 formatında yazılır ama onaltılık tabanda da
yazılabilir.
Buradaki sabit sayılar rastgeleliği maksimize etmek için bilerek
seçilmiş sayılardır (nothing up my sleeve
numbers): 4 sabit k
sayısı
2, 3, 5, ve 10 sayılarının 2<sup>30</sup> kere kare kökleri alınmış
halidir. h0
'danh3
'e kadar olan dört başlangıç değeri MD5
algoritmasındakilerle tamamen aynıdır ve beşinci değer ise (h4
) çok
benzeridir.
FIPS PUB 180-1 'den direkt formülize etmek yerine, aşağıdaki benzer
ifadelerle ana döngüdeki f
değeri hesaplanabilir.
<span style="color: green;">Bitwise`` ``choice`` ``between
c
and
d
,`` ``controlled`` ``by
b
.
</span>
(0 ≤ i ≤ 19): f = d
xor
(b
and
(c
xor
d))
<span style="color: green;">(alternative`` ``1)
</span>
(0 ≤ i ≤ 19): f = (b
and
c)
xor
((
not
b)
and
d)
<span style="color: green;">(alternative`` ``2)
</span>
(0 ≤ i ≤ 19): f = (b
and
c) + ((
not
b)
and
d)
<span style="color: green;">(alternative`` ``3)
</span>
(0 ≤ i ≤ 19): f = vec_sel(d, c, b)
<span style="color: green;">(alternative`` ``4)
</span>
\ <span style="color: green;">
Bitwise`` ``majority`` ``function.
</span>
(40 ≤ i ≤ 59): f = (b
and
c)
or
(d
and
(b
or
c))
<span style="color: green;">(alternative`` ``1)
</span>
(40 ≤ i ≤ 59): f = (b
and
c)
or
(d
and
(b
xor
c))
<span style="color: green;">(alternative`` ``2)
</span>
(40 ≤ i ≤ 59): f = (b
and
c) + (d
and
(b
xor
c))
<span style="color: green;">(alternative`` ``3)
</span>
(40 ≤ i ≤ 59): f = (b
and
c)
xor
(b
and
d)
xor
(c
and
d)
<span style="color: green;">(alternative`` ``4)
</span>
(40 ≤ i ≤ 59): f = vec_sel(c, b, c
xor
d)
<span style="color: green;">(alternative`` ``5)
</span>
Max Locktyukhin ayrıca 32-79 arasındaki turları aşağıdaki gibi göstermiştir:58
w[i] = (w[i-3]
xor
w[i-8]
xor
w[i-14]
xor
w[i-16])
leftrotate
1
şununla değiştirilebilir:
w[i] = (w[i-6]
xor
w[i-16]
xor
w[i-28]
xor
w[i-32])
leftrotate
2
This transformation keeps all operands 64-bit aligned and, by removing
the dependency of w[i]
on w[i-3]
, allows efficient SIMD
implementation with a vector length of 4 like x86
SSE instructions.
Bu dönüşüm tüm işlenilenleri 64-bit hizalı tutar ve w[i]
'nin w[i-3]
üzerindeki bağımlılığını silerek x86 SSE işlemleri gibi vektör uzunluğu
4 olan verimli SIMD (Single Instruction Stream - Multiple Data Stream)
uygulamasına izin verir.
Aşağıdaki tabloda, iç durum ; her bir veri bloğunun sıkıştırma işlemi sonundaki "iç özet değeri toplamı" dır.
Daha fazla bilgi için: Merkle–Damgård construction
Özet fonksiyonunun performansı sadece algoritmaya bağlı olarak değişmez. Aynı zamanda o algoritmanın nasıl uygulandığına ve kullanılan donanıma da bağlıdır. OpenSSL aracında, kullanıcıların sistemlerinde çalışan algoritmaların hızını ölçen bir "hız" komutu vardır.
<table> <caption>SHA Fonksiyonlarının Karşılaştırılması </caption> <thead> <tr class="header"> <th><p>Algoritma ve çeşitleri</p></th> <th><p>Çıktı boyutu (bitler)</p></th> <th><p>İç durum boyutu (bitler)</p></th> <th><p>Blok boyutu (bitler)</p></th> <th><p>Maksimum mesaj boyutu (bitler)</p></th> <th><p>Turlar</p></th> <th><p>İşlemler</p></th> <th><p>Güvenlik bitleri (Bilgi)</p></th> <th><p>Örnek performans (<a href="Mebibyte" title="wikilink">MiB</a>/s)</p></th> <th><p>İlk kez yayınlanışı</p></th> </tr> </thead> <tbody> <tr class="odd"> <td><p><strong><a href="MD5" title="wikilink">MD5</a></strong> (referans olarak)</p></td> <td><p>128</p></td> <td><p>128 </p></td> <td><p>512</p></td> <td><p>Limitsiz<a href="#fn1" class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a></p></td> <td><p>64</p></td> <td><p>And, Xor, Rot, Or</p></td> <td><p><64 (çakışma bulundu)</p></td> <td><p>335</p></td> <td><p>1992</p></td> </tr> <tr class="even"> <td><p><strong></strong></p></td> <td><p>160</p></td> <td><p>160 </p></td> <td><p>512</p></td> <td><p>2<sup>64</sup> − 1</p></td> <td><p>80</p></td> <td><p>And, Xor, Rot, Or</p></td> <td><p><80 (çakışma bulundu)</p></td> <td><p>-</p></td> <td><p>1993</p></td> </tr> <tr class="odd"> <td><p><strong></strong></p></td> <td><p>160</p></td> <td><p>160 </p></td> <td><p>512</p></td> <td><p>2<sup>64</sup> − 1</p></td> <td><p>80</p></td> <td><p><63 (çakışma bulundu)<a href="#fn2" class="footnote-ref" id="fnref2" role="doc-noteref"><sup>2</sup></a></p></td> <td><p>192</p></td> <td><p>1995</p></td> <td></td> </tr> <tr class="even"> <td><p><strong></strong></p></td> <td><p><em>SHA-224</em> <em>SHA-256</em></p></td> <td><p>224 256</p></td> <td><p>256 </p></td> <td><p>512</p></td> <td><p>2<sup>64</sup> − 1</p></td> <td><p>64</p></td> <td><p>And, Xor, Rot, Or, Shr</p></td> <td><p>112 </p></td> <td><p>139</p></td> </tr> <tr class="odd"> <td><p><em>SHA-384</em> <em>SHA-512</em> <em></em> <em></em></p></td> <td><p>384 512 224 256</p></td> <td><p>512 </p></td> <td><p>1024</p></td> <td><p>2<sup>128</sup> − 1</p></td> <td><p>80</p></td> <td><p>And, Xor, Rot, Or, Shr</p></td> <td><p>192 256 112 128</p></td> <td><p>154</p></td> <td><p>2001</p></td> </tr> <tr class="even"> <td><p><strong></strong></p></td> <td><p><em>SHA3-224</em> <em>SHA3-256</em> <em>SHA3-384</em> <em>SHA3-512</em></p></td> <td><p>224 256 384 512</p></td> <td><p>1600 </p></td> <td><p>1152 1088 832 576</p></td> <td><p>Limitsiz<a href="#fn3" class="footnote-ref" id="fnref3" role="doc-noteref"><sup>3</sup></a></p></td> <td><p>24<a href="#fn4" class="footnote-ref" id="fnref4" role="doc-noteref"><sup>4</sup></a></p></td> <td><p>And, Xor, Rot, Not</p></td> <td><p>112 128 192 256</p></td> <td><p>-</p></td> </tr> <tr class="odd"> <td><p><em>SHAKE128</em> <em>SHAKE256</em></p></td> <td><p> </p></td> <td><p>1344 1088</p></td> <td><p>min(<em>d</em>/2, 128) min(<em>d</em>/2, 256)</p></td> <td><p>-</p></td> <td><p>2015</p></td> <td></td> <td></td> <td></td> <td></td> </tr> </tbody> </table> <section class="footnotes footnotes-end-of-document" role="doc-endnotes"> <hr /> <ol> <li id="fn1" role="doc-endnote"><a href="#fnref1" class="footnote-back" role="doc-backlink">↩︎</a></li> <li id="fn2" role="doc-endnote"><a href="#fnref2" class="footnote-back" role="doc-backlink">↩︎</a></li> <li id="fn3" role="doc-endnote"><a href="#fnref3" class="footnote-back" role="doc-backlink">↩︎</a></li> <li id="fn4" role="doc-endnote"><a href="#fnref4" class="footnote-back" role="doc-backlink">↩︎</a></li> </ol> </section>SHA Fonksiyonlarının Karşılaştırılması
<noinclude> </noinclude>Florent Chabaud, Antoine Joux: Differential Collisions in SHA-0. CRYPTO 1998. pp56–71
Eli Biham, Rafi Chen, Near-Collisions of SHA-0, Cryptology ePrint Archive, Report 2004/146, 2004 (appeared on CRYPTO 2004), IACR.org
Xiaoyun Wang, Hongbo Yu and Yiqun Lisa Yin, Efficient Collision Search Attacks on SHA-0, CRYPTO 2005, CMU.edu
Xiaoyun Wang, Yiqun Lisa Yin and Hongbo Yu, Finding Collisions in the Full SHA-1, Crypto 2005 MIT.edu
Henri Gilbert, Helena Handschuh: Security Analysis of SHA-256 and Sisters. Selected Areas in Cryptography 2003: pp175–193
A. Cilardo, L. Esposito, A. Veniero, A. Mazzeo, V. Beltran, E. Ayugadé, A CellBE-based HPC application for the analysis of vulnerabilities in cryptographic hash functions, High Performance Computing and Communication international conference, August 2010
CSRC Cryptographic Toolkit – Official NIST site for the Secure Hash Standard
RFC 3174 (with sample C implementation)
Interview with Yiqun Lisa Yin concerning the attack on SHA-1
Explanation of the successful attacks on SHA-1 (3 pages, 2006)
Hash Project Web Site: software- and hardware-based cryptanalysis of SHA-1
Orijinal kaynak: sha-1. Creative Commons Atıf-BenzerPaylaşım Lisansı ile paylaşılmıştır.
National Institute on Standards and Technology Computer Security Resource Center, NIST's March 2006 Policy on Hash Functions , accessed September 28, 2012. ↩
National Institute on Standards and Technology Computer Security Resource Center, NIST's Policy on Hash Functions , accessed September 28, 2012. ↩
Niels Ferguson, Bruce Schneier, and Tadayoshi Kohno, Cryptography Engineering , John Wiley & Sons, 2010. ISBN 978-0-470-47424-2 ↩
the most efficient disturbance vector is Codeword2 first reported by Jutla and Patthak ↩
Ne Demek sitesindeki bilgiler kullanıcılar vasıtasıyla veya otomatik oluşturulmuştur. Buradaki bilgilerin doğru olduğu garanti edilmez. Düzeltilmesi gereken bilgi olduğunu düşünüyorsanız bizimle iletişime geçiniz. Her türlü görüş, destek ve önerileriniz için iletisim@nedemek.page