シェルティさんさすがですね。①②③が揃うと完璧ですね。やっぱりRX231のように1チップで、鍵にアクセスするために特別な手続きが必要なシステムの方がいいですよね。ATECC508A(暗号ハードウェアアクセラレーター)みたいものがありますけれども、秘密鍵がチップの外に出ないとは言うものの、マイコンと2チップ構成にするとコストやチップ間I/Fの心配がありますから。それにしてもアップルのセキュリティ仕様すごいですね。iPhone向けソフト開発の事務手続きがハンパないのも頷ける?!
そうそうARMマイコンのセキュリティを使うのはかなりハードルが高くて、ビジネス(売り上げ)にならなければ相手しないというスタンスのところが多いですね。 メーカーを口説くのが大変でNDA取り交わしまでたどり着くのも一苦労^^;
いまのところ第三者機関に認証を依頼している案件(企業)は限られているみたいですね。JCMVPの公開リストみても国絡みの調達とかだけみたいですし。 シェルティさんのおっしゃるとおり、「いまはシステム開発者が限られた予算内でできる限りのセキュリティ対策を施しておく、というのが良い手段なのだと思います。」ですね!
閑話休題、乱数の品質を見てみます。連続ビットとかの指標だと品質が見た目で分からないので、いわゆるポーカーテストをしてみました。乱数列を4ビットずつに分けて、4ビットの数値がどのくらいバラつくか、です。(サンプル数15000個)すると、ADコンバータから取れる乱数は同じパターンの繰り返しが多く、特定の値に偏っていることが分かります。一方LOCOを使った乱数は特定の値に偏ることなく均一なバラつきを示し、非常に品質がいいことが分かります。
シェルティさん教えていただいたSP800-22Aは知りませんでしたけれども、16種類も色々な尺度から検定を行なっているんですね。母分散の検定や推定に使われているχ(カイ)二乗検定が大活躍です。NISTの検定ソフトが必須ですね。
乱数を極めれば極めるほど、乱数の揺らぎの中に心地よさを感じていくのかな^-^
CC版でタイマーを使ったサンプルプログラムとアプリケーションノートを作成しました。japan.renesasrulz.com/.../411
下のA/Dポート版よりも時間は掛かりますけれども、性能は折り紙付きです。japan.renesasrulz.com/.../410
両方サンプル共に乱数品質を自己確認できるように真性乱数換算の有効ビット数を算出する関数を加えました。
気づけば、RL78/G1H(サブギガ無線マイコン)にAIS31準拠のTRNGがハード機能としてはじめから搭載されていました。
AIS31を調べてみるとFIPS140-2の元になった文章のようですね。(AIS31自体はドイツ語ですけど)monobit test、poker test、run testなどなど、どこかで見たことのあった?!9種類のテストで構成されていました。乱数品質の測定にエントロピーの考え方が入っていて、なるほどー(そだねー)と思いました。
AIS 31 -> ISO/IEC18031 -> NIST SP 800-90C , SP 800-22A
AIS31をパスするには、万一ハードウェア乱数生成器が故障しても、AIS20相当の高品質な擬似乱数を出力できれば良いみたいな感じで規定されていました。RL78/G1Hは凄い!(まぁ暗号機能の詳細は、例によってNDAを交わさないと仕様が出てこないみたいですけど、TRNGもAESもソフトコーディングできるからいいもんねー/笑)