"Güvenli" bir karma, karma oluşturmak için kullanılan mesaj hakkında önceden bilgi sahibi olmadan formülik, tekrarlanabilir bir şekilde "parodi" yapmanın zor olduğuna inanılan bir karmadır. Bu bilgi genellikle gizli olduğundan, bu nedenle bir karma gereksinimi, bu kimlik doğrulamada kullanılması amaçlanan bir karma işlevinin iyi bir özelliğidir.
Bir mesaj M, bir hash fonksiyon hash () ve hash (M) tarafından L bit uzunluğunda üretilen bir hash değeri H verildiğinde, aşağıdakilerin hiçbiri, O (2 L ) süresi:
- Hash () ve H verildiğinde M üretir. (Preimage direnci)
- Hash () ve M verildiğinde , hash (M 2 ) == H. (zayıf çarpışma direnci) olacak şekilde farklı bir M 2 üretin.
- Verilen hash (), hash (M 1 ) == hash (M 2 ) olacak şekilde herhangi bir M 1 ve M 2 üretin . (güçlü çarpışma direnci)
Ayrıca, "güvenli" bir karma 2 L karma uzunluğuna sahip olmalıdırbilgisayarın belirli bir donanımı gerçekleştirmesi için uygun bir adım değildir. 32 bit tam sayı karmasının yalnızca 2,1 milyar değeri olabilir; bir ön saldırı (belirli bir hash H üreten bir mesaj bulmak) biraz zaman alacak olsa da, özellikle kod kırma ile görevlendirilmiş devlet kurumlarının elinde olmak üzere birçok bilgisayar için bu mümkün değildir. Buna ek olarak, rastgele mesajlar oluşturan ve saklayan bir algoritma, olasılıklara göre, sadece 77.000 mesajı denedikten sonra her yeni mesajla yinelenen bir karma bulmada% 50 çekim yapar ve sadece 110.000 sonra tekrar. 64 bitlik karmalar bile yalnızca yaklaşık 5 milyar değer denedikten sonra çarpışma şansı hala% 50'dir. Doğum günü saldırısının küçük karmalara gücü budur. Aksine,ondalık sayı (1.5 * 10 34 ).
Kriptografik karmalara gösterilen çoğu saldırı, çarpışma saldırılarıdır ve 2 L' den daha kısa sürede çarpışan mesajlar üretme yeteneğini göstermiştir (çoğu hala üstel süredir, ancak üssü yarıya indirmek karmaşıklıktaki önemli bir azalmadır. 256-bit karmayı 128-bit kadar kolay, 128-bit kadar kolay bir 64-bit kadar kolay çözmek).
Küçük karma boyutuna ek olarak, hash açıkça güvensiz hale getirebilecek diğer faktörler şunlardır:
Düşük iş - bir karma veya başka "sağlama toplamı" tipi kullanım için tasarlanmış bir karma genellikle hesaplama açısından ucuz olacak şekilde tasarlanmıştır. Bu kaba kuvvet saldırısını çok daha kolay hale getirir.
"Yapışkan Durum" - Karma işlevi, belirli bir ek bayt girdisi verildiğinde şimdiye kadar tüm girişlerin mevcut karma değerinin değişmediği giriş örüntülerine eğilimlidir. "Yapışkan duruma" sahip olmak, çarpışmaları bulmayı kolaylaştırır, çünkü "yapışkan durum" karması üreten bir mesaj belirlediğinizde, karmayı "yapışkan durumunda tutan giriş baytları ekleyerek aynı karmaya sahip diğer mesajlar oluşturmak önemsizdir. ".
Difüzyon - Mesajın her girdi baytı, karma değerinin baytları arasında eşit derecede karmaşık bir şekilde dağıtılmalıdır. Belirli karma işlevleri, karma içindeki belirli bitlerde öngörülebilir değişiklikler yaratır. Bu yine çarpışma yaratmayı önemsiz kılar; Karma üreten bir ileti verildiğinde, iletiye yalnızca öngörülebilir şekilde değişen bitleri etkileyen yeni değerler ekleyerek çarpışmalar kolayca oluşturulabilir.