Hangi şifreleme karma işlevini seçmeliyim?


137

.NET çerçevesi 6 farklı karma algoritması ile birlikte gelir:

  • MD5: 16 bayt (Karma süresi 500MB: 1462 ms)
  • SHA-1: 20 bayt (1644 ms)
  • SHA256: 32 bayt (5618 ms)
  • SHA384: 48 bayt (3839 ms)
  • SHA512: 64 bayt (3820 ms)
  • RIPEMD: 20 bayt (7066 ms)

Bu işlevlerin her biri farklı performans gösterir; MD5 en hızlı ve RIPEMD en yavaştır.

MD5, yerleşik Guid tipine uyması avantajına sahiptir; ve bu tip 3 UUID'nin temelidir . SHA-1 karması, tip 5 UUID'nin temelidir.Bu da onları tanımlama için kullanımını gerçekten kolaylaştırır.

Ancak MD5 çarpışma saldırılarına karşı savunmasızdır , SHA-1 de daha zayıftır.

Hangi koşullar altında hangi karma algoritmasını kullanmalıyım?

Yanıtlanmasını gerçekten merak ettiğim özel sorular:

  • MD5'e güvenilmiyor mu? Normal durumlarda, MD5 algoritmasını kötü niyetli bir amaç olmadan kullandığınızda ve hiçbir üçüncü tarafın kötü niyetli bir amacı olmadığında HERHANGİ BİR çarpışma beklersiniz (aynı hash üreten iki rasgele bayt [] anlamına gelir)

  • RIPEMD ne kadar iyi? (eğer daha iyi ise) hesaplamak için 5 kat daha yavaş ama karma boyutu SHA1 ile aynıdır.

  • Dosya adlarını (veya diğer kısa dizeleri) karma yaparken kötü amaçlı olmayan çarpışmalar alma olasılığı nedir? (Örn. Aynı MD5 karmasına sahip 2 rastgele dosya adı) (MD5 / SHA1 / SHA2xx ile) Genel olarak kötü amaçlı olmayan çarpışmaların olasılığı nedir?

Kullandığım kriter bu:

    static void TimeAction(string description, int iterations, Action func) {
        var watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < iterations; i++) {
            func();
        }
        watch.Stop();
        Console.Write(description);
        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
    }

    static byte[] GetRandomBytes(int count) {
        var bytes = new byte[count];
        (new Random()).NextBytes(bytes);
        return bytes;
    }


    static void Main(string[] args) {

        var md5 = new MD5CryptoServiceProvider();
        var sha1 = new SHA1CryptoServiceProvider();
        var sha256 = new SHA256CryptoServiceProvider();
        var sha384 = new SHA384CryptoServiceProvider();
        var sha512 = new SHA512CryptoServiceProvider();
        var ripemd160 = new RIPEMD160Managed();

        var source = GetRandomBytes(1000 * 1024);

        var algorithms = new Dictionary<string,HashAlgorithm>();
        algorithms["md5"] = md5;
        algorithms["sha1"] = sha1;
        algorithms["sha256"] = sha256;
        algorithms["sha384"] = sha384;
        algorithms["sha512"] = sha512;
        algorithms["ripemd160"] = ripemd160;

        foreach (var pair in algorithms) {
            Console.WriteLine("Hash Length for {0} is {1}", 
                pair.Key, 
                pair.Value.ComputeHash(source).Length);
        }

        foreach (var pair in algorithms) {
            TimeAction(pair.Key + " calculation", 500, () =>
            {
                pair.Value.ComputeHash(source);
            });
        }

        Console.ReadKey();
    }

15
Md5'in GUID (16 bayt) biçimine uyduğunu belirtmeniz, temel bir yanlış anlama olduğunu gösterir. Bir hash benzersiz olduğu garanti edilmez, ancak nadirdir (ve kriptografik anlamda kullanılıyorsa sahte olması zordur) ve bir GUID, iyi, benzersiz ancak tanımladığı şey. Çok farklı amaçlar için kullanılırlar.
Barry Wark

1
İlişkisiz, sadece kullanışlı bir uygulamaya özgü gerçeği düzeltin. 16 bayta sonsuzluk sığamayacağınızı anlıyorum. HERHANGİ karma algoritması ile çarpışmalar alabilirsiniz
Sam Saffron

5
Ayrıca bir Guid sadece pratikte benzersizdir, teorik olarak Guids oluşturmaya devam ederseniz, kopyalar elde edersiniz.
Sam Saffron

3
Gerçekten olmamalıdır bile uygun değilse, bir GUID içine bir karma şeyler. En basit örnek: aynı dosyanın iki kopyası farklı GUID'lere sahip olmalı, ancak aynı karma. Bir kişinin adının ilk 8 harfi de 16 bayta oldukça iyi uyuyor.
dbkk

2
@ user2332868 SHA-1'in kırılmasının kazayla çarpışma olasılığı üzerinde bir etkisi yoktur . Kötü niyetli bir amaç kullanımınız için bir tehdit olduğunda, bence herhangi bir karma işlevi körü körüne seçmek yanlıştır ve özel durumunuz için risk / maliyet analizi yapmak için zaman harcamanız gerekir.
Andrey Tarantsov

Yanıtlar:


138

Kriptografide hash fonksiyonları üç ayrı fonksiyon sağlar.

  1. Çarpışma direnci : Birinin aynı hastayı taşıyan iki mesaj ( herhangi iki mesaj) bulması ne kadar zordur .
  2. Önleme Direnci : Bir karma verildiğinde, aynı karma olan başka bir mesaj bulmak ne kadar zor? Tek yönlü karma işlevi olarak da bilinir .
  3. İkinci preimage direnci : Bir mesaj verildiğinde, aynı hash olan başka bir mesaj bulun.

Bu özellikler birbiriyle ilişkilidir ancak bağımsızdır. Örneğin, çarpışma direnci ikinci önleme direncini ima eder, ancak tam tersi değildir. Herhangi bir uygulama için, bu özelliklerden birine veya daha fazlasına ihtiyaç duyan farklı gereksinimleriniz olacaktır. Bir sunucuda parolaları güvence altına almak için bir karma işlevi genellikle yalnızca preimage direnci gerektirirken, mesaj özetleri üçünü de gerektirir.

Bununla birlikte, MD5'in çarpışma direnci olmadığı, çarpışma direnci gerektirmeyen uygulamalarda kullanımını engellemediği gösterilmiştir. Gerçekten de, MD5 hala daha küçük anahtar boyutu ve hızının faydalı olduğu uygulamalarda kullanılmaktadır. Bununla birlikte, araştırmacılar kusurları nedeniyle yeni senaryolarda diğer karma işlevlerinin kullanılmasını önermektedir.

SHA1, çarpışmaların teorik olarak uzunluğunun güvenli bir sağlama fonksiyonunun gerektireceği 2 ^ 80 adımdan çok daha azında bulunmasına izin veren bir kusura sahiptir. Saldırı sürekli olarak gözden geçiriliyor ve şu anda ~ 2 ^ 63 adımda gerçekleştirilebiliyor - sadece mevcut hesaplama alanı dahilinde. Bu nedenle NIST SHA1 kullanımını aşamalı olarak azaltarak SHA2 ailesinin 2010'dan sonra kullanılması gerektiğini belirtmektedir.

SHA2, SHA1'den sonra oluşturulan yeni bir hash fonksiyonları ailesidir. Şu anda SHA2 fonksiyonlarına karşı bilinen bir saldırı yoktur. SHA256, 384 ve 512, sadece farklı anahtar uzunlukları kullanan SHA2 ailesinin bir parçasıdır.

RIPEMD SHA aileleri kadar yaygın olarak kullanılmadığını ve bu nedenle kriptografik araştırmacılar tarafından yakından incelenmediğini belirtmek dışında çok fazla yorum yapamam. Bu nedenle sadece SHA fonksiyonlarının kullanılmasını tavsiye ederim. Kullandığınız uygulamada da oldukça yavaş görünüyor, bu da daha az kullanışlı hale getiriyor.

Sonuç olarak, en iyi bir işlev yoktur - hepsi sizin için neye ihtiyacınız olduğuna bağlıdır. Her biriyle ilgili kusurlara dikkat edin ve senaryonuz için en doğru hash fonksiyonunu seçebileceksiniz .


1
Bu ayrıntı düzeyine girdiğiniz için gerçekten teşekkür ederiz. Bu çok yardımcı.
joelc

1
Bazı uygulamalar için, kripto kalitesinde olmayan bir karma işlevi bile uygun olabilir. OP, özellikle parolalar veya meydan okuma yanıt kimlik doğrulaması veya erişim belirteçleri için veya yalnızca bir dizi dizeyi / dosyayı dizine eklemekten bahsetmedi. Performans ise Öte yandan OP için bir endişe kaynağı ...
Seva Alekseyev

111

Tüm karma işlevleri "bozuk"

Güvercin yuvası prensibi (eğer güvercinleri kesilmiş sürece) Eğer 2 delik 2'den fazla güvercinler sığamaz olacak kadar sert olduğunu denemek söylüyor. Benzer şekilde 2 ^ 128 yuvaya 2 ^ 128 + 1 sayı sığamaz. Tüm karma işlevleri sonlu boyutlu karma ile sonuçlanır, bu da "sonlu boyutlu" + 1 sekanslar arasında arama yaparsanız her zaman bir çarpışma bulabileceğiniz anlamına gelir. Bunu yapmak mümkün değil. MD5 ve Skein için değil .

MD5 / SHA1 / Sha2xx'in şanssız çarpışması yok

Tüm hash işlevlerinin çarpışmaları vardır, bu bir yaşam gerçeğidir. Kazara bu çarpışmalarla karşılaşmak galaksiler arası piyangoyu kazanmaya eşdeğerdir . Yani, galaksiler arası piyangoyu hiç kimse kazanmaz , piyangonun çalışma şekli bu değildir. EVER, yanlışlıkla MD5 / SHA1 / SHA2XXX karma ile karşılaşmazsınız. Her sözlükteki her sözcük, her dilde farklı bir değere sahiptir. Gezegendeki her makinedeki her yol adının farklı bir MD5 / SHA1 / SHA2XXX karması vardır. Bunu nasıl bilebilirim, sorabilirsiniz. Daha önce söylediğim gibi, galaksiler arası piyangoyu hiç kimse kazanamaz.

Ama ... MD5 bozuldu

Bazen kırılmasının önemi yoktur .

Durduğu gibi bilinen bir şey yok ön görüntü veya ikinci ön görüntü saldırısı yoktur .

Peki MD5 hakkında bu kadar kırılmış olan ne? Üçüncü bir tarafın biri EVIL diğeri de her ikisi de aynı değere sahip olan İYİ olmak üzere 2 mesaj üretmesi mümkündür. ( Çarpışma saldırısı )

Bununla birlikte, mevcut RSA önerisi, görüntü öncesi dirence ihtiyacınız varsa MD5'i kullanmamaktır. Güvenlik algoritmaları söz konusu olduğunda insanlar dikkatli olma eğilimindedirler.

Peki .NET'te hangi karma işlevini kullanmalıyım?

  • Hıza / boyuta ihtiyacınız varsa ve doğum günü saldırıları veya görüntü öncesi saldırılarla ilgilenmiyorsanız MD5 kullanın.

Bunu benden sonra tekrarlayın, MD5 çarpışmalarının şansı yoktur , kötü niyetli çarpışmalar dikkatlice tasarlanabilir. MD5'te bugüne kadar bilinen hiçbir görüntü öncesi saldırı olmamasına rağmen, güvenlik uzmanlarından gelen satır, MD5'in görüntü öncesi saldırılara karşı savunmanız gereken yerlerde kullanılmaması gerektiğidir. SAME SHA1 için geçerli .

Tüm algoritmaların görüntü öncesi veya çarpışma saldırılarına karşı savunması gerekmediğini unutmayın. HD'nizde yinelenen dosyalar için ilk geçiş aramasının önemsiz durumunu ele alın.

  • Kriptografik olarak güvenli bir sağlama işlevi istiyorsanız SHA2XX tabanlı işlevi kullanın.

Hiç kimse herhangi bir SHA512 çarpışması bulamadı. HİÇ. Gerçekten çok denediler. Bu nedenle hiç kimse SHA256 veya 384 çarpışması bulamadı. .

  • Birlikte çalışabilirlik senaryosu için olmadığı sürece SHA1 veya RIPEMD kullanmayın.

RIPMED, SHAX ve MD5'in aldığı aynı incelemeyi almadı. SHA1 ve RIPEMD'nin her ikisi de doğum günü saldırılarına karşı savunmasızdır. Her ikisi de .NET'teki MD5'ten daha yavaştır ve 20 bayt boyutunda gariptir. Bu işlevleri kullanmak anlamsız, unutun onları.

SHA1 çarpışma saldırıları 2 ^ 52'ye düşüyor, SHA1 çarpışmaları vahşi doğana kadar çok uzun sürmeyecek.

Çeşitli hash fonksiyonları hakkında güncel bilgiler için hash fonksiyonu hayvanat bahçesine bakınız .

Ama bekle daha fazlası var

Bir Having hızlıca karma işlevi bir lanet olabilir. Örneğin: karma işlevleri için çok yaygın bir kullanım parola depolamasıdır. Temel olarak, bilinen bir rastgele dizeyle (gökkuşağı saldırılarını engellemek için) bir şifreyi hash hesaplar ve bu hash veritabanında saklanır.

Sorun şu ki, bir saldırgan veritabanının dökümünü alırsa, kaba kuvvet kullanarak şifreleri oldukça etkili bir şekilde tahmin edebilir. Çalıştığı her kombinasyon milisaniyenin sadece bir kısmını alır ve saniyede yüz binlerce şifreyi deneyebilir.

Bu soruna geçici bir çözüm bulmak için, bcrypt algoritması kullanılabilir, bcrypt kullanarak bir sisteme saldırırsa saldırganın yavaşlaması için tasarlanmıştır. Son zamanlarda scrypt bazı başlık yaptı ve bazıları tarafından bcrypt'ten daha etkili olduğu düşünülüyor, ancak bir .Net uygulaması bilmiyorum.


Hem MD5 hem de SHA-1 zayıflamış olsa da, MD5 SHA-1'den çok daha zayıftır, ancak sadece biraz daha hızlıdır. Gerçek MD5 çarpışmaları bulundu ve gerçek dünyadaki istismarlar için kullanıldı (CA sertifikaları dövme), ancak bildiğim kadarıyla gerçek SHA-1 çarpışmaları bulunmadı (operasyonların sayısı kaba kuvvetten önemli ölçüde azaltılmış olsa da). MD5'in ne kadar zayıf olduğu göz önüne alındığında, MD5 için ikinci preimage ataklarının SHA-1'den daha erken ortaya çıkması durumunda şaşırmam. Bu nedenle, çarpışma direncine değil hıza ihtiyacınız varsa SHA-1'i kullanmanız gerektiğini, aksi halde SHA-2 ailesinden birini kullanmanız gerektiğini düşünüyorum.
Brian Campbell

1
@Brian, önümüzdeki birkaç yıl içinde insanların SHA1'e çarpışma saldırıları gerçekleştirebileceğini açıkça gösteriyor, bu SHA1'i MD5 kadar yararlı hale getirecek, CA sertifikası olayı bir çarpışma saldırısı olacak, birkaç yıl içinde insanlar da aynı saldırıyı SHA1 CA sertifikalarında çalıştırmak için. Saldırı, kötü ve iyi bir sertifika oluşturan kötü niyetli bir partiye bağlıdır. MD5'te bilinen bir primage saldırısı yoktur ve çarpışma saldırılarının olması, görüntü öncesi saldırıları az ya da çok olası kılmaz.
Sam Saffron

Parolalar için hangi karma kullandığınızdan, karma olandan çok daha az. Tuzunuz biliniyorsa, veritabanınız hemen bir sözlük saldırısına karşı savunmasızdır; tuzunuz yordamsalsa ve dosya sisteminizin güvenliği ihlal edilmişse, (yine) savunmasızsınız; tuzunuz atlanırsa, tekrar taviz verilir. Söz konusu güvenlik, ne olursa olsun, karma olan nedir. Sertifikalar, ben bir programcı olarak (IE, oluşturma, anlama, vb) ele değil çünkü ben adres olmaz.
Robert K

Kırık teriminin, karma bağlamında özel bir anlamı vardır ve bu cevabın üzerinde durduğu anlam değildir. Bu cevabın tek yapacağı karışıklığa neden olmak.
Joel McBeth

1
Bu mükemmel bir cevap çünkü pratikliğe odaklanıyor. Karma, güvenlik dışındaki şeyler için kullanılır (hassas olmayan veriler için önbellek arama anahtarları oluşturma veya serileştirilmiş bir nesnenin değişip değişmediğini belirleme gibi). Hedefli saldırı şansı neredeyse sıfırdır (asla asla deme) ve bir saldırı başarılı olsa bile önemli bir etkisi olmayacaktır. Pratik (teorik değil) etkiye odaklanan mükemmel iş.
DVK

35

Güncelleme:

Zaman değişti, bir SHA3 kazananı var. Keccak (aka SHA3 kullanmanızı tavsiye ederim)SHA3 ​​yarışmasını kazanan ) .

Orijinal Yanıt:

En güçsüzden en güçlüye doğru derim ki:

  1. RIPEMD BROKEN, Bu pdf'de görüldüğü gibi asla kullanılmamalıdır
  2. MD-5 BROKEN, Asla kullanılmamalıdır, bir dizüstü bilgisayar ile 2 dakika içinde kırılabilir
  3. SHA-1 BROKEN, Asla kullanılmamalıdır, prensipte kırılır, saldırılar haftaya göre iyileşir
  4. SHA-2 ZAYIF, Muhtemelen önümüzdeki birkaç yıl içinde kırılacak. Birkaç zayıflık bulundu.Genellikle anahtar boyutu ne kadar yüksek olursa, karma işlevinin o kadar zorlanacağını unutmayın. Anahtar boyutu = güç her zaman doğru olmasa da, çoğunlukla doğrudur. Dolayısıyla SHA-256 muhtemelen SHA-512'den daha zayıftır.
  5. BİLİNMEYEN ZAYIFLIKLAR Skein, SHA-3 için adaydır . Oldukça yeni ve denenmemiş. Bir çok dilde uygulanmıştır.
  6. MD6 BİLİNMEYEN ZAYIFLIKLAR, SHA-3 için bir adaydır. Muhtemelen Skien'den daha güçlü, ancak tek çekirdekli makinelerde daha yavaş. Skien gibi test edilmemiştir. Güvenlikle ilgilenen bazı geliştiriciler bunu kritik görevlerde kullanıyor .

Şahsen MD6 kullanırım, çünkü biri asla çok paranoyak olamaz. Hız gerçek bir endişe ise, Skein veya SHA-256'ya bakardım.


5
Skein ve MD6'yı listede o kadar yükseğe koymam; SHA-3 yarışmasının 2012 sonuna kadar tamamlanmamasının bir nedeni var. Bir karma işlevinin aslında güvenli olmayacağına ikna olmak uzun zaman alıyor ve çok fazla göz gerekiyor ve bu işlevlerin hiçbiri bunun için yeterince uzun süredir var.
Eric Burnett

Görüşlerinize katılıyorum, ama bence topluluk garip bir konumda. Kullanılan tüm karma işlevler tehlikeli bir şekilde kırılmaya yakındır (belki, belki SHA2 256-512 değil) ve yine de bir değiştirme seçmek için 2012'yi beklemek zorundayız. Zehirinizi seçin: zayıf / kırık veya test edilmemiş (çoğu NIST adayı 6 aydan uzun süredir halka açık değil)? Zorlu seçim.
Ethan Heilman

5
RIPEMD bozuk, ancak RIPEMD-128/160/256 farklı ve bozuk değil.
Bwooce

Skein for .NET'in herhangi bir performans uygulamasının farkında değilim. SkeinFish ve nskein ile karşılaştım ve ikisi de çok yavaştı.
Cocowalla

1
En azından aslında bir standardı takip etmek istiyorsanız, gerçek standart orada olana kadar SHA-3 kullanarak beklerim. Algoritmanın kendisinde çok fazla seçenek var.
Paŭlo Ebermann

3

MD5'in savunmasında, isteğe bağlı MD5 karmasına sahip bir dosya oluşturmanın bilinen bir yolu yoktur. Orijinal yazar önceden bir iş kazası geçirmeyi planlamalıdır. Böylece alıcı göndericiye güvenirse, MD5 iyidir. İmzalayan kötü niyetli ise MD5 bozulur, ancak ortadaki adam saldırılarına karşı savunmasız olduğu bilinmemektedir.


1
Hiçbir şekilde bu alanda uzman olmamakla birlikte, günümüzde keyfi MD5 karmalarını kaba kuvvetle hesaplamak mümkün değil mi?
mafu

@mafu: Burada geç cevap, ancak kaba kuvvetle herhangi bir karma hesaplamak mümkündür. Çok uzun zaman alabilir.
Warty

@ItzWarty Özellikle gereken zamana atıfta bulunuyordum - MD5 oldukça kısa olduğu için, makul bir bilgi işlem kaynağının üzerine atmanın mümkün olabileceğini düşündüm (E3 veya ucuz bir bilgisayar ızgarası, birkaç grafik kartı olan birkaç makine, bir şey) örneğin birkaç gün içinde keyfi bir MD5 karmasını hesaplayabilme.
mafu

@mafu Bir görüntü öncesi saldırı, 128 bit karma için 2 ^ 127 kare çağırma maliyetine sahiptir. Bu mümkün değil. 2 ^ 80 çağırma uygulanabilir ancak zaten çok pahalıdır.
CodesInChaos

2

Hangisini kullandığınız, onu ne için kullandığınıza bağlıdır. Dosyaların taşıma sırasında bozulmadığından ve güvenlik konusunda endişe duymadığınızdan emin olmak istiyorsanız, hızlı ve küçük gidin. Milyar dolarlık federal kurtarma anlaşmaları için dijital imzalara ihtiyacınız varsa ve bunların sahte olmadığından emin olmanız gerekiyorsa, sahtekarlık yapmak ve yavaşlatmak için zorlanın.


1
Sorunun çözümlerini tartışırken birçok kez MD5'i hızlı kimlik için kullanıyorum (bir dizeyi hashing), "ama md5 bozuldu ... kullanmayın, sha1 kullan" diyorum ... bazı zayıf hashlardan bir şey bu kadar temelden kırılmışsa, kaçınılması gerekir ... örneğin, normal verilerin çarpışmalara yol açtığı gerçek işler vakaları
Sam Saffron

MD5'in on beş yıl boyunca milyonlarca insan için iyi çalıştığını gören hash güvenliği çok önemli değilse sizin için uygun olduğundan şüpheleniyorum.
mqp

2
@ sambo MD5, sisteminizin gerçek güvenliğinin / bütünlüğünün çarpışmaları önlemeye bağlı olması dışında hemen hemen her durumda iyi çalışır .
Rex M

2

Ben bir sürü kripto için ezici kırılmasına rağmen hala md5 yaygın olarak kullanmak olduğunu (md5 parçalanmış önce) chime istiyorum.

Çarpışmalara karşı korumaya aldığınız sürece (md5'i bir hmac'da da hala güvende) ve hızı istiyorsunuz (bazen daha yavaş bir karma istiyorsanız) yine de md5'i güvenle kullanabilirsiniz.


@Bununla seninle birlikteyim, bu soru ile uğraştığım şey buydu, hiç kullanılmaması gereken daha zayıf hash fonksiyonları hakkında o kadar temelde kırılmış bir şey.
Sam Saffron

Buna ek olarak, eğer veri veya verilerin gerekli güvenliği, çatlama süresinden daha kısa bir ömre sahipse (bu gün birkaç dakika sonra) MD5 kesinlikle iyidir. Durumsal olarak yararlı ama yine de yararlı olan nokta.
annakata

@annakata - Bu koşullar altında kullanılabilmesi için anahtarları birden çok iletide yeniden kullanmaktan da kaçınmanız gerektiğini unutmayın.
Steve Westbrook

2

BLAKE2 algoritmasına bir göz atmak iyi bir ideea olacaktır.

Açıklandığı gibi, MD5'ten daha hızlıdır ve en azından SHA-3 kadar güvenlidir. Ayrıca WinRar dahil olmak üzere çeşitli yazılım uygulamaları tarafından uygulanır .


Birçok uygulamanın SHA-256'yı oldukça hızlı yapan donanım desteğine sahip olması dışında daha hızlı olabilir.
zaph

Katılıyorum. 2019 itibariyle Blake2b, bugüne kadar piyasaya sürülen en iyi genel amaçlı hashtir. Diğer tüm alternatiflerden önemli ölçüde daha hızlı ve daha az güvenli değil (en azından anlamlı bir şekilde değil) ve sadece 336 bayt ram'da (blake2'ler için 168), oh ve küçük endian CPU'lar için optimize edildi. günümüz sistemlerinde baskın endian.
hanshenrik

0

Ben bu tür bir konuda uzman değilim, ama güvenlik topluluğuna ayak uyduruyorum ve orada bir sürü insan md5 karma işleminin bozuk olduğunu düşünüyor. Hangisini kullanacağım, verilerin ne kadar hassas olduğuna ve belirli bir uygulamaya bağlı olduğunu söyleyebilirim. Anahtar iyi ve güçlü olduğu sürece biraz daha az güvenli bir karma ile kurtulabilirsiniz.


1
hash işlevleri genellikle anahtar kullanmaz
Ethan Heilman

0

İşte size önerilerim:

  1. Saldırı öngörüyorsanız muhtemelen MD5'i unutmalısınız. Online olarak onlar için birçok gökkuşağı tablosu var ve RIAA gibi şirketlerin eşdeğer karmalarla diziler üretebildikleri bilinmektedir.
  2. Mümkünse bir tuz kullanın . Mesaj uzunluğunun mesaja eklenmesi, yararlı bir karma çarpışma yapılmasını zorlaştırabilir.
  3. Genel bir kural olarak, daha fazla bit, daha az çarpışma (güvercin deliği ilkesine göre) ve daha yavaş ve belki daha güvenli anlamına gelir (güvenlik açıklarını bulabilen bir matematik dahisi değilseniz).

Masaüstü Intel P4 bilgisayarıyla 31 saniyede md5 çarpışmaları oluşturmak için bir algoritmayı detaylandıran bir kağıt için buraya bakın.

http://eprint.iacr.org/2006/105


Bu yorum çok eski ve oldukça gömülü görünüyor, ancak bu bit - RIAA'nın eşdeğer karmalarla diziler üretebildiği biliniyor - bana atladı ve bunun bağlamının ne olduğunu merak ediyorum. Özellikle, 8 yıl önce bruteforcing MD5, 2017'de olduğundan biraz daha az önemsizdi, bu yüzden oldukça iyi bir nedenleri olmalı.
i336_
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.