Şifreyi sunucu tarafına göndermeden önce hashlamam gerekir mi?


110

Çoğu sitenin şifreleri HTTPS üzerinden sunucuya düz metin olarak gönderdiğini fark ettim. Bunun yerine parola karmasını sunucuya göndermenin herhangi bir avantajı var mı? Daha güvenli olur muydu?


5
@Jader Dias: Bunu sormadığınızı biliyorum, ama hash etmeniz daha güvenli olmaz, SONRA https üzerinden gönderin. Aslında, tuzunuzu açığa çıkardığınız için daha az güvenli hale getirebilir. Ayrıca, (burada arka tarafımdan bahsediyorum), algoritmaların karıştırılması daha fazla karma çarpışmaya neden olabilir ve onu daha hacklenebilir hale getirebilir.
Merlyn Morgan-Graham

@Merlyn "karma çarpışmalar" iyi bir nokta!
Jader Dias

Karıştırma algoritmaları, çarpışma olasılığını hiç artırmaz. Hash fonksiyonunun tüm noktası budur. Herhangi bir girdi entropisi verildiğinde, olası çıktı uzayında herhangi bir yerde olma olasılığı eşit olan bir dönüş çıktı.
JJ

@JJ "Karıştırma algoritmaları çarpışma olasılığını hiç artırmaz." Bu ifadenin bir kanıtını gerçekten görmek isterim. Sizi durdurmama izin verin: bu yanlış , genel olarak çarpışmaları artırıyor. Tüm x'ler için h (x) sabit 0 değil, h (h (x)) = 0 olacak şekilde kolayca bir karma işlevi oluşturabilirim. Bu nedenle, kesin hash algoritmaları setine ve bunları nasıl karıştırdığınıza başvurmanız gerekir. O zaman ifadenizi kanıtlamanız gerekir. AFAIK, çoklu SHA (tuzlu) için bile bu açık bir sorundur. Ve temelde bunun doğru olduğuna inanıyoruz . Kriptografi zordur.
acayip

Yanıtlar:


155

Bu eski bir soru, ancak bu önemli konuda kendi fikrimi belirtme ihtiyacı hissettim. Burada çok fazla yanlış bilgi var

OP, parolayı HTTP üzerinden açık olarak göndermekten hiç bahsetmedi - yalnızca HTTPS, ancak birçoğu bir nedenle HTTP üzerinden bir parola gönderme sorusuna yanıt veriyor gibi görünüyor. Bahsedilen:

Şifrelerin hiçbir zaman düz metin olarak saklanmaması (aktarılmamalı) gerektiğine inanıyorum. Bu, diskte veya hatta bellekte tutulmadığı anlamına gelir.

Burada yanıt veren insanlar, HTTPS'nin sihirli bir değnek olduğunu düşünüyor, öyle değil. Ancak kesinlikle çok yardımcı olur ve kimliği doğrulanmış herhangi bir oturumda kullanılmalıdır.

Orijinal parolanın ne olduğunu bilmenize gerek yok. Gereken tek şey, kullanıcı tarafından seçilen orijinal metne dayalı bir kimlik doğrulama "anahtarı" oluşturmanın (ve güvenilir bir şekilde yeniden oluşturmanın) güvenilir bir yoludur. İdeal bir dünyada bu metin, geri çevrilemez tuz kullanarak hashing yaparak hemen bir "anahtar" oluşturmalıdır. Bu tuz, oluşturulan kullanıcı kimlik bilgilerine özgü olmalıdır. Bu "anahtar", sistemlerinizin şifre olarak kullanacağı şey olacaktır. Bu şekilde, sistemleriniz gelecekte tehlikeye atılırsa, bu kimlik bilgileri yalnızca kendi kuruluşunuza karşı yararlı olacaktır ve kullanıcının tembel olduğu ve aynı parolayı kullandığı başka hiçbir yerde de yararlı olmayacaktır.

Yani bir anahtarımız var. Şimdi, istemcinin cihazındaki herhangi bir şifre izini temizlememiz gerekiyor.

Sonra sistemlerinize o anahtarı almamız gerekiyor. Asla bir anahtarı veya parolayı "açık" olarak iletmemelisiniz. HTTPS üzerinden bile değil. HTTPS aşılmaz değildir. Aslında, birçok kuruluş, saldırı açısından değil, kendi güvenlik politikalarını uygulamak için trafik üzerinde incelemeler yapmak için güvenilir bir MITM haline gelebilir. Bu HTTPS'yi zayıflatır ve olmasının tek yolu bu değildir (örneğin HTTP MITM saldırılarına yönlendirmeler gibi). Asla güvenli olduğunu varsaymayın.

Bunu aşmak için, anahtarı bir kereliğine hash ederiz. Bu nonce, sistemlerinize bir anahtarın her gönderimi için benzersizdir - aynı oturum sırasında birden çok kez göndermeniz gerekiyorsa aynı kimlik bilgisi için bile. Kimlik doğrulama anahtarını kurtarmak ve isteğin kimliğini doğrulamak için kendi sistemlerinize ulaştığında bu nonce'yi tersine çevirebilirsiniz.

Bu noktada, kendi sistemlerinizde kalıcı olarak depolanmadan önce onu son bir kez geri dönüşü olmayan bir şekilde hash ederim. Bu şekilde, kendi kuruluşunuzun kullanıcıyı taklit edemeyeceğini kanıtlarken, kimlik bilgilerinin tuzunu SSO ve benzeri amaçlarla ortak kuruluşlarla paylaşabilirsiniz. Bu yaklaşımın en iyi yanı, kullanıcı tarafından üretilen hiçbir şeyi yetkisi olmadan asla paylaşmamanızdır.

Açıkladığımdan daha fazla araştırma yapın, ancak kullanıcılarınıza gerçek güvenlik sağlamak istiyorsanız, bu yöntemin şu anda buradaki en eksiksiz yanıt olduğunu düşünüyorum.

TL; DR:

HTTPS kullanın. Parola başına benzersiz bir tuzla, şifreleri geri dönüşü olmayan bir şekilde güvenli bir şekilde hashleyin. Bunu istemcide yapın - gerçek şifrelerini iletmeyin. Kullanıcıların orijinal şifresini sunucularınıza iletmek asla "Tamam" veya "İyi" değildir. Orijinal şifrenin tüm izlerini temizleyin. HTTP / HTTPS'den bağımsız olarak bir nonce kullanın . Birçok düzeyde çok daha güvenlidir. (OP'ye cevap).


26
Az önce gmail ve facebook'u kontrol ettim - chrome geliştirici araçları bana hem POST'u hem de kullanıcı adımı ve parolamı düz (tuzsuz) metin olarak içeren urlencoded bir mesajla söylüyor. Büyük oyuncular müşteride nonce tuzlamayı nasıl / neden kullanmıyor?
gremwell

18
Anahtarı bir nonce ile hash ediyorsunuz ve sunucu tarafında nonce'yi tersine çevirebileceğinizi iddia ediyorsunuz. Öyleyse hash için kaba kuvvet mi uyguluyorsunuz? Ya da hash = HASH (gizli + nonce) HASH elde ettiğinizde bir nonce'yi nasıl alırsınız? HASH geri döndürülemez bir işlev olmalıdır. Bunu uyguladınız mı? Açıkladığın şeyin mümkün olduğunu sanmıyorum. Protokolün akış şemasını oluşturabilir misiniz?
Gümüş

20
HTTPS'ye güvenmiyorsanız, her bir çaba anlamsızdır! Kodunuz kablodan gönderilir ve bir saldırgan, geçiş sırasında parolayı güvence altına almak için tüm girişimlerinizi değiştirebilir / değiştirebilir
Sajid Kalla

3
Bir sertifikayı yeniden yazabilen bir MitM, nonce'yi yeniden yazabilir. Ya da Sajid'in söylediği.
leewz

4
HTTPS'li MITM konusunda endişeleriniz varsa, istemcinin hash'i sunucuya geri göndermeden önce parolayı çözebilmesi için istemciye bir salt göndermenin amacı nedir? Anlamsız görünüyor. Sunucuya sadece tuzsuz bir hash uygulayabilir, ardından sunucuda yeniden hash yapmak için bir salt kullanabilirsiniz. Açıkçası, istemci istemci tuzunun üreticisi olamaz, çünkü bir sonraki oturum açma farklı olacaktır ve aynı karma sunucu tarafını hesaplamayacaktır.
ezmek

24

HTTPS üzerinde olduğundan, şifreyi karma oluşturmadan göndermek kesinlikle iyidir (HTTPS üzerinden, düz metin değildir). Dahası, uygulamanız içeriğini güvende tutmak için HTTPS'ye bağlıysa, şifreyi HTTPS üzerinden göndermeden önce hash hale getirmek faydasızdır (yani bir saldırgan kablodaki verilerin şifresini çözebilirse, yine de mahvolursunuz)


5
Bu bir problem olmamalı. İstemci bir proxy kullanıyorsa, o zaman tüm proxy, HTTPS ile şifrelenmiş verilerdir. Ortadaki adam saldırısından bahsediyorsanız, uygun şekilde yapılandırılmış bir sertifika bunu engellemelidir.
Kiersten Arnold

7
@Jader: Verilerle uğraşmak, MITM saldırısını durdurmaz, çünkü ona ne gelirse onu aktarabilir. Parola veya karma iletmeniz fark etmez. Bu tamamen farklı bir konu.
David Thornley

2
SSL'nin amacı (HTTPS = SSL üzerinden HTTP) MITM'yi engellemektir.
yfeldblum

1
@carnold - MINTM - http’ye yeniden yönlendirmeye ne dersiniz? Çoğu insan fark eder mi? sslstrip - securityfocus.com/brief/910
nate c

1
@Jader Dias, var olmayan bir sorunu durdurmaya çalışıyorsun. HTTPS bu sorunu durdurur, bir istemci tarafı karması herhangi bir güvenlik miktarı eklemez. Müşteriye asla güvenilemez.
kale

17

Hayır, aslında bu bir güvenlik açığı olacaktır. Saldırgan veritabanından hash elde edebiliyorsa, onu kırmasına gerek kalmadan kimlik doğrulaması için kullanabilir. Hiçbir koşulda bir kullanıcı veya bir saldırgan bir karma şifre alamamalıdır.

Şifreleri karıştırmanın tüm amacı, fazladan bir güvenlik katmanı eklemektir. Bir saldırgan SQL Injection veya güvenli olmayan bir yedekleme kullanarak veritabanından hash ve salt elde edebiliyorsa, düz metni kaba zorlayarak bulması gerekir. John The Ripper , tuzlu parola karmalarını kırmak için yaygın olarak kullanılır.

Https kullanılmaması OWASP İlk 10: A9-Yetersiz Taşıma Katmanı Koruması'nın ihlalidir

DÜZENLEME: Uygulamanızda a'yı hesaplar sha256(client_salt+plain_text_password)ve ardından sunucu tarafında başka bir hash hesaplarsanız, sha256(server_salt+client_hash)bu ciddi bir güvenlik açığı değildir. Bununla birlikte, isteği gizlice dinlemeye ve tekrar dinlemeye hala açıktır. Bu nedenle, bu hala WASP A9'un açık bir ihlalidir. Ancak, bu hala bir güvenlik katmanı olarak bir mesaj özetini kullanmaktadır.

Gördüğüm en yakın şey, https için bir istemci tarafı değişimine javascript'te anahtar değişiminde bir diffie-hellman . Ancak, bu aktif MITM saldırılarını önler ve bu nedenle teknik açıdan OWASP A9'un ihlali anlamına gelir. Kodun Yazarları, bunun HTTPS için tam bir ikame olmadığı konusunda hemfikirdir, ancak hiçbir şeyden daha iyi ve istemci tarafı karma sistemden daha iyidir.


4
Aslında bunu sunucuda tekrar hash ederdim, bu yüzden lütfen bu senaryoyu düşünerek cevabınızı düzenleyin.
Jader Dias

@Rook, diffie-hellman anahtar değişimini https ile birlikte kullanıyor "işe yaramaz" bir çözüm mü? (Yani sadece https kullanabiliriz ve diffie helman güvenlik imao'yu artırmaz)
Michel Gokan

@Michel Kogan, HTTP'lerde diğer araçlarla birlikte bir DH anahtar değişimi kullanılabilir.
kale

1
@Rook Sunucuya bir hash uygulamak en iyi yöntemdir, bu nedenle, yanıtınızın başlangıcını istemci tarafı hashing'i kapatmamak için güncellemelisiniz ve ancak o zaman sunucunun depolanan hash ve tuzlarının asla açığa çıkmaması gerektiğini belirtmelisiniz.
Levente Pánczél

8

Kablonun üzerinden bir hash göndermek, hash'in amacını tamamen ortadan kaldırır, çünkü bir saldırgan sadece hash'i gönderebilir ve şifreyi unutabilir. Özetle, açık metinde bir karma kullanarak kimlik doğrulaması yapan bir sistem tamamen açıktır ve ağ koklamadan başka bir şeyle ödün verilebilir.


2
Bu tamamen saçma görünüyor ... Bir karma nasıl daha az güvenli bir şifredir?
Levente Pánczél

1
Bu yalnızca "aptal" karmalar için geçerlidir. Şunu düşünün: Bir sunucu istemciye bir salt S gönderir ve istemci HASH (S + ŞİFRE) yapar ve sunucuya gönderir. Sunucu, bu hash'i yalnızca geçerli oturum için onurlandırır. Bir saldırgan gerçekten de karma gönderebilir ve parolayı unutabilir, ancak YALNIZCA MEVCUT OTURUM İÇİN. Bu nedenle düz metinden daha güvenlidir.
Merhaba Dünya

Güncelleme: Özet Erişim Kimlik Doğrulaması daha da karmaşıktır: en.wikipedia.org/wiki/Digest_access_authentication
Merhaba Dünya

2
Daha açık olmak gerekirse: "hash amacını bozar" dediğimde, şifreleri bir veritabanında depolamadan önce hashing yapmanın yaygın ve güvenli uygulamasından bahsediyorum. Yine de argüman, parola yerine bir karma değer göndermenin ek adımlar olmadan güvenliği artırmak için hiçbir şey yapmadığını savunur.
Paul Keister

Paul'ün söylediğine ek olarak: Bu tür saldırılara, herhangi biri başka bir yerde daha fazla okumak isterse, "tekrar saldırısı" denir.

5

Düz metindeki şifre asla istemciden çıkmaz (HTTPS kullanırken bile). Sunucunun gerçek parolayı bilmesine gerek olmadığından, istemciden ayrılmadan önce geri çevrilemez şekilde hashing uygulanmalıdır.

Hashing daha sonra iletim, aynı parolayı birden çok yerde kullanan tembel kullanıcılar için güvenlik sorunlarını çözer (yaptığımı biliyorum). Ancak bu, uygulamanızı veritabanına erişen bir bilgisayar korsanı olarak korumaz (veya başka bir şekilde karmayı ele geçirmeyi başardı) çünkü bilgisayar korsanı karmayı iletebilir ve sunucunun bunu kabul etmesini sağlayabilir.

Bu sorunu çözmek için elbette sunucunun aldığı hash'i hash edebilir ve bir gün çağırabilirsiniz.

Oluşturduğum soket tabanlı bir web uygulamasında soruna yaklaşımım, istemciye bağlanıldığında sunucunun bir tuz oluşturması (hashing işleminden önce eklenecek rastgele dizge) ve bunu soketler değişkeninde depolaması ve ardından bu hash'i iletmesidir. Müşteriye. İstemci kullanıcı şifresini alır, şifreler, sunucudan tuzu ekler ve sunucuya iletmeden önce her şeyi hash eder. Daha sonra, bu hash'i hash ile karşılaştıran sunucuya gönderilir (DB + salt içindeki hash). Bildiğim kadarıyla bu iyi bir yaklaşım ama dürüst olmak gerekirse konu hakkında çok fazla okumadım ve herhangi bir konuda yanılıyorsam düzeltilmeyi çok isterim :)


3

HTTP Özetini kullanın - şifreyi http üzerinden bile korur (ancak en iyi kullanım https üzerinden http özetidir)

Wikipedia:

HTTP özet erişim kimlik doğrulaması, bir web sunucusunun bir web kullanıcısı ile kimlik bilgileri üzerinde anlaşmak için (HTTP protokolünü kullanarak) kullanabileceği kabul edilen yöntemlerden biridir. Özet kimlik doğrulamasının, Temel erişim kimlik doğrulamasının şifrelenmemiş kullanımının yerini alması amaçlanarak, ağ üzerinden düz metin olarak bir parola göndermek zorunda kalmadan kullanıcı kimliğinin güvenli bir şekilde oluşturulmasına izin verilir. Özet kimlik doğrulaması, temel olarak, kriptanalizi önlemek için nonce değerlerinin kullanımıyla MD5 kriptografik hashing uygulamasıdır.

Bağlantı: http://en.wikipedia.org/wiki/Digest_access_authentication

Bir "gerçek yaşam" kullanımı görmek istiyorsanız, http://siege.org/phpmyid.php http://siege.org/phpmyid.php adresinden http://siege.org/phpmyid.php gibi bir php openid sağlayıcısı olan phpMyID'ye bakabilirsiniz.

.. veya http://php.net/manual/en/features.http-auth.php adresindeki php kimlik doğrulama örneklerinden başlayabilirsiniz.

Http özeti rfc: http://www.faqs.org/rfcs/rfc2617

Testlerime göre tüm modern tarayıcılar bunu destekliyor ...


HTTP Özeti, bu soruda kastettiğim şeyi uygular, ancak HTTPS Özeti (SSL + HTTP Özeti) kullanırsak herhangi bir avantajımız olur mu?
Jader Dias

Bir ana fark, her şeyin şifreli olarak gönderilmesi / alınmasıdır - http başlıkları gönderilir ve alınır ve html yanıtı. Ortadaki adam saldırısını kullanarak ssl'yi rastgele "hacklemeye" çalışan biri için http özeti, başka bir kolay hedefi aramasını sağlamak için fazladan bir neden olabilir veya tüm yakalanan trafiği günlüğe kaydediyorsa şifreleriniz daha da güvenlidir. Soruyu yanlış anlamış olabilirim, ingilizce benim ilk dilim değil.
vlad b.

Parola üzerinden karmanın büyük bir avantajı vardır: trafik bir şekilde kaydedilir veya yakalanırsa, işi o kişi için zorlaştırır. Ayrıca, http özeti ile ssl her zaman gerekli değilse, kullanıcıların http ve https arasında seçim yapmasına izin verebilirsiniz. Ya da farklı sunucular için farklı protokoller kullanabilirsiniz (örneğin, https'yi daha az içe aktarılan veriyi (kullanıcı adı, avatar yükleme) görüntülemek / değiştirmek için zorlamıyorum, ancak faturalama ve sitenin diğer bölümlerinde https'yi zorunlu kılıyor (bu şekilde üzerindeki yükü azaltabilirim) bazı sunucular, gerektiğinde / gerektiğinde).
vlad b.

3

HTTPS üzerinden açık metin şifresini HTTP üzerinden karma bir şifre ile değiştirmek istiyorsanız, sorun istiyorsunuz. HTTPS, bir iletişim kanalını açarken rastgele, paylaşılan bir işlem anahtarı oluşturur. (Nispeten) kısa vadeli bir işlem için kullanılan paylaşılan anahtarı kaba zorlamakla oldukça sınırlı olduğunuz için, kırılması zor. Oysa hash'iniz sadece koklanabilir, çevrimdışı olarak alınabilir ve bir gökkuşağı masasında bakılabilir veya uzun bir süre boyunca zorla zorlanabilir.

Ancak, HTTPS üzerinden gönderilen temel bir istemci tarafı şifre gizlemesinin (karma değil) bir değeri vardır. Yanılmıyorsam bu teknik aslında bazı bankalar tarafından kullanılıyor. Bu tekniğin amacı, parolanın kabloyu koklamasını önlemek değildir. Aksine, şifrenin, gördükleri her HTTPS GET / POST isteğini yakalayan aptal casusluk araçları ve tarayıcı eklentileri tarafından kullanılmasını engellemek içindir. Kullanıcı oturumlarından yakalanan 400 MB rasgele GET / POST işlemi olan kötü amaçlı bir web sitesinden alınan bir günlük dosyası gördüm. Yalnızca HTTPS kullanan web sitelerinin günlükte açık metin şifreleri ile görüneceğini, ancak çok basit gizleme (ROT13) içeren web sitelerinin de hemen kullanılmayan şifrelerle görüneceğini hayal edebilirsiniz.


"ancak çok temel gizleme (ROT13) içeren web siteleri de hemen kullanılmayan şifrelerle görünür" - bu, orijinal ifadeyle çelişir. Anahtar, HEMEN kullanımda olmadıklarıdır, ama bu gerçekten nafile. Parola ve onun ROT13'ü eşdeğerdir. ANCAK, şifreyi SHA2 yaparsanız, günlüklerde bulunmayacaktır (böylelikle yöneticileriniz, kullanıcıların diğer sistemler için olası şifrelerini öğrenemezler) ve artık neredeyse her gizlilik yasasını ihlal etmiyorsunuz.
Levente Pánczél

2

Bir https sunucusuna bağlıysanız, sunucu ile tarayıcı arasındaki veri akışı şifrelenmelidir. Veriler, gönderilmeden önce ve alındıktan sonra yalnızca düz metindir. Wikipedia makalesi


Vekiller bu verilere müdahale etmiyor mu?
Jader Dias

Anladığım kadarıyla bunu yapıyorlar, ancak proxy şifreleme / şifre çözme işleminden sorumlu değil ve vicdansız bir proxy olmadığı sürece verileri yalnızca iletiyor. Şifreleme türü ve gücü, hem sunucunun hem de istemcinin neyi destekleyebileceğine bağlıdır.
jac

1
Proxy sorunsuz olsa bile, sunucunun genel anahtarı kullanılarak şifrelenmiş olduğu için verilerin şifresini çözemez. Bir proxy'nin verilerin şifresini çözebilmesinin tek yolu, sunucunun sertifikasını farklı bir anahtarla taklit etmektir
Kiersten Arnold

@Jader. Öyle olsaydı, HTTPS'yi oldukça kötü hale getirirdi. HTTPS ile bir sunucuda kimlik doğrulaması yaptığınızda, belirli bir sunucuya bağlandığınıza ve bir uçtan diğerine şifrelenmiş bir yola sahip olduğunuza dair bir garanti (sertifikanın geçerli olduğunu varsayarak) alırsınız. Varsayımsal olarak ortadaki bir adam sizi kandırmak için yapılabilir ama bu temel bir web proxy'si ile aynı şey değildir.
Peter Recore

2

Feragatname: Kesinlikle bir güvenlik uzmanıyım - ve başkalarının durumumu aşırı temkinli veya iyileştirilebilir olarak eleştirmesi umuduyla gönderiyorum ve bundan ders alacağım. Bununla birlikte, müşterinizden ayrıldığında hash işleminin, veritabanına koymadan önce arka uca hash işlemi uygulamak zorunda kalmayacağınız anlamına gelmediğini vurgulamak istiyorum.

İkisinide yap

İkisini de yapın çünkü:

  1. Devir üzerine yapılan karma, taşımanın güvenlik açıklarını kapatmaya yardımcı olur, eğer SSL bağlantısı tehlikeye atılırsa, yine de ham şifreyi göremezler. Yetkili kullanıcıların kimliğine bürünme açısından önemi olmayacak, ancak kullanıcılarınızın şifrelerinin e-postalarıyla ilişkili olarak okunmasını engelleyecektir. Çoğu kişi en iyi uygulamaları takip etmez ve birçok hesabı için aynı parolayı kullanmaz, bu nedenle bu, ziyaretçileriniz için ciddi bir güvenlik açığı olabilir.

  2. Birisi, bir şekilde veritabanından şifreleri okuyabildiyse (bu olur, SQL enjeksiyonunu düşünürseniz), API'm aracılığıyla kullanıcıların kimliğine bürünen ayrıcalıklı eylemleri yine de yürütemezler. Bunun nedeni hash asimetrisidir; DB'nizde depolanan karmayı bilseler bile, onu oluşturmak için kullanılan orijinal anahtarı bilmezler ve bu, kimlik doğrulama ara yazılımınızın kimlik doğrulaması için kullandığı şeydir. Bu aynı zamanda, hash depolamanızı her zaman tuzlamanızın nedenidir.

Verilen, veritabanınızdan istediklerini okumak için özgürce dizginleri olsaydı birçok başka zarar verebilirlerdi.

Burada vurgulamak istiyorum ki, müşterilerinizden ayrılmadan önce anahtara hashing uygulamasına karar verirseniz, bu yeterli değildir - arka uç hashlemesi çok daha önemlidir ve bu nedenle: Birisi sizin trafiğinizden müşteri, daha sonra passwordalanın içeriğini göreceklerdir . Bunun bir karma veya düz metin olması fark etmez - yetkili bir müşteriyi taklit etmek için harfi harfine kopyalayabilirler. (@ User3299591'in ana hatlarını çizdiği adımları izlemediğiniz sürece ve yapmanızı tavsiye ederim). Öte yandan, DB sütununun özetlenmesi bir gerekliliktir ve uygulanması hiç de zor değildir.



0

Şifreye hashing uygulamak ve şifrelenmemiş bir kanal üzerinden göndermek aslında daha az güvenli olacaktır. Karma algoritmanızı istemciye ifşa edeceksiniz. Bilgisayar korsanları, şifrenin karmasını koklayabilir ve daha sonra onu hacklemek için kullanabilir.

HTTPS kullanarak, bir bilgisayar korsanının parolayı tek bir kaynaktan almasını engellersiniz, çünkü HTTPS her ikisi de şifreli olmak üzere iki kanal kullanır.


1
Aslında bunu sunucuda tekrar hash ederdim ve yine de HTTPS kullanırdım, bu yüzden lütfen bu senaryoyu düşünerek cevabınızı düzenleyin.
Jader Dias

@Jader, önemli olan şu ki, bir saldırganın şu anda ihtiyaç duyduğu tek şey bir şifre değil, ilk karmadır. Aslında, istemci tarafında aldığınız karma artık şifrenin kendisi kadar kullanışlıdır. Yani gerçekten fazla güvenlik kazanmıyorsunuz.
Peter Recore

Hiç kimse jetonun parçalarını göndermemeyi düşündü mü? sanki hash yöntemlerini biliyorsan, bunu neden gönderiyorsun? sunucunun şifresini çözmek için istemci anahtarını bilmemesi gerekir mi?
jemiloii

0

Bir avantaj olup olmadığı ve daha fazla (veya daha az) güvenli olup olmadığı gerçekten uygulamaya bağlıdır. Muhtemelen bir avantajı var, ancak bunu kötü bir şekilde uygularsanız, düz metinli bir şifre bile geçmekten daha az güvenli olan bir çözüm kesinlikle yaratabilirsiniz.

Buna iki tür saldırı perspektifinden bakılabilir - biri ağ trafiğine erişim, diğeri veri tabanına erişim.

Saldırganınız ağ trafiğinin düz metin sürümünü yakalayabilirse, parolanın karmasını görmek, parolayı düz metin olarak görmekten daha güvenlidir. Saldırgan, bu karmayı kullanarak sunucunuzda yine de oturum açabilse de, diğer sistemlerde yararlı olabilecek parolayı belirlemek için bu karmanın kaba kuvvetle kırılması (bazen önceden hesaplanmış) gerekir. İnsanlar farklı sistemlerde farklı parolalar kullanmalıdır, ancak çoğu zaman kullanmaz.

Bir saldırgan veritabanına, belki de bir yedeğin kopyası yoluyla erişim sağladıysa, yalnızca bu bilgiyle oturum açamayacağından emin olmak istersiniz. Örneğin, oturum açma adı ile tuzlanmış bir karma sakladıysanız hash(login_name+password)ve aynı karmayı istemciden doğrudan karşılaştırma için ilettiyseniz, saldırgan rastgele bir kullanıcı seçebilir, karma değerini veri tabanından gönderebilir ve şu şekilde oturum açabilir: bu kullanıcı şifreyi bilmeden ihlalin kapsamını artırır. Bu durumda, parolayı düz metin olarak göndermek daha güvenli olurdu çünkü saldırganın, veritabanının bir kopyasına sahip olsa bile oturum açmak için düz metni bilmesi gerekirdi. Uygulamanın anahtar olduğu yer burasıdır. İster düz metin parolası ister bu parolanın istemci tarafı karmasını gönderin, sunucu tarafında bu değeri karma hale getirmeli ve bu karmayı kullanıcı kaydında depolanan karma ile karşılaştırmalısınız.

Unutulmaması gereken kavramlar:

  • Karma değerinize, tipik olarak satıra özgü olmak üzere, kapsama özgü bir değer katarak bir karmayı "tuzlarsınız". Amacı, temsil ettikleri düz metin değerleri aynı olsa bile birbirlerinden gelen karmaların benzersizliğini garanti etmektir, böylece aynı parolaya sahip iki kullanıcı yine de farklı karmalara sahip olacaktır. Bir tuzu sır olarak ele almak gereksizdir.
  • Kimlik doğrulaması yaparken, istemciden bir parola olarak ilettiğiniz değeri her zaman sunucu tarafında hashleyin (zaten karma hale getirilmiş olsa bile) ve veritabanında depolanan önceden karma bir değerle karşılaştırın. Bu, orijinal şifrenin çift karma bir versiyonunun saklanmasını gerektirebilir.
  • Bir karma oluşturduğunuzda, arama tablolarında önceden hesaplanmış karmalarla eşleşmeye karşı koruma sağlamak için karmaya sunucuya / kümeye özgü bir tuzun yanı sıra satıra özgü bir tuz eklemeyi düşünün.
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.