Güvenli bir şifre geçmişi nasıl uygulanır


23

Parolalar bariz güvenlik nedenlerinden ötürü düz metin olarak saklanmamalıdır: karma tabloları saklamanız gerekir ve ayrıca gökkuşağı tablo saldırılarından kaçınmak için dikkatli bir şekilde karma oluşturmalısınız.

Ancak, genellikle son depolamak için şartı var n asgari karmaşıklığı ve farklı parolalar arasında minimal bir değişiklik şifreler ve uygulamak (Password_1, Password_2, ..., Password_ gibi bir diziyi kullanmasını engellemek n ). Bu, düz metin parolalarıyla önemsiz olacaktır, ancak bunu yalnızca karma'ları depolayarak nasıl yapabilirsiniz?

Başka bir deyişle: Güvenli bir şifre geçmişi mekanizması uygulamak nasıl mümkün olabilir?


2
İlgili: security.stackexchange.com/questions/4704/… (ve BTW bu site bu soru için daha iyi bir yer olabilir). 'En az değişiklik' olduğu sürece, 'en az değişiklik' olarak nitelendirilebilecek tüm seçeneklerin (tanımınıza bağlı olarak bir LOT olabilir!) Oluşturulması ve hashlerin karşılaştırılması için bir alternatif düşünemiyorum. 'Minimal değişim' tanımı nedir?
Kevin Vermeer

7
En yeni n şifrelerin saklanması, yalnızca kullanıcının 1'den n + 1'e kadar olan bir diziyi seçeceği anlamına gelir .
Joachim Sauer

11
Böyle bir şifre politikasının güvenliği arttırdığı konusunda çok şüpheliyim; IMHO, insanların şifrelerini yapışkan notta saklamak için başvurma şanslarını arttırıyor. Kevin'in bağlantısı iyi bir tartışma. @KevinVermeer - Değişim miktarını Levenshtein mesafesi ( en.wikipedia.org/wiki/Levenshtein_distance ) olarak ve ayrıca " mesafeyi değiştir" olarak da ölçebilirsiniz .
Nathan Long

5
Eğer güvenliğiniz bu kadar katıysa, kullanıcı için rastgele bir şifre oluşturabilir, onları kullanmaya zorlayabilir ve düzenli aralıklarla değiştirebilirsiniz. Bu şekilde onların şifresi üzerinde tam kontrol sahibi olursunuz.
Tepki

2
@ nathan: Şifreleri yapışkan bir notta saklamak aslında güvenlidir. Yapışkan nota fiziksel olarak erişmediğiniz sürece şifreye saldırmak mümkün değildir; bu, tehditlerin yaklaşık% 99'unu ortadan kaldırır. Bu notu bir cüzdanın ya da cüzdanın içine koyun ve temelde bir kişinin onu alması için kupalamanız gerekir - yani bir güvenlik ihlali tanımlanır ve hafifletilebilir.
mattnz

Yanıtlar:


22

Karmaları saklayın ve girilen şifreleri, girilen şifreleri doğrulayın, giriş yaparken bir şifreyi doğrulayın. Aynı şekilde, 'minimum' değişikliklerinizi tespit etmek için verilen sayısal desenlere dayanarak verilen 'alternatif' şifreler oluşturmanız gerekecektir.

Giriş yaparken, girilen şifreyi zaten bir karma değere karşı doğruladınız, şifreyi düz metin olarak saklamanız gerekmez. Aynı hile, bir parola değiştirme söz konusu olduğunda işe yarar, sadece girilen ve 'minimum değişiklik' üretilen parolaları tarihsel karmaşalara karşı kontrol edin. Yeni şifre yeterliyse, mevcut şifre karma değerini geçmişe getirin ve yeni şifre için yeni bir karma ile değiştirin.


Kullanıcının girdiği Yani, Password6 Ben sayısal kısmını algılayabilir ve örnek için denemelisiniz Password4 , Password5 , Password7 vb, vb. Bu doğru mu?
Wizard79,

4
@ Lorenzo: Doğru. Alternatif üretmek, istediğiniz kadar karmaşık olabilir, sadece karmaşıklık ve risk arasındaki doğru dengeyi bulduğunuzdan emin olun (risk olma olasılığını ortadan kaldırarak tüm olasılıkları kontrol ederken kullanıcılarınızın 5 dakika beklemesine izin vermeyin).
Martijn Pieters,

Sondaki sayıyı arttırmayı önerdiğimden emin değilim, kullanıcılara önermek için iyi bir öneri - bu biraz tahmin edilebilir. Ve eğer üstelik daha fazla olur, böylece kullanıcılara bunu yapmalarını söylüyorsanız.
Wyatt Barnett

2
@WyattBarnett: Kimse kullanıcılara bunu yapmasını söylüyor. Önemli olan, kullanıcıların bunu yaptığını tespit etmek ve 'artan' şifrenin kullanılmasını engellemektir.
Martijn Pieters

Ah, burada tamamen yanlış bir şeyler okudum. Üzgünüm.
Wyatt Barnett

28

Kullanıcı şifresini değiştirdiğinde, önceki şifrelerini girmelerini isteyin. Artık iki kişiye erişimin var.Veritabanınıza düz metin şifreleri kaydetmeseniz bile, düz metin şifresine .

Bu iki parolada istediğiniz doğrulamayı yapın. Bu, kullanıcının iki parola arasında geçiş yapmasını engellemeyecektir (son ekiyle - diğer cevaplardaki önerilerde doğrudan değişimleri önleyebilirsiniz), ancak daha sert vakaları önleyecektir.


Daha önce n şifrelerinizle test etme zorunluluğunuz yoksa, bu kesinlikle akıllı bir çözümdür , ancak alternatifleri tam zamanında oluşturma önerisi daha iyidir. Ancak her iki şifrenin alternatiflerini oluşturmak daha da iyi!
Wizard79,

2
@Lorenzo: Fikir, önceki şifrelere karşı doğrudan bir test yapmanız ve son şifreye karşı daha güçlü bir test yapmanızdır. Bu bir uzlaşma.
Brian,

Evet. Eğer mevcut şifreleri ise potatoSalad1ve güncellemek istiyorlarsa potatoSalad2, değişikliğin çok küçük olduğunu söylüyorsunuz, çünkü o anda hem düz metin şifreleriniz var. Ancak bundan daha da öte, yalnızca karmaşanız vardır ve karma değerlerin doğası, iki karma değerin girdi olarak benzer veya tamamen farklı bir düz metin içerip içermediğini söyleyememenizdir.
Nathan Long

7

@ martijnPieter'in cevabını eklemek için, asgari değişiklik, yeni ve önceki şifrelere (ki her ikinize de sahip olduğunuz) dayalı kısa bir kaba kuvvet uygulayarak uygulanabilir.

örneğin, tüm şifreleri bir hamming mesafesi ile yineleyebilirsiniz , yeni şifreden 1 veya 2 görebilirsiniz.

ancak bunun şifreleri olan kullanıcıların güvenini azaltabileceğini unutmayın (aslında yeni bir şifreyi reddetmek için önceki bir şifreyi geri alabileceğinizi söylediğiniz gibi).


Ancak, Şubat2012 -> Mart2012 veya Cuma-09-28-12 -> Sal-11-27-12 (tarihler), Password_Alpha -> Password_Beta, Pass_1111 -> Pass_2222, Pass_qwer, Pass_tyui gibi daha büyük Hamming mesafeleri olan birçok sekans vardır. Pass, _op [] veya Onbir -> Oniki (alternatif sayma sistemleri) veya FrankSmith -> FredJones -> FriarTuck veya öfke -> hayvan -> elma (bir şirket dizinindeki isimler veya sözlükteki kelimeler) Önceki parola (lar) kolayca tahmin edebiliyordu ancak algoritmanızın üretme işlemi oldukça zor olacaktı.
Kevin Vermeer

@KevinVermeer daha sonra varyasyon üretecinizdekileri hesaba katar ve asla her şeyi alamayacağınızı kabul edin
cırcır ucube

+1 güven azaltmak için. Şifremin üç ay önce kullandığım şifreyle çok fazla olduğunu söyleyen bir şey gördüğümde, anında onları tersine saklıyorlar mı yoksa harika bir programcıları var mı diye merak ediyorum. Şüphecilik genellikle kazanır.
Tim Post

5

Bu gerçekten @ Brian'ın akıllı cevabına bir zeyilname. Ayrıca eski parolaları geçerli olana dayanarak zorla kullanmanın zorluğuyla ilgili ayrıntılar eklemek için @Martijn Pieters'a ve "hamming mesafe" için @ cırcır kafasına da hitap eder. Cevabımı silmiyorum çünkü onları desteklemenin ilginç bir geçmişini düşünüyorum.

Son teknoloji parola depolaması, her kullanıcı için benzersiz tuzlu (128-bit +) güçlü bir tek yönlü şifreleme karma (SHA-512 +) çoklu turlarının kullanılmasını gerektirir. Ancak her şifre hakkında ek bilgi saklamak için cazip olmayın. Her bir şifre hakkında ne kadar fazla bilgi depolarsanız, karma algoritmanızın güvenliğini o kadar zayıflarsınız.

Örnek

Bir şifreyi zorla zorlamanın ne kadar kolay olduğunu düşünün:

  • 7 karakter uzunluğunda
  • Karakter 3-5, büyük harf (4 küçük)
  • 1 ve 7, sayıdır
  • 6 bir semboldür

Bir ABD klavyesinde yazdırılabilir 95 karakter vardır, bu nedenle parolanın 7 karakter uzunluğunda olduğunu bilmek 95 ^ 7 = 69,833,729,610,000 = 7x10 ^ 13 permütasyondur. Gerçekten rastgele olsaydı, bunu tek bir 3GHz işlemcide kırmak bir yıl alabilir. Fakat:

  • Yalnızca 26 büyük harf ve 26 küçük harf karakteri vardır
  • Bu iki sayı için 100 olasılık veren sadece 10 rakam var.
  • Sadece 32 sembol var

Yani (@Hellion sayesinde düzeltildi):

         26^4 (charcters 2-5 are known upper or lower-case)
        x 100 (characters 1 & 7 are digits)
        x  32 (character 6 is a symbol)
         ====
1,462,323,200 possible passwords.

Çatlaması 50.000 kat daha kolay! Bu durumda benzer şifreleri önlemek için iyi bilgi depolamak bir yıldan birkaç saate kadar 7 karakterli bir şifre için çatlak sürenizi aldı. Tüm şifrelerinizin şifresini çözerek, güçlü bir çok işlemcili masaüstünde, iyi bir ekran kartına ve biraz sabrına sahip olmak artık çok kolay. Umarım bu basit örnek, benzer şifreleri ne kadar anlamlı bir şekilde karşılaştırabileceğinizi gösterir, hash değeriniz o kadar az güvende olur.

Güçlü Hashing'in Önemi

Şifreli veri tabanları düzenli olarak çalınır, her ay haberlerde büyük miktarda parçalanır. Heck, daha geçen ay SC'nin durumu herkesin sosyal güvenlik numaralarını kaybetti - ayy! Bu ihlallerin kaç tanesini kapsıyor?

Kapanış Düşüncesi

Benim için en korkutucu şey, insanların birden fazla site için aynı veya benzer şifreyi seçmesidir. Bu durumu önlemenin kanıtlanmış bir yöntemini görmek isterdim, ancak en yaygın kötü şifreleri önlemenin tek bir kullanıcının aynı sitedeki kötü şifrelerini tekrar kullanmasını önlemekten daha fazla yardımcı olacağını düşünüyorum. Önerebileceğim en iyi, her bir kullanıcı için oldukça rasgele şifreler üreten ve bunları güvenli bir şekilde saklayan güvenli bir şifre yöneticisi kullanmak için şirket genelinde bir politikadır.


1
küçük nit: şifre olasılıkları hala çarpıcıdır, yani (26 ^ 4) * 100 * 32 = 1,462,323,200. Çatlama (95 ^ 7) olasılıklarının bir yıl sürdüğünü varsayarsak, bu daha az sayıda olasılığın kırılması yaklaşık 11 dakika sürer.
Hellion

@Hellion - Hata! Gösterdiğin için teşekkürler. Düzeltdim.
GlenPeterson,

1

Öncelikle, en son "n" önceki şifreler için hash'leri saklayabilir, böylece yeni şifrelerinin önceki şifreyi kopyalayıp kopyalamadığını kontrol edebilirsiniz. Ayrıca, geçerli şifrelerinin düz bir metnine de sahipsiniz (çünkü giriş yapmış veya şifre değiştirme isteklerini doğrulamanız için size sağladıkları için) ve yeni şifreleri sayesinde, bu iki şifre arasındaki minimum değişiklikleri kontrol edebilirsiniz.

Eğer (sizin için) bu iki şifreyi doğrudan önceki "n" şifrelerle karşılaştırmanız çok önemliyse, daha sonra alabilmek için bu şifreleri (şifreli) saklamanız gerekir.

Bunu yapmak için bir güvenlik açığı olarak görünse de, yeterli güvenliği sağlamak için şifreleme yöntemleri uygulanabilir.

  1. Her şifreyi (şifreli), son "n" şifreleri için saklayın.
  2. En son parolanın oluşturulduğu tarih ve saati saklayın.
  3. En son şifrenin karma değerini saklayın.
  4. Geçerli şifrenin toplamını (tuzlu) ve şifre oluşturma zaman damgasını ve belki de hesap numarası veya e-posta adresi gibi bir şeyi kullanarak tüm şifreleri şifreleyin.
  5. Her yeni şifre oluşturulduğunda tüm şifreleri şifreleyin ve yeniden şifreleyin.

Ardından, şifre değiştirildiğinde, eski şifrelerin tümünü şifreleyebilir ve minimum değişiklik testlerinizi yapabilirsiniz.

Şimdi, eğer biri bu kişinin şifresine sahipse ve gerekli tüm detayları bilseydi, bu bilgiyi bu kişi için şifresini çözebilirdi. Ancak, zaten bu kişinin şifresi varsa, bu kişi olarak giriş yapabilir ve bu kişinin hesabına erişebilir.

Ayrıca, eski şifreler için kesinlikle düz metin olarak saklanmaları gerekmeyebilir. Onlar karışık bir şekilde saklanabilir. Veya şifredeki karakterlerin alfabetik bir listesi olarak saklanır.

Bunun genel davada yapılması önerilen bir şey olduğunu söylemiyorum, ancak açıkladığınız görevin sizin durumunuzda gerekli olduğunu varsayarsak, o zaman bu bazı güvenlik önlemleriyle başarmanın bir yoludur.


Bu cevap, güvenlik açısından birçok korkunç öneride bulunuyor. Parolaları kolayca deşifre etmemeli, bunları güçlü bir şekilde şifrelemek yerine "gizlenmiş bir şekilde" saklamamalıyız.
user45623,
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.