Posso implementar uma fonte de entropia (fraca) no FPGA?

12

Estou trabalhando com uma plataforma IoT no FPGA para avaliação e prototipagem. Preciso fornecer suporte para TLS e, para isso, preciso de uma fonte de entropia.

Entendo que as verdadeiras fontes de ruído aleatório são bastante especializadas (mesmo práticas) em FPGA, já que o desempenho do dispositivo geralmente é muito bom (e difícil de encontrar parâmetros de canto), mas posso implementar um gerador de sequência pseudo-aleatória sem nenhum problemas

Eu só tenho alguns canais de E / S padrão (uart, I2C, etc), nada que pareça pode fornecer muito para propiciar um PRBS - exceto talvez uma entrada ADC de áudio. Talvez exista algum truque confiável para gerar entropia em um FPGA que eu deva considerar?

Supondo que eu use um PRBS, potencialmente posso anexar uma fonte de ruído externa que eu certamente poderia usar como uma semente. Estou interessado em saber quanto isso realmente adicionaria à minha implementação do TLS. Isso seria confiável e seguro, ou apenas um pouco melhor do que usar uma sequência pseudo-aleatória fixa? Eu precisaria continuar pesquisando a fonte de ruído externo para obter mais entropia?

Tudo bem se a fonte de entropia com a qual eu terminar não for adequadamente criptografada (já que isso é apenas para prototipagem), mas eu gostaria de entender a relação custo-qualidade.

Sean Houlihane
fonte

Respostas:

6

Você precisa? Você pode implementar um gerador aleatório criptograficamente seguro se tiver duas coisas: algum armazenamento seguro regravável e uma semente inicial. Ou seja, é suficiente semear o RNG uma vez e, em seguida, salvar seu estado e trabalhar com o estado salvo. Não é o ideal, seria melhor misturar a entropia periodicamente, mas tudo bem, especialmente para um protótipo de desenvolvimento.

Você precisa ter um armazenamento seguro regravável. Se o dispositivo tiver apenas ROM e armazenamento não seguro, essa abordagem não será possível. Deve haver um local onde você possa armazenar o estado RNG de maneira que seus adversários não possam lê-lo nem modificá-lo.

A maneira como isso funciona é que, quando o dispositivo é inicializado, ele carrega o estado RNG atual e o usa para gerar alguns bytes aleatórios suficientes para o dobro do tamanho do estado RNG. Escreva a primeira metade como o novo estado de RNG salvo e use a segunda metade como o estado inicial de RNG para a sessão atual. Com qualquer PRNG criptograficamente seguro, isso gera um PRNG criptograficamente seguro. Observe que é fundamental que você não reutilize um estado RNG armazenado; é por isso que você deve escrever um novo estado independente RNG antes de começar a usar o RNG.

A injeção inicial de entropia pode ocorrer durante a fabricação ou quando o dispositivo é configurado. Geralmente, essas coisas acontecem com uma conexão com um PC que pode gerar a entropia em nome do dispositivo.

Gilles 'SO- parar de ser mau'
fonte
OK, portanto, nesse contexto, acho que o armazenamento nem precisa ser seguro, dado que o modelo de uso não é um produto de consumo. Pode-se presumir que qualquer invasor não tenha acesso físico ao meu dispositivo (embora possa ter um dispositivo idêntico) . Portanto, não posso impedir um clone.
Sean Houlihane