Decryptable şifreleri saklamak için güvenli yolu

5 Cevap php

PHP bir uygulama yapıyorum ve farklı sisteme kullanıcı veritabanına geçiş ile gelecekte sorunları önlemek amacıyla şifreleri şifresini çözmek mümkün olmalıdır bir gereklilik yoktur. Bu gelecekte sistemin şifre yöntemini değiştirmek mümkün olmadığını düşünün ve şifreleri oluşturulan olması için düz metin şifreleri gerekir.

Plan sunucusunda depolanan bir genel anahtar ile kullanıcının parolasını şifrelemek için. Doğrulama giriş şifreleyerek ve sonuçları karşılaştırılarak yapılır. Yapılan NO şifre çözme vardır. Deşifresi özel anahtar yetenekli sonraki kullanım için off-site saklanır.

Ne şifreleme / şifre çözme algoritması önerirsiniz? Şifreli şifreleri özel anahtar saldırganın mevcut olmadığı dikkate alındığında (MD5/SHA1) karma hala kadar güvenli?

5 Cevap

Ben Jammer yaklaşımını yeniden ifade edeceğiz -

  1. Bir genel / özel anahtar çifti oluşturmak. Sert-kodu web sunucusu üzerinde ortak anahtar. Webserver / veritabanı / herhangi bir geliştirici ulaşmak dışında, fiziksel bir banka soyunma özel anahtarı saklayın.
  2. Kullanıcı kayıtları, ortak anahtarını kullanarak şifreyi + tuz şifrelemek. Bu adım, bir müzakere algoritmasının ile aynıdır. Veritabanında şifreli parola + tuz saklayın.
  3. Eğer şifreyi doğrulamak istediğinizde, tekrar şifrelemek ve veritabanında saklanan değere karşılaştırın.

Bir saldırganın veritabanını alırsa o özel anahtar yok çünkü, o şifreleri şifresini çözemez. Onun ulaşamayacağı bir banka kasasında çünkü o özel anahtarı alınamıyor. İki özdeş şifreleri hala çünkü tuzun farklı veritabanında saklanır.

Gelecek birisi zaman herhangi bir noktada özel anahtarı istismar ve tüm şifreleri erişim alabilir çünkü ben yukarıdaki yaklaşım kullanarak tavsiye etmiyoruz.

Eğer özel anahtar hep özel kalacağını garanti Ama eğer, o zaman ben bir teknik kusur görmüyorum.

Ben tabii, yanlış olabilir.

Şifresi yok. Eğer gelecekte şifre sistemini değiştirmek gerekiyorsa, bir alan olarak adlandırılan saklama_türü (ya da herneyse) ekleyin.

Eğer şifreleri değiştirmek için gerektiğinde bir eski şifre eğer Sonra, kontrol edecek. Eğer öyleyse, onlar giriş dahaki sefere, sen şifre kodlamasını değiştirebilirsiniz. Aksi takdirde, yeni sistem ile giriş.

Şifreleri şifresini çözmek için güçlü olmak kötü bir fikir olduğunu (ve onları şifresiz saklamak daha iyi olurdu bunu yapmanın bir yolu, muhtemelen orada değil). Ana sorun depolama yöntemini değiştirirseniz şifreleri kullanmak için güçlü olmak gibi geliyor. Sadece şifre ile parola karma konum nasıl, Linux ne mağaza yapmak. Yani, örneğin $ 1 $ tuz $ karma MD5. Eğer şifreler nasıl depolandığı değiştirmeye karar verirseniz bu şekilde, hala eski şifreler karşı kontrol edebilirsiniz (ve birisi doğru günlükleri varsa, yeni karma ile şifrelerini güncelleyebilirsiniz).

Çoğu uygulama için bu şifreleri SHA-1 sağlamalarının depolamak için fazlasıyla yeterli.

Evet, orada çoğu karma algoritmaları bilinen çarpışmalar, ama bu gerçek bir saldırı vektörü anlamına gelmez. Eğer karma tuzlama konum, özellikle de.

Sizin tuz için: dışarıdan erişilebilir değil bir yapılandırma dosyasında saklayın ama PHP kurulumu tarafından okunabilir.

Gördüğüm tek sorun orada çoğu kamu-özel anahtar şifreleme kodu ortak anahtarını kullanarak bir simetrik anahtar şifrelemek ve ardından mesajı şifrelemek için simetrik anahtar kullanmak, o şifresini özel anahtar güvenmek olacaktır.

Doğrudan şifresini + tuz şifrelemek için ortak anahtarı kullanmak istiyorum.

Yani sisteme karşı saldırılar indirgenebilir:

  1. Genel / özel anahtar şifreleme karşı saldırılar
  2. Özel anahtar deposunda karşı saldırılar.