Puis-je implémenter une source d'entropie (faible) dans FPGA?


12

Je travaille avec une plateforme IoT en FPGA pour l'évaluation et le prototypage. J'ai besoin de fournir un support pour TLS, et pour cela j'ai besoin d'une source d'entropie.

Je comprends que les vraies sources de bruit aléatoires sont assez spécialisées (si même pratiques) en FPGA, car les performances de l'appareil sont souvent assez bonnes (et difficiles à trouver des paramètres de coin), mais je peux implémenter un générateur de séquence pseudo-aléatoire sans aucun problèmes.

Je n'ai que quelques canaux d'E / S standard (uart, I2C, etc.), rien qui ressemble à cela ne peut fournir beaucoup pour amorcer un PRBS - sauf peut-être une entrée ADC audio. Existe-t-il des astuces fiables pour générer de l'entropie dans un FPGA que je devrais considérer?

En supposant que j'utilise un PRBS, je peux potentiellement attacher une source de bruit externe que je pourrais certainement utiliser comme graine. Je suis intéressé de savoir combien cela ajouterait réellement à mon implémentation TLS. Serait-ce fiable et sécurisé, ou seulement légèrement meilleur que l'utilisation d'une séquence pseudo-aléatoire fixe? Aurais-je besoin de continuer à interroger la source de bruit externe pour plus d'entropie?

Ce n'est pas grave si la source d'entropie avec laquelle je me retrouve n'est pas correctement cryptée (car c'est juste pour le prototypage), mais j'aimerais comprendre le compromis qualité-prix.

Réponses:


6

En avez-vous besoin? Vous pouvez implémenter un générateur aléatoire cryptographiquement sécurisé si vous avez deux choses: un stockage sécurisé réinscriptible et une graine initiale. Autrement dit, il suffit d'amorcer le RNG une fois, puis d'enregistrer son état et de travailler hors de l'état enregistré. Ce n'est pas l'idéal, il serait préférable de mélanger l'entropie périodiquement, mais c'est ok, surtout pour un protoype de développement.

Vous devez disposer d'un stockage sécurisé réinscriptible. Si l'appareil ne dispose que de mémoire ROM et de stockage non sécurisé, cette approche n'est pas possible. Il doit y avoir un emplacement où vous pouvez stocker l'état RNG de telle manière que vos adversaires ne puissent ni le lire ni le modifier.

Lorsque cela fonctionne, le périphérique charge l'état RNG actuel et l'utilise pour générer suffisamment d'octets aléatoires pour deux fois la taille de l'état RNG. Écrivez la première moitié comme nouvel état RNG enregistré et utilisez la seconde moitié comme état RNG initial pour la session en cours. Avec tout PRNG cryptographiquement sécurisé, cela donne un PRNG cryptographiquement sécurisé. Notez qu'il est essentiel de ne pas réutiliser un état RNG stocké, c'est pourquoi vous devez écrire un nouvel état RNG indépendant avant de commencer à utiliser le RNG.

L'injection initiale d'entropie peut se produire pendant la fabrication ou lors de la configuration de l'appareil. Habituellement, ces choses se produisent avec une connexion à un PC qui peut générer l'entropie au nom de l'appareil.


OK, donc dans ce contexte, je ne pense pas que le stockage doive même être sécurisé, étant donné que le modèle d'utilisation n'est pas un produit de consommation.Tout attaquant peut être supposé ne pas avoir d'accès physique à mon appareil (bien qu'ils puissent avoir un appareil identique) . Je ne peux donc pas empêcher un clone.
Sean Houlihane
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.