Soru Önyükleme Sırasında LUKS Hatası


alg: drbg: could not allocate DRNG handle for ...

Oluşturduğumuz sanal makinelerin önyükleme işlemi sırasında bu hatayı konsolda görüyorum. EDIT: 2/5/16 - Ben de bazı çıplak metal tesislerinde görüyorum. (Tamamen önyükleme yapmaya devam ediyor.) Sanallaştırılmış donanım ve (uyumlu) rasgele sayı üretecinin olmamasıyla ilgili bir şey olduğunu düşünüyorum. Sorun şiddeti değerlendiremem. Şifreleme gücü tehlikeye giriyor mu? (Bu hatayı bile önemsemeli miyim?) Bunu nasıl düzeltebilirim?

CentOS 6.7 altında QEMU / KVM kullanıyoruz. Yapabilirim virsh dumpxml  Bir örnek sistemin, gerçekten yardımcı olacağını düşünüyorsanız. Kullanıyoruz Anaconda varsayılan şifre / anahtar boyutu. (AES-XTS-plain64 / 512)

Bu en erken referans Üzerinde buldum linux-kripto posta listesi. Ne yazık ki, kafamın biraz üstünde.

http://www.mail-archive.com/linux-crypto%40vger.kernel.org/msg10398.html

alg: drbg: could not allocate DRNG handle for ...


7
2018-01-04 23:35


Menşei


Genellikle şifrelemek depolama VM'lerin kullandığı ve bu VM'ye saydam olduğu. Altyapıyı çalıştırırsanız, bu yeterlidir. - Michael Hampton♦
Normalde VM'leri şifrelemiyorum, ama bu kenarda çalıştım. LUKS sanal ortamlarda desteklenmiyorsa, bunu alıntı olarak kabul edeceğim. - Aaron Copley
Hmm. Bir errno bu işlevden geçer, ancak bu çekirdek iletileri yazdırmak için zahmet etmez. - Michael Hampton♦
Hayır, asıl çekirdeğin kodundan bahsediyorum (bugün itibariyle!). - Michael Hampton♦
Yeni şifrelenmiş bir VM kurdum. Aynı mesajları görüyorum, ancak VM normal olarak önyüklemeye devam ediyor. - Michael Hampton♦


Cevaplar:


Özellikle, şifrelerinizin gücünü etkilediğine inanmıyorum.

Kaynak kodunu kontrol ettim ve doğru okuduğum şeyi yorumladığım sürece, bunun için endişelenmen gerekmez.

Bu kod 'stdrng' modülüne aittir. En azından Fedora 23 üzerinde bu çekirdek çekirdeği olarak ihraç edilmek yerine çekirdeğin içine yerleştirilmiştir.

Stdrng ilk kez başlatıldığında, aşağıdaki çağrılar gerçekleşir.

Kripto / drbg.c başlatma işleminde burada başlar.

1997 module_init(drbg_init);

Bu sisteme bilinen tüm drbgs'leri kaydeder.

1985         for (j = 0; ARRAY_SIZE(drbg_cores) > j; j++, i++)
1986                 drbg_fill_array(&drbg_algs[i], &drbg_cores[j], 1);
1987         for (j = 0; ARRAY_SIZE(drbg_cores) > j; j++, i++)
1988                 drbg_fill_array(&drbg_algs[i], &drbg_cores[j], 0);

Daha sonra, başlatmayı gerçekleştiren yardımcı bir işleve iletir:

1989         return crypto_register_rngs(drbg_algs, (ARRAY_SIZE(drbg_cores) * 2));

İçinde crypto/rng.c Bu sadece onu kaydetmek için her bir rng boyunca yineleyin ..

210         for (i = 0; i < count; i++) {
211                 ret = crypto_register_rng(algs + i);
212                 if (ret)
213                         goto err;
214         }

Bu işlev, başlatma adımlarının bir demetini yapar ve daha sonra ayırma için başka bir işlevi çağırır.

196         return crypto_register_alg(base);

Ne kadar açık değil ki, kayıt sırasında olan şey.

Başka bir modül denir tcrypt Ayrıca çekirdek içine yerleştirilmiş yeni algoritmaların bildirimlerini alır. Yeni bir kayıtlı algoritmayı gördükten sonra testini programlıyor. Ekranınızda gördüğünüz çıktıyı üreten budur.

Test bittiğinde, algoritma bir TEST durumuna girer. Test başarısız olursa, ben hayal etmek (Bu davranışı üreten biti bulamadım), doğru bayrakları geçip geçmediğinizde arama için seçilemez.

Testin geçip geçmemesi kesinlikle dahili olarak saklanır.

Buna ek olarak, psudeo rasgele sayı üretecini çağırmak, bu notta dikte edildiği gibi kuvvet sırasına göre prngs yinelenen algoritmaların bir listesini oluşturur. crypto/drbg.c

107 /*
108  * The order of the DRBG definitions here matter: every DRBG is registered
109  * as stdrng. Each DRBG receives an increasing cra_priority values the later
110  * they are defined in this array (see drbg_fill_array).
111  *

En güçlüsü başarısız olduğu için (hmac sha256) seçilmemiş olsalar bile başarısız olanları kullanıyorsunuz.

Özetlemek -

  • Bu olduğunda stdrng modül bir şey için gereklidir.
  • Bilinen tüm algoritmalarını yükler.
  • Yüklenen tüm algoritmalar test edilir. Bazıları başarısız olabilir (neden bu cevapta dikkate alınmamaktadır).
  • Test başarısız algoritmaları should not Daha sonra seçim için kullanılabilir.
  • PRNGS güç ve güçlü PRNGS tarafından emir verilir, bu geçiş ilk önce denenir.
  • Güvenen şeyler stdrng Umarım bu algoritmaları PRNG kaynaklarının temeli olarak kullanmamalıdır.

Aşağıdaki komutları kullanarak hangi algoritmaların başarılı olduğunu ve testleri geçtiğini görebilirsiniz:

 grep -EC5 'selftest.*passed' /proc/crypto

Ayrıca seçim önceliğini 'öncelik' alanı ile de görebilirsiniz. Değer, PRNG'yi modül yazarına göre daha güçlü hale getirir.

Kendimi bir çekirdek programcı olarak görmediğim için burada yanılmaktan mutluyum ama sonuç olarak -

Ne zaman stdrng yükler, başarısız olanlardan daha güçlü olarak kabul edilen kabul edilebilir algılar listesinden başka algoritmalar seçmek gibi görünür, ancak başarısız olanlar zaten seçili değildir.

Bu nedenle, luks kullanırken bu sizin için ek bir risk olduğuna inanıyorum.


8
2018-01-07 12:48



Çok kapsamlı analiz için teşekkürler. Onu yıkmak gerçekten yardımcı oldu. Bu testlerin bir QEMU / KVM misafirinde sürekli olarak başarısızlığa uğramasının bilinen bir nedeni var mı? (Sadece merak için VirtualBox / VMware denemeliyim.) - Aaron Copley


Bunu nasıl düzeltebilirim?

Red Hat Bilgi Tabanına Göre, initrd’inize 'ctr' Kernel modülünü eklemelisiniz. Talimatları, 'ect' ifadesini de içerecek gibi görünüyor, ancak sorun 'ctr' modülünün yüklenmemesi gibi görünüyor.

dracut -f -v --add-drivers "ctr ecb"

Aboneler tüm bilgileri görebilir. Geri kalanını yeniden yayınlamaya izin verip vermediğimden emin değilim, bu yüzden tam çözümü açıkladım.

https://access.redhat.com/solutions/2249181

9/29/2016 tarihini düzenle: 

Bu sürücüleri ayrıca /etc/dracut.conf Kernel yükseltmelerinde yeni initramflara eklendikleri için. Aksi halde, belirtileriniz aylar sonra gizemli bir şekilde tekrar ortaya çıkar. ;)

add_drivers+="ctr ecb"

1
2018-06-15 17:30