Bir işletim sistemi rastgele tohumlar için entropi nasıl oluşturur?


19

Linux'ta, dosyalar /dev/randomve/dev/urandom dosyalar sahte rasgele baytların sırasıyla engelleme ve engellememe (sırasıyla) kaynaklarıdır.

Normal dosyalar olarak okunabilirler:

$ hexdump /dev/random
0000000 28eb d9e7 44bb 1ac9 d06f b943 f904 8ffa
0000010 5652 1f08 ccb8 9ee2 d85c 7c6b ddb2 bcbe
0000020 f841 bd90 9e7c 5be2 eecc e395 5971 ab7f
0000030 864f d402 74dd 1aa8 925d 8a80 de75 a0e3
0000040 cb64 4422 02f7 0c50 6174 f725 0653 2444
...

Diğer birçok Unix sağlamak varyantları /dev/randomve /dev/urandomengelleme / engellenmeyen ayrım yapmaksızın de.

Windows eşdeğeri CryptGenRandom()işlevdir .

İşletim sistemi nasıl sahte rasgele üretiyor?


Hangi araştırmayı yaptınız? Wikipedia gibi standart sitelere veya Security.SE veya Crypto.SE'ye baktınız mı? Wikipedia'nın bu konuda bir makalesi vardır: en.wikipedia.org/wiki//dev/random . Wikipedia sorunuzu cevaplayan bir makaleye sahip olduğunda, bu yeterince araştırma yapmamanın tanımıdır. (Burada sormadan önce önemli miktarda araştırma yapmanızı ve yaptığınız soru araştırmasında bize göstermenizi bekliyoruz.)
DW

Yanıtlar:


31

OS entropi nasıl oluşturduğunu (bu gerçekten olmalıdır: Başlık ve Sorunuzun vücut iki farklı soru sormak edinir entropi) ve bu entropi gelen sözde rastgeleliğine nasıl oluşturduğu. Farkı açıklayarak başlayacağım.

Rasgelelik nereden geliyor?

Rasgele sayı üreteçleri (RNG) iki tiptir:

  • Deterministik rasgele bit üreteçleri (DRBG) veya bunların kombinasyonları olarak da adlandırılan sözde rasgele sayı üreteçleri (PRNG), sabit boyutlu bir değişken iç durumu koruyan ve çıkışlarını bu durumdan hesaplayan deterministik algoritmalardır.
  • “Gerçek” rasgele sayı üreteçleri olarak da adlandırılan donanım rasgele sayı üreteci (HRNG), fiziksel olaylara dayanır. “Doğru” bir yanlış adlandırmadır, çünkü gerçekten rasgele olduğu bilinen hiçbir bilgi kaynağı yoktur , sadece tahmin edilebilir olduğu bilinmeyen bilgi kaynakları vardır.

Fiziksel olayların simülasyonları gibi bazı uygulamalar, istatistiksel testlerden geçen rastgele sayılarla içerik olabilir. Şifreleme anahtarlarının oluşturulması gibi diğer uygulamalar daha güçlü bir özellik gerektirir: öngörülemezlik . Öngörülemezlik (sadece) istatistiksel bir özellik değil, bir güvenlik özelliğidir: bir rakip, rastgele sayı üretecinin çıktısını tahmin edemez. (Daha doğrusu, bir rakip için her bir RNG çıktısını tahmin etme olasılığını ölçerek RNG'nin kalitesini ölçebilirsiniz. Olasılık 1/2'den farklıysa, RNG kötüdür.)

İyi istatistiksel özelliklere sahip rastgele veriler üreten fiziksel fenomenler vardır - örneğin, radyoaktif bozunma veya arka plan gürültüsü veya borsa dalgalanmalarının bazı astronomik gözlemleri. Bu tür fiziksel ölçümler , sapmalı olasılık dağılımlarını tekdüze bir olasılık dağılımına dönüştürmek için koşullandırma ( beyazlatma ) gerektirir . Herkes tarafından bilinen fiziksel bir ölçüm kriptografi için iyi değildir: borsa dalgalanmaları geohashing için iyi olabilir , ancak bunları gizli anahtarlar oluşturmak için kullanamazsınız .

Kriptografi gizlilik gerektirir : bir rakip koşullandırmaya giren verileri bulamamalıdır. Var kriptografik olarak güvenli yalancı rasgele sayı üreteçleri , çıkış yanında kriptografik uygulamalarda kullanım için uygun olan PRNG algoritmaları (CSPRNG) İstatistiksel olarak anlamlı bir özelliklere sahip olan . CSPRNG'yi kriptografik olarak güvenli kılan özelliklerden biri , çıktısının bir düşmanın iç durumu yeniden yapılandırmasına izin vermemesidir (tüm bitleri bilmek, ancak CSPRNG tarafından üretilen bir tanesi eksik biti bulmaya yardımcı olmaz). CSPRNG'nin nasıl yapılacağına girmeyeceğim çünkü bu kolay bir şey - profesyonel kriptograflar tarafından verilen tarifleri takip edebilirsiniz ( standart kullanınalgoritması, örneğin NIST SP 800-90A'dan Hash_DRBG, HMAC_DRBG veya CTR_DRBG ) veya ANSI X9.31 PRNG . CSPRNG, güvenli olması için durumunun iki özelliğine ihtiyaç duyar:

  • Devlet başlangıçtan ve her zaman gizli tutulmalıdır (devletin maruz kalması geçmiş çıktıları göstermeyecektir).
  • Durum doğrusal olmalıdır: RNG asla aynı durumdan iki kez başlatılmamalıdır.

Rasgele sayı üretecinin mimarisi

Uygulamada, hemen hemen tüm iyi rasgele sayı üreteçleri bir CSPRNG'yi bir veya daha fazla entropi kaynağı ile birleştirir . Kısaca söylemek gerekirse, entropi, bir veri kaynağının öngörülemezliğinin bir ölçüsüdür. Rasgele sayı üretecini yalnızca bir donanım RNG'sine dayandırmak zordur:

  • Ham fiziksel verilerin olasılıklı verileri eşit bir dağılıma dönüştürmek için yine de koşullandırmaya ihtiyacı vardır.
  • Rasgelelik kaynağından elde edilen çıktı gizli tutulmalıdır.
  • Entropi kaynakları talebe göre genellikle yavaştır.

Böylece bir işletim sistemindeki RNG neredeyse her zaman şu şekilde çalışır :

  1. Öngörülemeyen bir iç durum oluşturmak için yeterli entropi biriktirin .
  2. Toplanan entropiyi tohum olarak, yani dahili durumun başlangıç ​​değeri olarak kullanarak bir CSPRNG çalıştırın .
  3. İsteğe bağlı olarak, dahili entropiyi periyodik olarak dahili duruma karıştırın. (Bu kesinlikle gerekli değildir, çünkü entropi ölçülebilir bir oranda “tüketilmez” . Tüm sistemden ödün vermeden RNG durumunu sızdıran belirli tehditlere karşı yardımcı olur.)

Rastgele sayı üretme hizmeti bir işletim sisteminin işinin bir parçasıdır, çünkü entropi toplama donanıma erişim gerektirir ve entropi kaynakları paylaşılan bir kaynak oluşturur: işletim sistemi bunları bir araya getirmeli ve uygulamalara uyacak şekilde çıktı almalıdır. İşletim sisteminde entropi kaynaklarının sözde rastgele koşullandırılması gereklidir; şifreleme açısından da güvenli olabilir, çünkü bu temelde daha zor değildir (ve uygulamaların birbirine güvenmediği işletim sistemlerinde gereklidir; tam işbirliği sistemlerinde, her uygulama işletim sistemi kendi CSPRNG'sini dahili olarak çalıştırmalıdır. yine de bir tane sağlamadı).

Kalıcı depolamaya sahip çoğu sistem, önyükleme yaparken diskten bir RNG tohumu yükleyecektir (her türlü kalıcı depolama için bir kısaltma olarak “disk” kullanacağım) ve o tohumdan üretilen bazı taze sahte rasgele verilerle tohumun üzerine yazacak, veya eğer o tohumdan ve başka bir entropi kaynağından üretilen rastgele veriler mevcutsa. Bu şekilde, yeniden başlatma sonrasında entropi mevcut olmasa bile, önceki oturumdaki entropi yeniden kullanılır.

Kaydedilen durum hakkında biraz dikkat edilmelidir. Devletin doğrusal olması gerektiğini nasıl söylediğimi hatırlıyor musunuz? Aynı disk durumundan iki kez önyükleme yaparsanız, aynı RNG çıkışlarını alırsınız. Bu ortamınızda bir olasılıksa, başka bir entropi kaynağına ihtiyacınız vardır. Yedeklerden geri yüklerken veya sanal bir makineyi klonlarken dikkatli olun . Klonlama için bir teknik, depolanmış entropinin öngörülebilir ancak benzersiz bazı çevresel verilerle karıştırılmasıdır (örn. Zaman ve MAC adresi); çevresel veriler öngörülebilirse, saklanan VM durumuna sahip olan herkes çatallı VM örneğinin tohumunu yeniden oluşturabilir.

Entropi kaynakları

Entropi kaynaklarını bulmak (ve doğru şekilde kullanmak), bir işletim sistemindeki rasgele sayı üretmenin en zorlu kısmıdır. Mevcut entropi kaynakları mutlaka donanıma ve donanımın çalıştığı ortama bağlı olacaktır.

Şanslıysanız, donanımınız entropi kaynağı olarak kullanılabilen bir çevre birimi sağlar: özel veya yan amaçlı bir donanım rasgele sayı üreteci . Örneğin:

NIST SP800-90B , donanım RNG için tasarım yönergeleri sağlar. Bir donanım RNG'sini değerlendirmek zordur . Donanım RNG tipik olarak dikkatle kullanılması gereken hassas hayvanlardır: birçok tip, önyüklemeden sonra bir süre ve dengeyi bozmak için okumalar arasında bir süre gerektirir, genellikle sıcaklık gibi çevresel koşullara duyarlıdırlar.

Ivy Bridge mimarisini temel alan Intel x86-64 işlemciler , termal gürültüyle beslenen bir CSPRNG'den çıktı sağlayan RdRandtalimatları sağlar . Çoğu akıllı telefon işlemcisi, bir donanım entropi kaynağı içerir, ancak Android bunu her zaman kullanmaz.

Güçlü bir entropi kaynağı olmayan sistemler, zayıf entropi kaynaklarını birleştirmek ve yeterli olacaklarını ummak ( çok güçlü bir kelime olmasını sağlamak ) ile ilgilidir. Rastgele fare hareketleri istemci makineler için popülerdir ve fareyi hareket ettirmenizi isteyen bazı şifreleme programlarının güvenlik şovunu görmüş olabilirsiniz (herhangi bir 21. yüzyıl PC işletim sisteminde işletim sistemi rahatsız edilmeye gerek kalmadan entropi birikmiş olsa bile ).

Bir örneğe bakmak istiyorsanız, Linux'a bakabilirsiniz, ancak bunun mükemmel olmadığına dikkat edin . Özellikle, /dev/randomçok sık bloklar (çünkü aşırı muhafazakar entropi kavramı ile yeterli entropi mevcut olana kadar bloke olur ), ancak /dev/urandomilk önyükleme dışında hemen hemen her zaman iyidir, ancak yeterli entropiye sahip olmadığında hiçbir belirti vermez. Linux'un birçok HRNG aygıtı için sürücüleri vardır ve çeşitli aygıtlardan ( giriş aygıtları dahil ) ve disk zamanlamalarından entropi biriktirir .

(Gizli) kalıcı depolama alanınız varsa, yukarıda belirtildiği gibi entropiyi bir önyüklemeden diğerine kaydetmek için kullanabilirsiniz. İlk bagaj hassas bir saati: sistemi, özellikle esas olarak aynı şekilde fabrikanın dışında çalışırlar seri üretim cihazlarında, bu noktada oldukça öngörülebilir halde olabilir. Kalıcı depolamaya sahip bazı gömülü cihazlara fabrikada bir ilk tohum eklenir (fabrikada bir bilgisayarda çalışan bir RNG tarafından üretilir). Sanallaştırılmış sunucu ortamlarında, ana makine veya bir entropi sunucusundan sanal makine başlatılırken ilk entropi sağlanabilir.

Kötü tohumlanmış cihazlar uygulamada yaygın bir sorundur - genel RSA anahtarları üzerinde yapılan bir çalışmada, birçok sunucu ve cihazın zayıf bir RNG ile üretilen anahtarlara sahip olduğu, büyük olasılıkla yetersiz tohumlanmış iyi bir PRNG olduğu bulunmuştur. Bir OS tasarımcısı olarak, bu sorunu kendi başınıza çözemezsiniz: RNG'nin ilk önyüklemede doğru şekilde tohumlanmasını sağlamak dağıtım zincirini kontrol eden kuruluşun görevidir . Bir OS tasarımcısı olarak göreviniz, ilk tohumu sağlamak için bir arabirim de dahil olmak üzere uygun bir RNG sağlamak ve RNG doğru şekilde tohumlanmadan önce kullanılıyorsa uygun hata sinyalini sağlamaktır.


5
Korkunç yıldız cevabı.
Adam Maraş

Bu == harika.

"Gerçekten rastgele olduğu bilinen hiçbir bilgi kaynağı yok" diye katılmıyorum. Kuantum mekaniğinin yaygın (Kopenhag) yorumu, olası sonuçların üst üste binmesi olan bir sistemi ölçmenin sonucunun, asla sonucu tahmin edemeyeceğimiz, ancak sadece bir olasılık dağılımı verebileceğimiz anlamıyla gerçekten rastgele olduğunu söylüyor. . Kaynak: fizik mezunu öğrencisi burada
balu

3

Gilles cevabına ek olarak, entropi oluşturmak için kesmeler de kullanılabilir. Örneğin Linux'ta, bir kesme işleyicisi eklerken, bu kesintinin oluşmasının çekirdeğin entropi havuzuna bir katkı olarak kullanılıp kullanılmayacağını tanımlayabilirsiniz.

Tabii ki bu asla bir saldırganın belirleyebileceği kesintiler için geçerli olmamalıdır. Örneğin, ilk bakışta ağ trafiği (yani ortaya çıkan kesintileri) iyi bir rastgelelik kaynağı gibi görünmektedir. Ancak, bir saldırgan trafiğinizi daha sonra bazı işlemler için ihtiyaç duyduğunuz rasgele tahmin edebilecek şekilde değiştirebilir.

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.