# OS_GetLowEntropyData

## 構文

      #include <nitro/os.h>

      void OS_GetLowEntropyData( u32 buffer[8] );

## 引数

buffer | システム状態から生成した情報を保存する 32 バイトのバッファへのポインタ

## 返り値

なし。

## 説明

実行毎に異なると期待できる 32 バイトのデータをシステム状態から生成して返す関数です。buffer には 4 バイト境界に揃った 32 バイトのメモリ領域へのポインタを渡す必要があります。

現在の Tick 値・描画中の垂直ライン数・最後に読み出した RTC 値・最後に読み出したタッチパネルデータ・最後にサンプリングしたマイクレベル・ワイヤレス通信の受信強度の履歴・MAC アドレスなどから 32 バイトのデータを生成します。 基本的にメモリ内の特定のアドレスからの読み込みしかしていませんので、呼び出しコストは高くありません。

RTC は起動シークエンス内で1回は読み込まれるため、同じ DS でも再起動ごとにほぼ確実に異なる値を返します。 また、MAC アドレスも含んでいますので、異なる DS では異なる値が帰ることが期待できます。 ただし、必ず異なる値が返ってくるという保証はありません。また、返ってくるデータの構成は変更されることがありますので、特定のフィールドを意味のある情報として利用しないでください。

呼び出し毎に返る値は異なりますが、その乱雑さの程度は低いため、低エントロピー源と見なして使用してください。 セキュリティに関係するような乱数の元として使用する場合は、この関数を十分な回数呼び出し、その度にデータを乱数の種に混ぜ合わせるように使用する必要があります。混ぜ合わせる際には MD5 や SHA1 などの一方向ハッシュ関数が使用できます。 また、セキュリティに関係しない場合は、この関数が返したデータをハッシュ関数にかけ、その結果を乱数の種として使用するだけで十分です。

## 参照

`MATH_CalcSHA1`

## 履歴

2005/07/27 初版