GPG anahtarları için “rasgele sayı entropisi” eklensin mi?


10

Aşağıdaki videoda: Linux NASIL: Verilerinizi PGP ile Koruyun, Bölüm 2 , nasıl bir anahtar çifti oluşturacağınız gösterilir gpg. Yaklaşık olarak 1:50, eğitmen şunları söylüyor:

Anahtar üretilirken, anahtar çiftinin oluşturulması için biraz daha rasgele bir sayı entropisi vermek için farenizi biraz hareket ettirmek iyi bir fikirdir .

Bu bana bir efsane gibi geliyor, çünkü özellikle komut satırı araçları genellikle imleçten etkilenmemelidir. Öte yandan, Linux'un rasgele sayı üretecinin GUI tarafından paylaşılmış veya ondan bağımsız olarak nasıl çalıştığına dair hiçbir fikrim yok. İddia ettiği şeyde herhangi bir hisse senedi var mı, yoksa bu bir kargo kült programlama örneği mi?


Bir yan soru olarak, bu "kentsel mit" in doğru kullanımı mıdır ya da "hesaplama içindeki mit" için benzer bir cümle var mı?
IQAndreas

1
Bence bu ifade şehir efsanesi ; Kentsel efsaneyi hiç duymadım . Bkz. En.wikipedia.org/wiki/Urban_legend Bilgi işlemde, "kargo kültü" ifadesi uygun olabilir.
derobert

Yanıtlar:


8

Bunun bir gerçeği vardır, aslında efsaneden daha doğrudur, ancak yine de ifade, olup bitenler hakkında temel bir yanlış anlaşılmayı yansıtır. Evet, GPG ile bir anahtar üretirken fareyi hareket ettirmek iyi bir fikir olabilir. Evet, fareyi hareket ettirmek rastgele sayıları rastgele yapan bir entropiye katkıda bulunur. Hayır, fareyi hareket ettirmek anahtarı daha güvenli hale getirmez.

Kriptografi için uygun olan tüm iyi rastgele jeneratörler ve Linux'lar bu kategoride, iki bileşene sahiptir:

  • Deterministik olmayan bir entropi kaynağı. Entropinin amacı, rastgele sayı üretecini öngörülemeyen verilerle önyüklemektir. Entropi kaynağı deterministik olmamalıdır: aksi takdirde, bir düşman aynı hesaplamayı yeniden üretebilir.
  • Değişen bir iç durumdan belirleyici bir tarzda öngörülemeyen rasgele sayılar üreten bir sözde sayı üreteci .

Entropi, bilgisayarın dışındaki bir kaynaktan gelmek zorundadır. Kullanıcı entropi kaynağıdır. Kullanıcının yaptığı şey çoğunlukla rastgele değildir, ancak tuş vuruşlarının ve fare hareketlerinin ince zamanlaması biraz rastgele olacak kadar öngörülemez - çok rastgele değil, ama yavaş yavaş birikir. Diğer potansiyel entropi kaynakları arasında ağ paketlerinin zamanlaması ve kamera veya mikrofon beyaz gürültüsü bulunur. Farklı çekirdek sürümleri ve yapılandırmaları farklı kaynak kümeleri kullanabilir. Bazı bilgisayarlarda radyoaktif bozunmaya veya daha az etkileyici şekilde kararsız elektronik devrelere dayanan özel donanım RNG devreleri bulunur. Bu özel kaynaklar, özellikle garip şeyler yapmak için bir kullanıcı olmadan, ilk önyüklemelerinde oldukça öngörülebilir davranışlara sahip olabilecek gömülü cihazlarda ve sunucularda kullanışlıdır.

Linux, programlara iki cihaz aracılığıyla rasgele sayılar sağlar: /dev/randomve/dev/urandom . Her iki cihazdan okumak şifreleme kalitesini döndürür. Her iki cihaz da durumu dönüştürmek ve rastgele bayt üretmek için aynı dahili RNG durumunu ve aynı algoritmayı kullanır. Her ikisini de doğru olanı yapmayan tuhaf sınırlamaları vardır:

  • /dev/urandom sistem henüz yeterli entropi biriktirmediyse, öngörülebilir verileri döndürebilir.
  • /dev/randomkullanılabilir entropi miktarını hesaplar ve yeterli değilse bloklar. Bu, kulağa hoş geliyor, ancak hesaplama, mevcut entropinin miktarını her çıkış bitiyle doğrusal olarak azaltan teorik hususlara dayanıyor. Böylece /dev/randomçok hızlı bir şekilde bloke olur.

Linux sistemleri dahili RNG durumunu diske kaydeder ve önyükleme sırasında geri yükler. Bu nedenle entropi bir bottan diğerine geçer. Bir Linux sisteminin entropiden yoksun olabileceği tek zaman yeni kurulmuş olmasıdır. Sistemde yeterli entropi olduğunda entropi azalmaz; sadece Linux'un kusurlu hesaplaması azalır. Bu düşüncenin daha fazla açıklaması için, okuma profesyonel bir kriptograf tarafından bir /dev/urandomkriptografik anahtar oluşturmak için uygundur . Bkz . Aso Rastgele kullanılan entropi tahminini açıklayabilir misiniz . C.

Fareyi hareket ettirmek sisteme daha fazla entropi ekler. Ancak gpg sadece okuyabilir /dev/random, değil/dev/urandom (bu sorunu çözmenin bir yolu /dev/randomaynı 1: 9 cihazı yapmaktır /dev/urandom), bu yüzden rastgele olmayan rastgele sayılar alma riski asla yoktur. Fareyi hareket ettirmezseniz, anahtar olabildiğince rasgele olur; ama ne başına gelebilecek gpg bloke alabilirsiniz olduğu bir okuma içinde /dev/randomyükselmeye çekirdeğin entropi sayacı bekliyor.


Linux'un mevcut sürümleri dışında, en azından benim testimden itibaren, giriş cihazlarını entropi kaynağı olarak (veya en azından tahmini entropi) kullanmayın. Bunu değiştirdiklerinden eminim çünkü teoride saldırganın kontrolü altında olabilirler.
derobert

3.12 arasında As @derobert bir çağrı var add_input_randomnessiçinde drivers/input/input.c, ama aslında iğne yapmak entropi olacak neler koşullarda bilmiyorum.
Gilles 'SO- kötü olmayı bırak'

Entropi eklediğini tahmin ediyorum, ama tahmini 0 ... Hem bir USB fare hem de PS / 2 klavye denedim, ikisi de entropi tahminine kadar görünmüyordu. Kodda credit_entropy_bits çağrısını gördüğüm için neden olsa emin değilim.
derobert

3

GPG, Linux (çekirdek) rasgele sayı üretecini kullanıyor. Çekirdek jeneratörü, her türlü yerden entropi (rasgelelik) alır, aralarında belirli kesintiler için ara zamanlama vardır. Farenin hareket ettirilmesi (ve yazma, disk etkinliği vb.) Kesilmelere neden olur.

Bu nedenle, fareyi hareket ettirmek potansiyel olarak rastgele sayı üretecine beslenir. Ancak bunu yapıp kullanmamak, kullanılan çekirdek sürümüne bağlıdır; daha yeni sürümler (en azından testlerimde) entropi için klavye veya fare kesintileri kullanmaz. Bununla birlikte, disk etkinliği (örneğin, çalıştırma sync, ne kadar boşaltıldığına bağlı olarak, potansiyel olarak büyük miktarda entropi ekleyecektir).

Kısacası: Bu, mevcut Linux sürümleri için geçerli değildir. Daha yaşlı olanlardaydı.

Bununla birlikte, jeneratörün entropi bitmesi durumunda, sadece durması gerekir - bu nedenle anahtar üretiminiz bir entropi oluşana kadar askıda kalacaktır. Yani bu bir güvenlik sorunu değil, sonsuza dek sürecek bir sorun olurdu.

Ne kadar entropinin mevcut olduğunu görebilirsiniz cat /proc/sys/kernel/random/entropy_avail.


Ayrıca rngdentropi havuzunu yapay olarak beslemek gibi araçlar kullanabileceğinizi unutmayın .
Patrick

@Patrick ve yeni bir çipiniz varsa ve NSA'ya güveniyorsanız (oh, bekleyin, demek istediğim, Intel) RDRAND'ı kullanabilirsiniz.
derobert

havegedentropi havuzunu yapay olarak beslemek için iyi bir araçtır.
mavillan

Bu tam bir hikaye değil - RNG entropiden kaçmıyor, iç entropi ölçüsünden çıkıyor. Ayrıca, bulmacanın önemli bir parçası, gpg'nin fareyi umursamaması, çekirdeğidir.
Gilles 'SO- kötü olmayı bırak

@Gilles gpg'nin Linux RNG kullandığını açıkladım. Ve entropi tahmincisindeki hatalar kapsamın ötesinde görünür.
derobert

0

Tails, kurulduğu için son derece hızlı bir anahtar nesline sahiptir haveged:

sudo apt-get install haveged
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.