Czy mogę zaimplementować (słabe) źródło entropii w FPGA?

12

Pracuję z platformą IoT w FPGA do oceny i prototypowania. Muszę zapewnić obsługę TLS i do tego potrzebuję źródła entropii.

Rozumiem, że prawdziwe źródła szumów losowych są dość wyspecjalizowane (jeśli nawet praktyczne) w FPGA, ponieważ wydajność urządzenia jest często całkiem dobra (i trudno jest znaleźć parametry przypadkowe), ale mogę zaimplementować generator pseudolosowych sekwencji bez żadnego problemy.

Mam tylko niektóre standardowe kanały I / O (uart, I2C itp.), Nic, co wygląda na to, że może zapewnić nawet wiele do PRBS - z wyjątkiem może wejścia audio ADC. Czy są jakieś wiarygodne sztuczki generowania entropii w FPGA, które powinienem rozważyć?

Zakładając, że używam PRBS, mogę potencjalnie podłączyć zewnętrzne źródło hałasu, którego z pewnością mógłbym użyć jako źródła. Chciałbym wiedzieć, ile to faktycznie dodałoby do mojej implementacji TLS. Czy byłoby to niezawodne i bezpieczne, czy tylko nieznacznie lepsze niż stosowanie ustalonej pseudolosowej sekwencji? Czy musiałbym nadal odpytywać zewnętrzne źródło hałasu, aby uzyskać więcej entropii?

Jest OK, jeśli źródło entropii, z którym się skończy, nie jest odpowiednio bezpieczne pod względem szyfrowania (ponieważ jest to tylko do prototypowania), ale chciałbym zrozumieć kompromis między jakością a kosztem.

Sean Houlihane
źródło

Odpowiedzi:

6

Czy potrzebujesz? Możesz zaimplementować kryptograficznie bezpieczny generator losowy, jeśli masz dwie rzeczy: pewną bezpieczną pamięć wielokrotnego zapisu i początkowe ziarno. Oznacza to, że wystarczy jednorazowo zainicjować RNG, a następnie zapisać jego stan i zrezygnować z zapisanego stanu. Nie jest to idealne, lepiej byłoby okresowo włączać entropię, ale jest w porządku, szczególnie w przypadku prototypu programistycznego.

Musisz mieć bezpieczną pamięć wielokrotnego zapisu. Jeśli urządzenie ma tylko pamięć ROM i niezabezpieczoną pamięć masową, to takie podejście nie jest możliwe. Musi istnieć lokalizacja, w której można przechowywać stan RNG w taki sposób, aby przeciwnicy nie mogli go odczytać ani zmodyfikować.

Działa to tak, gdy urządzenie uruchamia się, ładuje bieżący stan RNG i używa go do wygenerowania wystarczającej liczby losowych bajtów dla dwukrotności stanu RNG. Napisz pierwszą połowę jako nowy zapisany stan RNG i użyj drugiej połowy jako początkowego stanu RNG dla bieżącej sesji. W przypadku każdego PRNG kryptograficznie bezpiecznego daje to PRNG kryptograficznie bezpieczny. Pamiętaj, że bardzo ważne jest, aby nie użyć ponownie zapisanego stanu RNG, dlatego musisz napisać nowy niezależny stan RNG przed rozpoczęciem korzystania z RNG.

Wstępne wstrzyknięcie entropii może nastąpić podczas produkcji lub podczas konfiguracji urządzenia. Zwykle dzieje się tak w przypadku połączenia z komputerem, który może wygenerować entropię w imieniu urządzenia.

Gilles „SO- przestań być zły”
źródło
OK, więc w tym kontekście nie sądzę, aby pamięć masowa musiała być nawet bezpieczna, biorąc pod uwagę, że model użytkowania nie jest produktem konsumenckim. Można założyć, że każdy atakujący nie ma fizycznego dostępu do mojego urządzenia (chociaż mogą mieć identyczne urządzenie) . Więc nie mogę zapobiec klonowi.
Sean Houlihane