SORU
15 HAZİRAN 2012, Cuma


Java arasındaki fark.açıklama.Rastgele ve java.güvenlik.SecureRandom

Benim takım rastgele simgeleri oluşturan bazı sunucu tarafı kodu (Java) teslim aldım ve aynı ile ilgili bir soru var

Bu simgeleri amacı oldukça hassas - oturum kimliği için kullanılan, reset bağlantıları vs şifre. Şifreli olarak birisi onları tahmin önlemek için ya da kaba rastgele onların önemli güç olmak gerekiyor. Belirteç olduğu bir "uzun" yani 64 bit uzunluğundadır.

Kod şu an java.util.Random sınıfı bu belirteçleri oluşturmak için kullanır. java.util.Random açıkçası şu: devletler belgeleri (http://docs.oracle.com/javase/7/docs/api/java/util/Random.html)

Java örnekleri.açıklama.Rastgele şifreleme açısından güvenli değildir. Yerine SecureRandom şifreli olarak güvenli rasgele bir dizi güvenlik duyarlı uygulamalar tarafından kullanım için jeneratör almak için kullanmayı düşünün.

Ancak bu şekilde bu kodu kullanmakta java.util.Random Bu başlatır java.security.SecureRandom sınıf ve kullanır SecureRandom.nextLong() yöntem elde etmek için tohum için kullanılan başlatmasını java.util.Randomsınıf. java.util.Random.nextLong() yöntem belirteci oluşturmak için kullanır.

Yani şimdi benim sorum hala java.util.Random java.security.SecureRandom kullanarak seribaşı olmak olduğu göz önüne alındığında güvensiz mi? java.security.SecureRandom) sadece belirteçleri oluşturmak için kullandığı kodu değiştirmek gerekiyor?

Saygılar

EDİT: Tekrar @Tom'un soru - şu Anda kod tohum bir kez başlangıçta Random

CEVAP
15 HAZİRAN 2012, Cuma


Standart Oracle java.util.Random rastgele değerler üretmek için Doğrusal Congruential Jeneratör denilen 7 uygulaması ile İLGİLENİYORUZ.

Yöntemi hakkında bir yorum java.util.Random kaynak kodu (ile İLGİLENİYORUZ 7u2), alınan rasgele değerler üretir hangisi protected int next(int bits),:

Bu doğrusal congruential rastgele sayı üreteci gibi. D. H. Lehmer tarafından tanımlanan ve Donald E. Knuth tarafından tanımlanan . ben^>Bilgisayar Programlama SanatıCilt 3: . ben^>Seminumerical Algoritmaları, bölüm 3.2.1.

Doğrusal Congruential Jeneratör öngörülebilirlik

Hugo Krawczyk bu LCGs tahmin edilebilir hakkında oldukça iyi bir kağıt yazdı (tahmin etmek için Nasıl"congruential jeneratör"). Eğer şanslı ve eğer ilgileniyorsanız, hala web üzerinde ücretsiz indirilebilir bir sürümünü bulabilirsiniz. Ve gerektiğini açıkça gösteren çok fazla araştırma varaslakritik güvenlik amaçlı bir A kullanın. Bu da rastgele sayılar anlamına gelirşimdi, oturum için istemediğin bir şey gibi Kimlikleri. tahmin edilebilir değil mi

Nasıl Doğrusal Congruential Jeneratör kırmak için

Saldırgan, A için tam bir döngüsü sonra tekrar beklemek zorunda kalacak varsayımı yanlış. Hatta optimal bir döngü (tekrarlama ilişkisi içinde modül m) çok kolay tam bir döngüsü daha az zamanda gelecekteki değerleri tahmin etmek çok zordur. Tüm bunlardan sonra, sadece kolay hale gelen çözülmesi gereken modüler denklemler, bir grup A yeterince çıkış değerleri gözlenen bulmaz.

İle artırmak değil güvenlik "daha iyi" tohum. Bu sadece rastgele bir değer ile tohum SecureRandom tarafından oluşturulan hatta ölmeden birkaç kez haddeleme tarafından değer üretmek önemli değil.

Saldırganın sadece çıkış değerleri gözlenen gelen tohum bulunur. Bu alırönemli ölçüde daha azjava.util.Random bu durumda 2^48 saat daha. Kafirler bu Random gelecekteki çıkışları sadece iki gözlem tahmin edebilirsiniz gösterilen yere experiment, denemek olabilir(!) çıkış 2^16 kabaca zaman değerleri. Modern bir bilgisayar üzerinde bir saniye bile rasgele sayılar çıktı, şu anda tahmin etmek için alır.

Sonuç

Geçerli kodunuzu değiştirin. SecureRandom kullanın. O zaman en azından sonucu tahmin etmek zor olacak küçük bir garanti olacaktır. Eğer şifreli olarak güvenli bir PRNG (senin durumunda, sizin istediğiniz de buydu) özelliklerini istiyorsanız, o zaman SecureRandom ile sadece gitmek zorunda. Kullanılması gerektiği gibi değiştirme hakkında zeki olmak hemen hemen her zaman bir şey daha az güvenli neden olur...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AceHoodVEVO

    AceHoodVEVO

    12 Mayıs 2009
  • Ben Vivona

    Ben Vivona

    24 Ocak 2010
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013