FPGAに(弱い)エントロピーソースを実装できますか?


12

評価とプロトタイピングのために、FPGAでIoTプラットフォームを使用しています。TLSのサポートを提供する必要があり、そのためにはエントロピーソースが必要です。

FPGAの真のランダムノイズソースはFPGAの専門家である(実用的であっても)ことは理解していますが、これはデバイスのパフォーマンスが非常に優れているため(コーナーケースパラメーターを見つけるのが難しいため)、擬似ランダムシーケンスジェネレーターを実装できることです。問題。

私はいくつかの標準I / Oチャンネル(uart、I2Cなど)しか持っていません。PRBSをシードするために提供できるものはほとんどありません-オーディオADC入力を除く。FPGAでエントロピーを生成するために、考慮すべき信頼性の高いトリックはあるのでしょうか?

PRBSを使用すると仮定すると、種として確実に使用できる外部ノイズソースを潜在的に接続できます。これが実際にTLS実装にどの程度追加されるかを知りたいです。これは信頼できる安全なものでしょうか、それとも固定の擬似ランダムシーケンスを使用するよりもほんの少しだけ良いでしょうか?エントロピーを高めるために、外部ノイズソースのポーリングを続ける必要がありますか?

エントロピーのソースが適切に暗号化されていなくても構いません(これは単なるプロトタイプのためです)が、コストと品質のトレードオフを理解したいと思います。

回答:


6

する必要がありますか?書き換え可能な安全なストレージと初期シードの2つがある場合は、暗号的に安全なランダムジェネレーターを実装できます。つまり、RNGを一度シードしてから、その状態を保存し、保存された状態から取り除けば十分です。理想的ではありません。定期的にエントロピーを混合する方が良いでしょうが、特に開発プロトタイプでは問題ありません。

書き換え可能な安全なストレージが必要です。デバイスにROMと非セキュアストレージのみがある場合、このアプローチは不可能です。敵がそれを読み取ったり変更したりできないように、RNG状態を保存できる場所が必要です。

これが機能する方法は、デバイスが起動すると、現在のRNG状態を読み込み、それを使用して、RNG状態の2倍のサイズの十分なランダムバイトを生成します。前半を新しい保存済みRNG状態として書き込み、後半を現在のセッションの初期RNG状態として使用します。暗号的に安全なPRNGでは、これにより暗号的に安全なPRNGが生成されます。保存されたRNG状態を再利用しないことが重要であることに注意してください。そのため、RNGの使用を開始する前に、新しい独立したRNG状態を記述する必要があります。

初期エントロピー注入は、製造中、またはデバイスのセットアップ時に発生する可能性があります。通常、これらのことは、デバイスに代わってエントロピーを生成できるPCへの接続で発生します。


わかりましたので、このコンテキストでは、使用モデルが消費者向け製品ではないことを考えると、ストレージは安全である必要さえないと思います。 。クローンを防ぐことはできません。
ショーンフーリハネ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.