RL78で真性乱数生成器(TRNG)

本家でも度々話題に出るRL78で真性乱数生成器(TRNG)の研究をしてみます。
 
JCMVP/CMVPの試験にパスできるレベルの乱数にするべく、
米国連邦政府情報処理標準FIPS PUB 140-2規格を満足できるかチャレンジ!
 
まずは、。評価ボード(QB-R5F104PJ-TB)を使って内蔵発振器の位相ノイズ(ジッター)を使った乱数の味見をしたところ、
エンベロープ的には正規分布っぽいですけれども、6の倍数の値が顕著になっています。
 
・LOCOで測定した2msec毎の、HOCOカウント値の分布 
 
 
 
 FIPS140-2で要求されている20,000ビットの乱数列に対する連続同値の出現頻度の規定(0と1それぞれに適用)
  • Kirinさん

    シェルティです、こんにちは。

    コメントありがとうございます。まさに仰る通りと思います。
    セキュアブートが標準でマイコン機能としてあるとユーザは助かりますね。
    この方向になるよう方々働きかけていきたいと考えています。

    突き詰めると①セキュアブートで使用するコード検証用の鍵データを
    マイコン内でどう保持するか、②セキュアブートがいかに改ざんされないか、課題になります。

    アタッカはソフトウェア不具合を利用し任意コードをRAMに流し込みそこに
    プログラムカウンタを飛ばし、任意コードによりメモリプロテクト設定を変更し、
    セキュアブートを改ざんしたりもしてきます。Androidの「脱獄」といわれている操作ですね。
    また、任意コード実行によりROMの中にある重要なデータ(鍵データなど)を読みだそうとします。
    このへんをどうやって守り切るかが、真の組み込みセキュリティと認識しています。

    iPhoneのホワイトペーパーが非常に参考になりますね。
    RX231に搭載のセキュリティIPの考え方はこれに近いので、
    単なる暗号処理アクセラレータとはひと味違う回路ということになりますね。
    images.apple.com/.../iOS_Security_Guide.pdf

    あとは、③上記のようなソフトウェア不具合はゼロにできない、という考え方のもと、
    セキュリティ要件として、ファームウェアアップデート機能が必要となっているようです。

    ①~③の課題に対する組み込みセキュリティ対策は以下の通りと思っています。

    ①セキュリティIP内で鍵データを安全に保存する仕掛け
    ②絶対改ざんできないROM領域にセキュアブートを配置
    ③ファームアップデート機能

    ファームアップデート機能は開発者メリット(機能・性能UP)に目がいきがちですが、
    セキュリティ要件でもある点に注意が要ると思います。

    閑話休題で乱数器の話ですが、乱数性もセキュリティ要件の重要な要素ですね。
    Kirinさん設計の考え方で生成された乱数値はNISTの基準値を満たしますので、
    乱数のパターンからシステムの脆弱性が暴かれるリスクは極小であるといえます。

    セキュリティはこのようにありとあらゆるアタック手法を考慮にいれて設計する
    必要があり、何もないところから作ろうとすると非常に労力が要りますね。
    デバイスレベルでこのあたりを包含できて、第三者認証機関により
    お墨付きが得られている(それこそFIPS140-2の検定(CMVP)に合格)デバイスが
    IoT機器の心臓部として選定対象に挙がりやすくなってくるものと予想します。

    いまはシステム開発者が限られた予算内でできる限りの
    セキュリティ対策を施しておく、というのが良い手段なのだと思います。

    ARM陣営も着々と組み込みセキュリティ強化の準備を進めている様子がうかがえますね。
    www.arm.com/.../trustzone-cryptocell
    ⇒Security Certification and Compliance 参照

    以上です
  • シェルティさん
    さすがですね。①②③が揃うと完璧ですね。
    やっぱりRX231のように1チップで、鍵にアクセスするために特別な手続きが必要なシステムの方がいいですよね。
    ATECC508A(暗号ハードウェアアクセラレーター)みたいものがありますけれども、秘密鍵がチップの外に出ないとは言うものの、マイコンと2チップ構成にするとコストやチップ間I/Fの心配がありますから。
    それにしてもアップルのセキュリティ仕様すごいですね。iPhone向けソフト開発の事務手続きがハンパないのも頷ける?!

    そうそうARMマイコンのセキュリティを使うのはかなりハードルが高くて、ビジネス(売り上げ)にならなければ相手しないというスタンスのところが多いですね。
    メーカーを口説くのが大変でNDA取り交わしまでたどり着くのも一苦労^^;

    いまのところ第三者機関に認証を依頼している案件(企業)は限られているみたいですね。JCMVPの公開リストみても国絡みの調達とかだけみたいですし。
    シェルティさんのおっしゃるとおり、「いまはシステム開発者が限られた予算内でできる限りのセキュリティ対策を施しておく、というのが良い手段なのだと思います。」ですね!

  • 閑話休題、乱数の品質を見てみます。
    連続ビットとかの指標だと品質が見た目で分からないので、いわゆるポーカーテストをしてみました。
    乱数列を4ビットずつに分けて、4ビットの数値がどのくらいバラつくか、です。(サンプル数15000個)
    すると、ADコンバータから取れる乱数は同じパターンの繰り返しが多く、特定の値に偏っていることが分かります。
    一方LOCOを使った乱数は特定の値に偏ることなく均一なバラつきを示し、非常に品質がいいことが分かります。

  • Kirinさん

    シェルティです、こんにちは。

    素晴らしい結果ですね。
    いただいたサンプルコード、大事に保存させていただいております。

    乱数検定はSP800-22Aという規格が代表例でよく聞きますね。

    リファレンス:
    nvlpubs.nist.gov/.../nistspecialpublication800-22r1a.pdf

    NISTのページにはこれに対応した乱数検定用のプログラムコードがあるようですね。
    csrc.nist.gov/.../documentation_software.html

    また、私はまだ試していないですが、上記をWindows用に移植した無料ツールもあるようです。
    無料ツール:
    dnki.co.jp/.../

    以上です
  • シェルティさん
    教えていただいた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もソフトコーディングできるからいいもんねー/笑)