14

私は組み込みシステムを持っています。電源投入時またはリセット時に実行したいのは、一意の ID を生成することです。これにより、異なる再起動時に異なる一意の ID が高い確率で生成されます。

リアルタイム クロックにはアクセスできませんが、ADC と UART にはアクセスできます。これらのソースからエントロピーを収集して一意の ID を生成する適切な方法があるかどうか疑問に思っています。私は漠然とヤローに精通しています。これをうまく使う方法はありますか?

残念ながら、予測可能な特性のノイズ源はありません。ADC は多数の比較的低ノイズの入力に接続されているため、ADC の最下位ビットのみを入力として使用できると思います。

編集:価値のあるものとして、これはTI TMS320F28335プロセッサです。


更新/明確化:ソフトウェアでエントロピーを収集する方法を探していました。私は自分の問題を解決する別の方法を見つけたので、ある意味で私の質問は議論の余地がありましたが、ADC やシステムの最下位ビットなどの低エントロピー ソースからエントロピーを収集するための特定のソフトウェア ソリューションに関するガイダンスをまだ探しています。 UART 文字を受信するタイミング。

4

5 に答える 5

12

私が使用した:

  • フローティングADC入力の最下位ビットですが、それに触れました

  • 非常に高解像度のタイマー (~10ns) であり、ユーザーのキー押下間のタイミングを計る際に最下位の "n" ビットを使用します。ユーザーのキー押下 (最高のタイミング分解能で) が事実上タイミングがランダムであることを受け入れる場合、それはかなりうまく機能します。

ネットワーク パケット間の時間などの時間を計ることもできますが、それらは多くの人が考えるよりもはるかに決定論的/予測可能です。電気ノイズとユーザーの相互作用は、エントロピーの優れたソースです。

ちなみに、「キープレス間のタイミング」については、電源投入時から組み込みシステムに保存する傾向があり、最後の8回程度の循環バッファに保存します。いつ必要になるかわからないからです。彼ら。(つまり、ランダムなビットが必要になるまで待たずに、ユーザーにボタンを 3 回押すように強制してください!)

于 2010-09-22T01:44:57.823 に答える
3

NielsFergusonとBruceSchneierによるPracticalCryptographyで説明されているFortunaも参照してください。ただし、YarrowとFortunaはどちらも、組み込みシステムには重すぎる可能性があります。

Yarrowとは異なり、Fortunaではランダムソースのエントロピーを推定する必要はありません。

于 2010-12-28T22:13:10.477 に答える
3

場合によります:

  • どの程度の独自性が必要ですか?
  • 不揮発性ストレージはありますか?
  • どれくらいで答えが必要ですか?

フラッシュ/NVRAM/ディスクがある場合は、ランダム シードを読み取り、インクリメントして、書き戻します。デバイス間の一意性、再フラッシュ、NVRAM のバッテリ切れが必要ない場合は、シードを単純なカウンターにすることができます。一意性が必要な場合は、「十分な」エントロピーを収集したら、シードを書き換えます。

(明らかに、フラッシュを使用していて、フラッシュ コントローラーにウェア レベリングがない場合、または独自のウェア レベリングを実装している場合は、別のことをしたいかもしれません。)

そうでない場合は、可能なすべてのソースからエントロピーを収集し、十分なエントロピーが得られた後にのみ UUID を生成しますZvi Gutterman (2006)は、OpenWRT のエントロピーの唯一のソースは、簡単に観察できるネットワーク アクセスであると述べています。

いくつかの簡単なガイドラインに従って、ADC 出力を使用することは理にかなっているようです。

  • すべてのビット (または少なくともエントロピー推定よりも多くのビット) を使用しますが、エントロピー推定を控えめに増やします。
  • クリップされた場合、ADC 出力のエントロピーはゼロになります (ほぼクリップされた場合、エントロピーが低くなる可能性があります)。

入力のノイズ量を測定します。サンプルごとに少なくとも 1 ビットは得られると思います。次に、ビットをハッシュして、バージョン 4 の UUID を生成します。

于 2010-09-26T22:04:36.247 に答える
1

私はダンの答えに似たことをしました。最後の 256 回のキーストロークを含むユーザーのキーストローク間の高解像度タイマー (20ns) を使用して、タイマーの違いを備えた不揮発性メモリにバッファーがありました。次に、システムの電源を入れるたびに 32 ビット CRC を計算して一意の番号を取得します。ユーザー操作のない一部のバージョンでは、シリアル ポートでメッセージを受信するまでの時間を測定しました

これらの一意の番号は、ネットワーク上のノード識別子として使用されており、重複の問題はありませんでした.

これは後に、永続的だが一意の ID を提供するDS2401で拡張されましたが、これはハードウェアを変更できる場合にのみ機能します。

于 2010-09-28T08:30:04.887 に答える
0

上記のダンの答えへのマイナーな追加... システムに何らかのラジオが含まれている場合は、RSSI を読み取ることができます。

于 2010-09-22T17:40:31.097 に答える