it-swarm-tr.com

AES, kendisiyle bir parolayı şifrelemek SHA1'den daha mı güvenli?

Bu gerçekten pratik bir soru değil, daha çok bir merak meselesi. Bir CS profesörünün md5ing şifrelerinden SHA1'e değil, anahtar olarak kendisini kullanarak şifreyi AES'e yükseltmesini önerdiğini duydum. Bunun gerçekten az ya da çok güvenli olup olmadığı hakkında bir bilgisi var mı?

Konuyla ilgili bazı düşünceler:

  • SHA1, verileri koruyan bir işlevden daha güvenli hale getirmesi için tek yönlüdür.
  • Öte yandan, bilgisayar korsanı AES'in şifresi çözülebilen doğasından muhtemelen yararlanamıyor çünkü şifreyi henüz bilmiyor.
  • Tahmin etmedikçe. Ama sonra nasıl şifrelediğim önemli değil.
  • Şifre çözme anahtarı çıktıyla eşleştiğinde AES'd şifresinin şifresinin çözüldüğünü bildiğiniz için, bilgisayar korsanının bilgisayarında kaba güçlendirilebilir.
  • Ancak bilgisayar korsanı nasıl şifrelenmiş olduğunu bilmiyor, bu yüzden denemiyordu.
  • Ancak bilgisayar korsanı da şifreleme koduna sahip olabilirdi, bu durumda hangi verilerin kaba kuvvet kazanması daha uzun süreceği sorusudur.
  • Çoğu web sitesi md5 veya sha1 (doğru?) Kullanır, bu nedenle bu karmalar için arama tabloları AES yönteminden çok daha yaygın olacaktır. Böylece AES yöntemini daha güvenli hale getirir.
  • Ancak her iki yöntemi de tuzlarsak, arama tablolarına eşit derecede bağışıklık kazanırlar.

Yanıtlarda bazı ortak noktalar ve karşı noktalar:

AES şifrelemesi, çarpışmaya karşı dayanıklı olacak şekilde tasarlanmamıştır ve bu nedenle aynı karma dizgi uzunluğu için muhtemelen daha fazla çarpışma olacaktır.

Daha uzun bir tuz kullanıyorsak, şifrelenmiş parola bir SHA1 karma değerinden daha uzun olacaktır. Bu, çarpışmaları karşılaştırılabilir bir düzeye indirmek için yeterli olabilir - ya da olmayabilir.

AES şifrelemesi, 16 bayt içinde şifrenin ne kadar sürdüğünü gösterir.

AES yöntemine ekleyebiliriz: şifreledikten sonra, makul bir uzunluğa (çarpışmalardan kaçınmak için SHA1'den daha uzun) doğru ya da keseriz.

30
skier88

Kısa cevap: kötü fikir, yapma.


Daha uzun cevap: Alıştırmanın amacı, sunucunun doğrulama verilen bir şifreyi saklamasına izin veren bir şey saklamaktır, ancak yeniden inşa etmek parolaya izin vermez; ikinci özellik istenir, böylece bir saldırgan tarafından sunucu veritabanına gayri meşru bir okuma erişiminin sonuçları sınırlı kalır.

Bu nedenle, belirli bir şifreyi doğrulama değerine dönüştüren tek yönlü deterministik dönüşüm istiyoruz. Dönüşüm şöyle olacaktır:

  • sözlük saldırılarını önlemek için yapılandırılabilir şekilde yavaş;
  • önceden hesaplanmış tablolar da dahil olmak üzere paralel sözlük saldırılarını önlemek için her örnek için ayrıdır (tuzlar budur).

Bu işlevler çok hızlı olduğundan ve tuzlanmadığından, MD5 veya SHA-1'in tek bir çağrılması her iki hesapta da başarısız olur. Yavaşlık birçok çağrının (binlerce, muhtemelen milyonlarca) iç içe yerleştirilmesiyle yapılabilir ve tuz, bunu yapmanın iyi ve kötü yolları olsa da, "bir yere" enjekte edilebilir. PBKDF2 bunu yapan standart bir dönüşümdür ve bu konuda kötü değildir ( bcrypt biraz tercih edilmelidir ).

Ancak, MD5 ve SHA-1 en az bir şeyi doğru yapar: tek yönlü olmak için tasarlanmış. Bunu yapmak zor; tek yönlü işlevlerin gerçekten var olabileceği teorik olarak kanıtlanmamıştır. Dünyanın dört bir yanındaki kriptograflar şu anda yeni, daha iyi bir tek yönlü karma işlevi tasarlamak için rekabet ile ilgileniyorlar.

Profesörünüzün önerdiği şey, tek yönlülük için tasarlanmış bir işlevi, değil tek yönlülük için tasarlanmış bir işlevle değiştirmektir. Yavaşlık ve tuzlama ile ilgili hiçbir şeyi düzeltmez, ancak MD5 ve SHA-1 ile ilgili tek iyi şeyi kaldırır. Dahası, AES'in ilgili anahtar saldırılarla ilgili nispeten zayıf olduğu bilinmektedir - bu, AES'nin kastedildiği, yani şifreleme için kullanıldığı sürece bir sorun değildir, ancak önemli bir hale gelir. tek yönlü karma işlevi için bir yapı taşına dönüştürüldüğünde sorun. AES tasarımının parçalarını yeniden kullanarak güvenli bir karma işlevi oluşturmak mümkün görünüyor, ancak önemli ölçüde yeniden işleme gerektiriyor (örneğin Whirlpool ve ECHO ).

Bu yüzden ev yapımı AES tabanlı şifre karma şemasını kullanmayın; bu nedenle, "ev yapımı" olan hiçbir şey kullanmayın: bu bir felaket tarifi. Güvenlik test edilemez; güvenli bir algoritma oluşturmanın bilinen tek yolu, yüzlerce eğitimli kriptografın birkaç yıl boyunca ona yakından bakmasını sağlamaktır. Bunu kendiniz yapamazsınız. Yalnız bir kriptograf bile bunu riske atmaz.

Bunun yerine bcrypt kullanın. PBKDF2 de fena değil.

32
Thomas Pornin

Çoğu web sitesi md5 veya sha1 (doğru?) Kullandı, bu yüzden bir bilgisayar korsanı bunu beklerdi. Böylece AES yöntemini daha güvenli hale getirir.

Çoğu web sitesi MD5 veya SHA1 kullansa bile, AES sadece orada kullanılmadığı için bunu daha güvenli hale getirmez - bu sadece güvenliği tarafından güvenliği artırmak için genellikle etkili bir şekilde katkıda bulunmayan müstehcenlik ; iyi bir algoritma (verilen amaç için iyi test edilmiş) kullanmak ve herkese açık bir şekilde dokümante etmek, iyi olup olmadığından emin olamayacağınız bir algoritma kullanmaktan çok daha güvenli olacaktır ve kullanarak.

Şu anda AES veya böyle bir şifreleme algoritması kullanırken aşağıdaki olası dezavantajları düşünebilirim:

  1. Şifreleme algoritmaları genellikle çarpışmaları önlemek için tasarlanmamıştır: Aşağıdaki yorumlarda belirtildiği gibi, blok şifrelemenin beklenen sahte rastgele davranışı nedeniyle bir sorun olmayabilir. Ancak yine de, tasarlanmadığı bir şey için bir şifreleme algoritması kullanıyorsunuz.
  2. Şifreleme algoritmalarına, açık metin ve parolanın aslında bir ve aynı olduğunu bildiği takdirde yapılması çok daha kolay olan saldırılar olduğu düşünülebilir (eğer kullandığınız algoritma hakkında bir şekilde sızıntı olması gerekiyorsa, bu olası değildir) örneğin burada tartışılmıştır).
  3. Şifreleme algoritmaları, çoğu durumda açık metnin uzunluğuna göre değişen veriler üretir. Bu, şifre metninin şifrenin ne kadar uzun olduğu hakkında bilgi tuttuğu anlamına gelir. AES durumunda bu birden fazla 16 bayt birden fazla ; karma değerleri ise sabit bir boyuta sahiptir (örneğin SHA1 için 160 bit/20 bayt); yani potansiyel bir bilgisayar korsanının şifreli metinden karma değerinden daha fazla bilgi alma şansı vardır.
  4. Kriptografide, genellikle uzun zamandır toplulukta iyi test edilmiş ve dışarıda bulunan bir şeyi kullanmaktan daha fazla kendiniz pişirmek (daha sonra muhtemelen sadece sizin tarafınızdan da kullanılır) daha az güvenlidir (kapsamlı bir şekilde denetlenecek zamanı vardı. birkaç kriptanalist tarafından).
  5. Parola karma algoritmanızın yavaş olduğundan emin olmak istersiniz, böylece potansiyel saldırganlar sisteminize kaba kuvvet uygulayarak engeller. Bunu başarmanın bir yolu, örneğin karma işleminin örneğin PKBDF2'nin yaptığı gibi tekrarlı olarak çoklu turlarda gerçekleştirilmesidir. Daha fazla ayrıntı için bkz. http: //security.blogoverflow.com/2013/09/about-secure-password-hashing/
17
codeling

Bu yaklaşımda gördüğüm acil sorunlardan biri AES'in sabit anahtar uzunluğudur. AES-128 kullanıldığında, parola 16 bayt ile sınırlandırılır. Daha uzun parolalar veya uzun parolalar ne olacak?

Herhangi bir şifre uzunluğuna uyum sağlamak için bir karma fonksiyonuna ihtiyacınız olacaktır, bu yüzden başlangıç ​​noktasına geri dönün.

Blok-şifreyi karma-fonksiyona dönüştürmenin iyi çalışılmış ve güvenli * yolları olduğunu, Davies-Meyer, Matyas-Meyer-Oseas veya Miyaguchi-Preneel gibi PGV modları olduğunu unutmayın.

(*) Uygun bir "güvenli" tanımı için.

7
Krystian

Ancak şunu düşünün:

Sitenize giriyorum ve sisteminiz için yapılandırılmış AES anahtarları olduğunu fark etmek için yeterli erişim elde ediyorum, sadece "şifreli" görünen şey sizin şifrelerinizdir ... ne yapacağımı tahmin edin.

Onları karma tutar, tüm şifre veritabanınızı kolayca kazıma için çok daha az yer bırakır.

Bunun üzerine, bir site sahibi olarak, kullanıcı şifreleri ilk etapta şifresini çözmek istemiyorum, aksi takdirde "şifreleri kurtarma" seçeneği, daha yüksek up'ların isteyebileceği olası bir özellik haline gelir ve teknik olarak, altta yatan sistem bir karma sistemi yerine bir şifreleme sistemi kullanılarak inşa edildiğinden (kötü bir neden, ancak yazılım geliştiricileri bu gibi taleplerle ilgilenir).

Temel olarak: Güvenlik söz konusu olduğunda, tuhaf ve kutunun dışında bir şey yapmaya çalışmayın, muhtemelen kendinize büyük bir güvenlik deliği yazacaksınız çünkü bir algoritma üzerinde çalışan bir takım ekibin araştırma miktarını koyamayacaksınız belirli bir amaç için yapmak zorundaydı.

5
StrangeWill

Doğru cevap: Gerçekten hiç önemli değil.

Parolalar söz konusu olduğunda, tek pratik saldırı, doğru olanı kaba kuvvetle bulana kadar bir parola listesi denemektir. Kimse bunu yapmak için SHA1'e veya AES'ye doğrudan saldırmaya çalışmaz. Mevcut araştırma noktasında bile, SHA1'e saldırmak AES'den on bin kat daha kolay olurdu, her ikisi de hala imkansızdır (şifre karmalarını tersine çevirmek için, çarpışmalar burada önemli değildir). Bir araştırmacı diğer algoritmaya saldırmanın başka bir yolunu bulduğunda, olasılıklar gelecek yıl tersine çevrilebilir.

Önemli olan hash'ınızı ne kadar hızlı türettiğiniz/şifrenizi şifrelediğinizdir. Ancak; SHA1 daha hızlıdır ve daha yavaş olmasını istersiniz (kaba kuvvet saldırılarını savuşturmak için), sadece birkaç kez hash yapabilirsiniz.

Bir bilgisayar korsanının “beklediği” konuyla alakalı değildir, “beklenmedik” bir şey yapmak sadece belirsizdir. "Tüm şifre harflerini tersine çeviriyorum, şimdi daha güvenli" demek gibi. Olmayacak. Bilgisayar korsanı parola veritabanınıza erişebiliyorsa, parola karma türetme işlevinize erişimi olmadığından nasıl emin olabilirsiniz?

"Parolayı kendisiyle şifreleme" sırasında bir kusur: Şifreleme metninin uzunluğu saldırgana şifrenin uzunluğu hakkında bir ipucu verebilir. Bu korkunç.

Her durumda, şifreyi, tercihen kullanıcıya özgü bir şeyle tuzlamanız gerekir.

4
Kosta

Blok şifrelerden oluşturulan MAC'lar (Mesaj Kimlik Doğrulama Kodları) vardır; en iyi bilinen muhtemelen CBC-MAC . Bir hash-mac ile karşılaştırıldığında sorunları var, özellikle:

Güvenli bir blok şifresi verildiğinde, CBC-MAC sabit uzunluktaki mesajlar için güvenlidir. Ancak, değişken uzunluklu mesajlar için tek başına güvenli değildir. Doğru mesaj etiketi (yani CBC-MAC) çiftlerini (m, t) ve (m ', t') bilen bir saldırgan, CBC-MAC'i de t 'olacak üçüncü bir m' 'mesajı üretebilir.

[...]

Bu sorun, bir mesaj boyutu bloğu (örneğin, Merkle-Damgård güçlendirmesi ile) eklenerek çözülemez ve bu nedenle, değişken uzunluktaki mesajların bütünlüğünü korumak için farklı bir çalışma modu, örneğin CMAC kullanılması önerilir.

Daha kısa cevap: Bir blok şifresinden oluşturulan bir MAC'ın güvenliği, onu nasıl oluşturduğunuza bağlıdır. Saf bir yapı neredeyse kesinlikle önemli kusurlara sahip olacaktır.

4
Nick Johnson

Alışılmadık bir algoritma tasarlamış olmanız onu güvenli hale getirmez. "kendi kendine yapılan" algoritmalar tehlikelidir, çünkü kimse bunların şifreleme analizini yapmamıştır.

@Thomas Pornin'in yukarıda yazdığı gibi, AES çarpışmalara dayanıklı olacak şekilde tasarlanmamıştır. Ayrıca, AES nispeten hızlıdır, bu da saldırıları basitleştirir.

SHA1 çarpışmaya dayanıklı olacak şekilde tasarlanmıştır, ancak SHA1 de çok hızlı olacak şekilde tasarlanmıştır, çünkü amacı kısa sürede büyük hacimli veri veya dosyaların karmasını oluşturmaktır. Amacı, karma parolalara yönelik saldırıları önlemektir.

Farklı saldırı türlerine dayanıklı bir parola karması oluşturmak istiyorsanız parola genişletmeyi düşünün. Teknoloji yığınınıza ve mevcut kitaplıklarınıza bağlı olarak bcrypt, scrypt, argon2 düşünün.

1
mentallurg