Parolayı Hashing ile Şifreleme arasındaki fark


140

Bu soruya en çok oylanan mevcut :

Güvenlikle ilgili olmasa da, bir güvenlik sorunu olmayan bir diğeri tamdır ve bir parola hash etmek ve şifrelemek arasındaki farkı görmezden gelinmez . En yaygın olarak programcının güvensiz "Şifremi hatırlat" işlevselliğini sağlamaya çalıştığı kodda bulunur.

Bu fark tam olarak nedir? Hep karmaşanın bir çeşit şifreleme olduğu izlenimi altındaydım. Posterin bahsettiği güvensiz işlevsellik nedir?


Sırları / şifreleri neden karıştırmamanız gerektiğine dair iyi yazılmış bir makale. Bunun yerine HMAC kullanın. benlog.com/articles/2008/06/19/dont-hash-secrets
Jay Kumar

StackExchange güvenlik blogunda mükemmel bir konu özeti: security.blogoverflow.com/2011/11/…
David J. Liszewski

@JayKumar: Bağladığınız makale çok yanıltıcı. (Saldırganlar tarafından görülebilir olması beklenen) şifre tuzlarını (gizli kalması beklenen) MAC anahtarlarıyla birleştirir. David J. Liszewski'nin bağlantısı çok daha doğru bir açıklama sağlar.
Rufflewind

Yanıtlar:


222

Hashing tek yönlü bir işlevdir (bir haritalama). Geri döndürülemez, güvenli karma algoritmasını uygularsınız ve orijinal dizeyi geri alamazsınız. Yapabileceğiniz en fazla şey, "çarpışma" olarak adlandırılan şeyi üretmek, yani aynı karmayı sağlayan farklı bir dize bulmaktır. Kriptografik olarak güvenli karma algoritmalar, çarpışmaların meydana gelmesini önlemek için tasarlanmıştır. Gömme önce bir tuz uygulayarak karşı koyabileceğiniz bir gökkuşağı masası kullanarak güvenli bir karmaya saldırabilirsiniz .

Şifreleme uygun (iki yönlü) bir işlevdir. Tersine çevrilebilir, anahtarınız varsa orijinal dizeyi almak için karıştırılmış dizenin şifresini çözebilirsiniz.

Bahsettiği güvensiz işlevsellik, şifreleri şifrelerseniz, uygulamanızın bir yerde depolanmış anahtarı olması ve veritabanınıza (ve / veya kodunuza) erişen bir saldırganın hem anahtarı hem de şifrelenmiş metni alarak orijinal şifreleri alabilmesidir. bir karma ile imkansız.

İnsanlar genellikle bir kraker veritabanınıza veya kodunuza sahipse bir parolaya ihtiyaç duymadığını söyler, bu nedenle fark tartışmalıdır. Bu naif bir durumdur, çünkü kullanıcılarınızın şifrelerini koruma göreviniz hala vardır, çünkü bunların çoğu aynı şifreyi tekrar tekrar kullandığından, şifrelerini sızarak daha büyük bir riske maruz bırakır.


1
Net olmak gerekirse, hash ile istenen güvenliği elde edin, aynı hash üreten başka herhangi bir dize oluşturmak için sadece hash geri döndürülemez ANCAK DA hesaplamalı olarak pratik olmayan belirli bir özelliğe sahip kriptografik olarak güvenli bir hash algoritması olmalıdır.
Uzun Jeff

11
Evet ve hayır ... Karmaşık çarpışmaların kendi uygulamanızın güvenliği için üretilmesi zor olmalı, ancak parola sızıntısını önlemek için geri döndürülemezlik yeterlidir.
Dave Sherohman

5
ipeksi: ve orijinal şifreyi berbat karma işlevinizden tam olarak nasıl alacaksınız? Dave'in yorumunu tekrar okumanızı öneririm
Vinko Vrsalovic

1
Herhangi bir şey varsa, çok sayıda çarpışmaya sahip bir karma işlevi, şifrelerin güvenliği için daha iyidir, ancak bu, hesaba giriş yapmak için daha fazla şifrenin kullanılabileceği anlamına gelir.
williamvicary

1
@ n00b tuzları sabit olarak kodlanamaz çünkü her karma ürün ayrı bir tuz kullanmalıdır. Bir tuz noktası, hem UserA hem de UserB, "1234" parolasını kullanıyorsa, UserA'nın parolasını bulursanız, UserB'ye farklı tuzları olduğu için aynı parolayı kullandığını söyleyemezsiniz. Bir tuzun gizli tutulması güvenlik açısından kritik değildir, çoğu uygulama sadece hashı temsil eden ikili blobun önüne veya arkasına tuzu birleştirir.
Scott Chamberlain

34

Hashing tek yönlü bir işlevdir, yani bir parola hash haline geldiğinde orijinal parolayı karmadan geri almak çok zordur. Şifreleme, orijinal metni şifrelenmiş metinden geri almanın çok daha kolay olduğu iki yönlü bir işlevdir.

Sade karma, bir saldırganın sözlükteki her kelimeyi (veya belirli bir uzunluğa kadar her karakter kombinasyonunu) önceden oluşturduğu bir sözlük saldırısı kullanılarak kolayca yenilir, daha sonra karma şifreleri aramak için bu yeni sözlüğü kullanır. Saklanan her karma parola için benzersiz bir rastgele tuz kullanılması, bir saldırganın bu yöntemi kullanmasını çok daha zor hale getirir. Temel olarak, kullandığınız her tuz değeri için yeni bir benzersiz sözlük oluşturmaları ve saldırılarını çok yavaşlatmaları gerekir.

Şifreleri bir şifreleme algoritması kullanarak saklamak güvenli değildir, çünkü kullanıcı veya yöneticinin orijinal şifreyi şifrelenmiş metinden geri alması daha kolaysa, bir saldırganın da aynısını yapması daha kolaydır.


12

Şifreli ve Karma Parolalar

Yukarıdaki resimde gösterildiği gibi, parola şifrelenmişse, her zaman birinin düz metin parolasını ayıklayabileceği gizli bir sırdır. Ancak parola karma olduğunda, parolayı karma değerinden kurtarmanın neredeyse hiçbir yöntemi olmadığından rahatlarsınız.


Çıkarılan iyidir - Hashed Şifreler vs Şifreli?

Şifreleme iyi mi?

Düz metin parolalar DES, AES gibi simetrik şifreleme algoritmaları veya diğer algoritmalar kullanılarak şifrelenebilir ve veritabanında saklanabilir. Kimlik doğrulamasında (kimliğin kullanıcı adı ve parolayla onaylanması), uygulama veritabanında saklanan şifreli parolanın şifresini çözer ve eşitlik için kullanıcı tarafından sağlanan parola ile karşılaştırılır. Bu tür bir parola işleme yaklaşımında, birisi veritabanı tablolarına erişse bile parolalar yeniden kullanılamaz. Ancak bu yaklaşımda da kötü bir haber var. Bir şekilde uygulamanız tarafından kullanılan anahtarla birlikte şifreleme algoritması bir şekilde elde edilirse, veritabanınızda saklanan tüm kullanıcı şifrelerini şifre çözme ile görüntüleyebilir. "Bu benim sahip olduğum en iyi seçenek", bir yazılım geliştiricisi çığlık atabilir, ama daha iyi bir yolu var mı?

Şifreleme karma işlevi (yalnızca tek yönlü)

Evet var, belki de bu noktayı kaçırmış olabilirsiniz. Şifresini çözme ve karşılaştırma zorunluluğu olmadığını fark ettiniz mi? Parolanın bazı dönüştürülmüş kelimelere dönüştürülebildiği, ancak ters işlemin (dönüştürülmüş kelimeden parola üretilmesi) mümkün olmadığı tek yönlü bir dönüşüm yaklaşımı varsa. Şimdi birisi veritabanına erişse bile, şifrelerin dönüştürülmüş sözcükler kullanılarak çoğaltılması veya çıkarılması mümkün değildir. Bu yaklaşımda, bazılarının kullanıcılarınızın en gizli şifrelerini bildiği neredeyse hiç olmayacak; bu, birden fazla uygulamada aynı şifreyi kullanan kullanıcıları koruyacaktır. Bu yaklaşım için hangi algoritmalar kullanılabilir?


Tamam, ancak bir servise giriş yaptığınızda, şifreniz düz metin / şifreli olarak gönderilir, çünkü karşılaştırılacak sunucuya karma olarak gönderilirse. bir hacker hash'ı biliyorlarsa, hash'ı oturum açmak için sunucuya gönderebilir. Bu nedenle karşılaştırma için şifrelerin şifreleri çözüldükleri ve karma oldukları sunucuya şifrelenmeleri gerekir. Bu güvenli değil mi? Parolalar uzun süre hiçbir zaman gölgesiz biçimde saklanmadığı ve şifreli / düz metin parolaların tüm oluşumları artık gerekmediğinde herhangi bir bellekten silinir mi?
AgentM

8

Şifrelemenin her iki yöne de dönüştürülebileceğini her zaman düşündüm, son değer sizi orijinal değere getirebilir ve Hashing ile nihai sonuçtan orijinal değere geri dönemezsiniz.


8

Hashing algoritmaları genellikle kriptografik yapıdadır, ancak temel fark şifrelemenin şifre çözme yoluyla geri çevrilebilir olması ve karma olmamasıdır.

Bir şifreleme işlevi genellikle girdi alır ve aynı veya biraz daha büyük boyutlu şifreli çıktı üretir.

Bir karma işlevi girdi alır ve tipik olarak daha küçük bir çıktı, tipik olarak sabit bir boyutta da üretir.

Karma bir sonuç almak ve orijinal girdiyi geri almak için "dehash" yapmak mümkün olmasa da, genellikle aynı hash üreten bir şeye yolunuzu kaba kuvvet uygulayabilirsiniz.

Başka bir deyişle, bir kimlik doğrulama şeması bir parola alırsa, onu karma kılar ve parola gerektiren bir karma sürümüyle karşılaştırırsa, orijinal parolayı, yalnızca parolasını gerçekten bilmeniz gerekebilir ve kaba kuvvet uygulayabilirsiniz. farklı bir şifre olsa bile eşleşecek bir şeye giden yol.

Hashing fonksiyonları genellikle çarpışma olasılığını en aza indirmek ve sadece başka bir şeyle aynı hash'i üretecek bir şeyi hesaplamayı zorlaştırmak için oluşturulur.


4

İdeal olarak her ikisini de yapmalısınız.

Önce tek yönlü güvenlik için parolayı karıştırın. Ekstra güvenlik için bir tuz kullanın.

Ardından, şifre karmaları veritabanınız tehlikeye girerse, sözlüğü saldırılara karşı savunmak için şifreyi şifreleyin.


3
Ne ile şifrele? Eğer tüm kullanıcı şifreleri (karma, şifreli veya başka bir şekilde) ile veritabanına varmış o kadar zor pwn olsaydı, şifresini çözmek için anahtar bulmak mümkün değil mi?
Luc

5
Bu küçümsenmeyecek. Bu kadar kolay göz ardı edilmemesi gereken bir olasılıktır, uygulama olmadığında veritabanının güvenliği tehlikeye girer. Bu nedenle karmayı şifrelemek fazladan bir güvenlik katmanıdır.
Arie

@ Sana katılmıyorum, önceki benliğim. Ben uygulama kodunu (veya yapılandırma dosyaları) taviz vermedi çok fazla SQL enjeksiyonu gördüm ve görüşündedir şimdi olduğum ekleyerek bir sır yararlıdır, şifreleme şeklinde veya biber şeklinde olsun, ancak karma işleminin yerini almamalıdır . Daha eksiksiz bir cevap için buraya bakın: security.stackexchange.com/a/31846/10863
Luc

3

Hashing :

Tek yönlü bir algoritmadır ve bir kez karma geri alınamaz ve bu şifrelemeye karşı tatlı noktasıdır.

Şifreleme

Şifreleme yaparsak, bunu yapmanın bir anahtarı olacaktır. Bu anahtar sızdırılırsa, tüm şifrelerinizin şifresi kolayca çözülebilir.

Öte yandan, veritabanınız saldırıya uğrasa veya sunucu yöneticiniz DB'den veri alsa ve karma parolalar kullansanız bile, bilgisayar korsanı bu karma parolaları kıramaz. PBKDF2 ile uygun tuz ve ek güvenlik ile hash kullanırsak, bu aslında neredeyse imkansız olacaktır.

Karma işlevlerinizi nasıl yazmanız gerektiğine bir göz atmak isterseniz, burayı ziyaret edebilirsiniz .

Karma yapmak için birçok algoritma vardır.

  1. MD5 - İleti Özeti Algoritması 5 (MD5) sağlama işlevini kullanır. Çıktı karması 128 bit uzunluğundadır. MD5 algoritması Ron Rivest tarafından 1990'ların başında tasarlandı ve bugün tercih edilen bir seçenek değil.

  2. SHA1 - 1995'te yayınlanan Güvenlik Karma Algoritması (SHA1) karma değerini kullanır. Çıktı karma 160 bit uzunluğundadır. En yaygın şekilde kullanılmasına rağmen, bugün tercih edilen bir seçenek değildir.

  3. HMACSHA256 , HMACSHA384 , HMACSHA512 - SHA-2 ailesinin SHA-256, SHA-384 ve SHA-512 işlevlerini kullanın. SHA-2, 2001 yılında yayınlanmıştır. Karma işlevlerinin adlarının belirttiği gibi, çıkış karma uzunlukları sırasıyla 256, 384 ve 512 bittir.


1

Diğer cevaplar olabildiğince doğru, teklifin bulunduğu bağlamda, karma, bilginin güvenliğini sağlamak için kullanılabilecek bir araçtır, şifreleme, bilgi alan ve yetkisiz kişilerin okumasını / kullanımını zorlaştıran bir süreçtir.


-9

Parola almak - birini diğerinin üzerinde kullanmak isteyebileceğiniz bir neden.

Yalnızca bir kullanıcının şifresini içeren bir karma depolarsanız, 'unutulmuş şifre' özelliği sunamazsınız.


16
Kabul edilen cevabı yeterince iyi okumadınız. Dikkatle okuyun: Sen konum değil bir şifre sunmak gerekiyordu alma özelliğini. Bir şifre sıfırlama özelliği sunmanız gerekiyor . VBulletin, phpBB, e107, IPB, blogspot ve hatta kendi özel yapım CMS'im de dahil olmak üzere yıllarca birçok web sitesini yönettim. Yönetici olarak ASLA birinin önceden karma parolasına sahip olmanız gerekmez. Sadece yapmıyorsun. Ve buna da sahip olmamalısın. Söylediklerime katılmıyorsanız, sizi temin etmeme izin verin: yanılıyorsunuz.
Lakey

3
WAY çok kızgın olduğum için üzgünüm. Çok fazla web sitesinin şifreleri düz metin olarak sakladığını görüyorum ve bu beni hayal kırıklığına uğrattı. Bir yan not olarak: güvenlikle ilgilenen bazı web siteleri, kullanıcıların şifrelerini periyodik olarak değiştirmesini ister. Kişinin şifresini "Şifre1" den "Şifre2" ye değiştirmediğinden emin olmak istiyorlar. Böylece bu karşılaştırmaları daha sonraki bir tarihte yapmak için düz metin parolasını saklarlar. Bu iyi bir uygulama değil. Bu durumda yapmaları gereken şey, İLK şifresi üzerinde analiz yapmak, bir dizi benzer şifre - her biri hash - yapmak ve sadece hash'ları saklamaktır .
Lakey

7
Sorun değil, geri dönüp soruyu yeniden okudum ve daha fazla araştırma yaptım, bu yüzden her şey kaybolmadı :-) Bu cevabı yazdığımda ne düşündüğümden emin değilim. şerefe
Philtron
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.