FPGA'da (zayıf) bir entropi kaynağı uygulayabilir miyim?


12

Değerlendirme ve prototip oluşturma için FPGA'da bir IoT platformuyla çalışıyorum. TLS için destek sağlamam gerekiyor ve bunun için bir entropi kaynağına ihtiyacım var.

Gerçek rastgele gürültü kaynaklarının FPGA'da oldukça uzman olduğunu (hatta pratik olsa bile) anlıyorum, çünkü cihaz performansı genellikle oldukça iyi (ve herhangi bir köşe durumu parametresi bulmak zor), ancak herhangi bir olmadan sahte bir rasgele dizi üreteci uygulayabilirim sorunları.

Sadece bazı standart G / Ç kanalları (uart, I2C, vb.), Hatta bir ses ADC girişi dışında bir PRBS tohum için bile çok sağlayabilir gibi görünen bir şey var. Dikkate almam gereken bir FPGA'da entropi üretmenin güvenilir hileleri olabilir mi?

Bir PRBS kullandığımı varsayarsak, kesinlikle tohum olarak kullanabileceğim bir dış gürültü kaynağı bağlayabilirim. Bunun TLS uygulamama gerçekte ne kadar katkıda bulunacağını bilmek istiyorum. Bu güvenilir ve güvenli mi, yoksa sabit bir sahte rastgele dizi kullanmaktan biraz daha mı iyi? Daha fazla entropi için harici gürültü kaynağını sorgulamaya devam etmem gerekir mi?

Sonuçta elde ettiğim entropi kaynağı kripto güvenli değilse (bu sadece prototipleme için olduğu için) sorun değil, ancak maliyet kalitesinde ödünleşimi anlamak istiyorum.

Yanıtlar:


6

İhtiyacın var mı? İki şeyiniz varsa, kriptografik olarak güvenli bir rastgele jeneratör uygulayabilirsiniz: bazı yeniden yazılabilir güvenli depolama ve ilk tohum. Yani, RNG'yi bir kez tohumlamak ve ardından durumunu kaydetmek ve kaydedilen durumdan çalışmak yeterlidir. İdeal değil, entropi ile periyodik olarak karıştırmak daha iyi olurdu, ancak özellikle bir geliştirme protokolü için sorun değil.

Yeniden yazılabilir güvenli depolama birimine sahip olmanız gerekir. Cihazda yalnızca ROM ve güvenli olmayan depolama alanı varsa, bu yaklaşım mümkün değildir. RNG durumunu rakiplerinizin ne okuyabileceği ne de değiştirebileceği şekilde depolayabileceğiniz bir konum olmalıdır.

Bunun çalışması, aygıt önyüklendiğinde geçerli RNG durumunu yükler ve bunu, RNG durumunun iki katı büyüklüğünde yeterli rasgele bayt üretmek için kullanır. İlk yarıyı yeni kaydedilen RNG durumu olarak yazın ve ikinci yarıyı geçerli oturum için ilk RNG durumu olarak kullanın. Kriptografik olarak güvenli herhangi bir PRNG ile bu, kriptografik olarak güvenli bir PRNG sağlar. Depolanmış bir RNG durumunu yeniden kullanmamanızın çok önemli olduğunu unutmayın, bu nedenle RNG'yi kullanmaya başlamadan önce yeni bir bağımsız RNG durumu yazmanız gerekir.

İlk entropi enjeksiyonu üretim sırasında veya cihaz kurulduğunda gerçekleşebilir. Genellikle bu şeyler, cihaz adına entropi üretebilen bir PC bağlantısıyla olur.


Tamam, bu bağlamda, kullanım modelinin tüketici ürünü olmadığı göz önüne alındığında, depolama alanının bile güvenli olması gerektiğini düşünmüyorum. . Bu yüzden bir klonu engelleyemiyorum.
Sean Houlihane
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.