SORU
9 ŞUBAT 2011, ÇARŞAMBA


Karma ve Şifreleme algoritmaları arasındaki temel fark

Karma ve şifreleme algoritmaları arasında kavram kargaşasına görüyorum ve daha uzman bir tavsiye duymak istiyorum:

  1. Kullanma vs şifreleme sağlamalarının

  2. Karma veya farklı bir şifreleme (teorik/matematik seviye)algoritması ne yapar yani ne sağlamalarının geri dönüşü olmayan (gökkuşağı ağacı yardımı olmadan) yapar

Burada bazıbenzerBu YÜZDEN arıyordum kadar detaya inmemişti Sorular:

What is the difference between Obfuscation, Hashing, and Encryption?
Difference between encryption and hashing

CEVAP
9 ŞUBAT 2011, ÇARŞAMBA


Peki, Wikipedia... Ama bir açıklama istiyorsanız bu yana, elimden geleni yaparım bak:

Hash Fonksiyonları

Uzunluğu giriş ve genellikle sabit uzunlukta (veya daha küçük) uzunluğunda rasgele bir çıkış arasında bir eşleme sağlar. MD5 veya SHA1/2/256/512 gibi crc32, tam gaz bir şifreleme için basit bir hash fonksiyonu herhangi bir şey olabilir. Bu noktada tek yönlü bir eşleme var. Hep çok:1 eşleme (anlam daima olacaktır çarpışmalar) beri her fonksiyonu üreten küçük bir çıkış daha yetenekli giren ve (Eğer besleme mümkün olan her 1mb dosyasına MD5 bir ton çarpışmalar).

Zor (ya da imkansız pratiklik) onlar neden ters için dahili olarak nasıl çalıştıklarını yüzünden. En kriptografik hash fonksiyonları, giriş üzerinde yineleme çıktı üretmek için birçok kez ayarlayın. Eğer giriş her sabit uzunlukta parça bakacak olursak algoritma bağımlı olan), karma işlev mevcut durumu. O zaman devlet üzerinde yineleme ve yeni bir tane Bul ve kendini (MD5 ile 512bit veri her parça için bu 64 kez yapar) geri bildirim olarak kullanın. Daha sonra bir şekilde tüm bu tekrar ortaya çıkan devletler tekrar bir araya sonuç karma oluşturmak için bir araya getirir.

Şimdi, Eğer istersen deşifre karma ... ilk bir yolunu bulmalısın bölünen verilen hash içine yineledi Birleşik Devletleri (1 ihtimal için girişler daha küçük boyutta bir yığın veri, çok büyük girdiler). O zaman her devlet için yineleme tersine çevirmek gerekir. Şimdi, bu ÇOK zor, aşağıdaki formül a b anlamak için çalışıyorum düşünün neden açıklamak için: 10 = a b. Çalışabilecek a b 10 olumlu kombinasyonları var. Üzerinden defalarca şimdi döngü: tmp = a b; a = b; b = tmp. 64 tekrarlamalar için, 10^64 olasılıklar üzerinde denemek gerekirdi. Ve bu sadece bazı devlet yineleme için yineleme korunmuş olduğu basit bir yanı var. Gerçek hash fonksiyonları çok fazla 1 işlemi (MD5 4 durum değişkenleri üzerinde 15 işlemlerini yapar. Ve o zamandan beri bir sonraki yineleme bağlı devletin önceki ve daha önceki tahrip oluşturma mevcut durumu, hepsi ama imkansız belirlemek için giriş durumu led için verilen çıkış durumu (her yineleme az). Bu, olasılıklarla ilgili çok sayıda ile birleştirmek, ve hatta bir MD5 şifre çözme kaynakları neredeyse sınırsız (sonsuz değil) bir miktar alacak. O kadar çok kaynak o değil aslında önemli ölçüde daha ucuz için kaba kuvvet karma varsa bir fikir boyutunu girişi (küçük giriş) daha denemeye bile deşifre karma.

Şifreleme Fonksiyonları

Herhangi bir uzunluktaki bir giriş ve çıkış arasında 1:1 eşleme sağlar. Ve her zaman tersine çevrilebilir. Not için önemli şey bu işin bir yöntemi kullanarak ters çevrilebilir. Ve belirli bir anahtar için 1:1 Her zaman. Şimdi, birden fazla giriş aynı çıkış oluşturabilir anahtar çiftleri (aslında genellikle vardır, şifreleme işlevine bağlı olarak) vardır. İyi şifrelenmiş veri rastgele gürültü ayırt edilemez. Bu her zaman tutarlı bir biçimde olan çok güzel karma bir çıkış farklıdır.

Durumlarda Kullanın

Bir değeri karşılaştırmak istiyorsunuz ama düz temsili mağaza veremediği bir karma işlev (bazı nedenlerden dolayı) kullanın. Şifreler onları düz metin güvenlik nedeniyle (ve olmamalıdır) depolamak için istemediğine göre bu durumda kullanmak çok iyi olur. Ama eğer korsan müzik dosyaları için bir dosya sistemi kontrol etmek istedim ne? Müzik dosya başına deposu 3) için pratik olurdu. Bunun yerine, dosyanın hash almak, ve o (md5 3 MB yerine 16 bayt mağaza) mağazası. Bu şekilde, sadece karma her dosya ve karşılaştırmak için saklanan veritabanı sağlamalarının (Bu değil pratik nedeniyle yeniden kodlama, değişen dosya başlıkları, vb, ama bir örnek-örnek).

Giriş veri geçerliliğini kontrol ederken, bir karma işlevi kullanın. Bunun için tasarlanmışlardır. Giriş 2 adet var, ve kontrol etmek için aynı olup olmadığını görmek istiyorsanız, bir karma fonksiyonu ile çalıştırın. Bir çarpışma olasılığı küçük boyutlarda giriş için astronomik (iyi bir karma işlev varsayarak). Şifreler için tavsiye edilir. Parola için en çok 32 karakter, md5 4 kez çıkış alanı vardır. Sha1 6 kez çıkış alanı (yaklaşık) vardır. Sha512) hakkında 16 kez çıkış alanı vardır. Gerçekten şifre umurunda değiloldueğer bir sakıncası yoksa bakım olarak saklı. Şifreler için karma kullanmalısınız.

Giriş verileri geri almak için ihtiyacınız olan her şifreleme kullanın. Kelime dikkat edingerek. Eğer kredi kartı numaraları saklıyorsanız, onları bir noktada geri almak gerekir, ama onları düz metin saklamak istemiyorum. Bunun yerine, şifreli sürümü deposu ve anahtarı mümkün olduğunca güvende tutmak.

Hash fonksiyonları da imza veri için harika. Eğer HMAC kullanıyorsanız, örneğin, verileri bilinen ancak iletilen bir değer ile birleştirilmiş bir karma (gizli bir değer) alarak bir parça veri işareti. Düz metin ve hmac karma gönderin. Daha sonra, alıcı gerekirse iletilen hmac eşleşip eşleşmediğini görmek için bilinen değer ve çekleri ile gönderilen veri sağlamalarının. Eğer bir sakıncası yoksa, gizli değeri olmayan bir şahıs tarafından tahrif değildi biliyorsun. Bu genellikle HTTP çerçeveleri tarafından güvenli tanımlama sistemleri, veri veri bazı geçerlilik istediğiniz HTTP üzerinden ileti iletim.

Şifreler için: karma üzerinde bir not

Kriptografik hash fonksiyonları önemli bir özellik oluşturmak için çok hızlı olmalı veçokzor/yavaş tersine çevirmek için neredeyse imkansız o kadar ki). Bu şifreler ile ilgili bir sorun teşkil etmektedir. Eğer sha512(password), saklıyorsanız gökkuşağı tabloları ya da kaba kuvvet saldırılarına karşı korumak için bir şey yapmıyorsun. Unutmayın, karma işlevi hız için dizayn edildi. Saldırganın sadece karma işlevi ile bir sözlük çalıştırın ve her bir sonucu test etmek için önemsiz.

Bir tuz ekleyerek yardımcı olur karma bilinmeyen veri biraz ekler beri önemli. Yani md5(foo) bilinen tuz eklendiğinde bir şey bulmaları gerekiyor eşleşen bir şey bulmak yerine md5(foo.salt) üretir çok zor olan). Ama yine de tuz biliyorsanız sadece sözlük çalıştıran meselesi beri hız sorunu çözmez.

Yani, bununla başa çıkmanın yolları vardır. Bir popüler yöntem key strengthening (veya anahtar germe) denir. Temelde, bir karma birçok kez (genellikle binlerce) üzerinde yineleme. Bu iki şey yapar. İlk olarak, aşağı karma algoritmanın çalışma zamanı önemli ölçüde yavaşlatır. İkinci olarak, uygulamaya sağ (giriş geçen ve her yineleme üzerinde tuz) aslında entropi (boş alan) çıkış için, çarpışma olasılığını azaltarak artırır. Önemsiz bir uygulama

var hash = password   salt;
for (var i = 0; i < 5000; i  ) {
    hash = sha512(hash   password   salt);
}

PBKDF2, BCrypt gibi, daha standart diğer uygulamaları vardır. Ama bu tekniği pek çok güvenlik ile ilgili sistemleri (PGP, WPA, ve OpenSSL Apache gibi) tarafından kullanılır.

Alt çizgi hash(password) yeterince iyi değil. hash(password salt) daha iyi, ama hala yeterli değil... gergin bir karma mekanizması şifre sağlamalarının üretmek için... Kullanın

Başka bir önemsiz germe unutmayın

Hiçbir koşulda bir doğrudan hash fonksiyonu geri esrar çıktı beslemeyin:

hash = sha512(password   salt); 
for (i = 0; i < 1000; i  ) {
    hash = sha512(hash); // <-- Do NOT do this!
}

Bunun nedeni çarpışma ile bir ilgisi yoktur. Tüm karma işlevler Olası çıkış alanı (Olası çıkış sayısı) giriş alanı daha küçük olduğu için çarpışmalar olduğunu unutmayın. Neden görmek için, bakalım neler olacak bak. Bu Önsöz için, hadi sha1() çarpışma (. 0,001'lik bir şans var varsayımında ^strong>çokgerçeklik, ama gösteri amaçlı) daha düşük.

hash1 = sha1(password   salt);

Şimdi, hash1 hassasiyeti 0,001% çarpışma ihtimali vardır. Ama biz ne zaman gelecek hash2 = sha1(hash1);,hash1 tüm çakışmaları otomatik olarak hash2 çarpışmalar olur. Şimdi, hassasiyeti 0,001% ve 2 sha1 çağrı ekler de hash1 oranı var. Şimdi, hash2 0.002% çarpışma ihtimali var. Bu iki kat daha fazla şansı! Her yineleme sonucu çarpışma 0.001% bir şans daha ekleyecektir. Yani, 1000 yineleme ile, çarpışma şansı %1 için önemsiz bir hassasiyeti 0,001% atladı. Şimdi, bozulma doğrusal ve gerçek olasılıklar varfardaha küçük, ama aynı etkisi (md5 ile tek bir çarpışma olasılığını tahmini 1/(2^128) 1/3e38. Aslında göründüğü kadar küçük değil, 35* *için teşekkürler küçük görünüyor olsa).

Bunun yerine, yeniden ekleme tuz ve şifrenizi her seferinde, yeniden tanıtmak veri karma işlevi haline geri döndün. Herhangi bir turunda herhangi bir çarpışma artık bir sonraki tura çarpışmalar. Yani:

hash = sha512(password   salt);
for (i = 0; i < 1000; i  ) {
    hash = sha512(hash   password   salt);
}

Çarpışma aynı şansı sha512 özgün işlevi vardır. Siz de bunu istiyorum. Kullanmak yerine..

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ArkticPlanet

    ArkticPlanet

    9 ŞUBAT 2010
  • Sergio Fernandez

    Sergio Ferna

    1 EKİM 2009
  • TomSka

    TomSka

    30 Mayıs 2006