アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、大学の研究室でストリーム暗号の研究をしています。
ストリーム暗号の鍵は疑似乱数列が用いられるため、
各アルゴリズムの評価には疑似乱数評価ツールが用いられています。
疑似乱数評価ツールとしてNISTのSP-800 22というツールが
一般的です。
http://csrc.nist.gov/groups/ST/toolkit/rng/docum …

しかしこの評価ツールには計算式のパラメータに不適切なものが
いくつかあることがCRYPTRECの調査で指摘され、
プログラム自身にも致命的なバグがあるようです。
↓情報ソース
http://www2.nict.go.jp/y/y213/cryptrec_publicity …
http://cryptrec.nict.go.jp/rep_ID0037.pdf
http://www.chaosware.com/ransure/pdf/ransure2.pdf
実際、私が評価ツールを試したときはプログラムが途中でフリーズしたり
デタラメな結果が出たりと散々でした。
マニュアルがとても不親切だしREADMEすらついていないプログラムは全く信用できません。

そのため東芝ソリューションが問題を修正した評価ツールを作成したようですが
プログラムはIPA専有となっており、暗号開発者はIPAに評価を委託しなければならないようです。
(しかも法人向きのサービスで、個人だと無理っぽいです)
http://www.ipa.go.jp/security/fy17/development/r …

市販されているツールもありますが価格が50万円もします。
+保守料金が年間10万円とありますが
そんな大金で何を保守するのか謎です。
http://www.chaosware.com/ransure/ransure.html

私が自分で考案したアルゴリズムを評価するための選択肢は
1.高額な評価ツールを購入する。
2.評価のための計算式は公表されているので自作する。
しかないように思います。
購入してしまえば楽ですがオープンソースではないのでそのツールにもバグが無いことを証明できません。
自作したとしてもそのツールの正統性の証明も困難と思われます。

こういうのは然るべき場所でキチンと議論して
オープンソースな開発をしなきゃならないと思うんですが
(っていうかNISTがそういう所であるべきなんですが)
論文の〆切も迫ってきていますのでどうしたものかと途方に暮れております。

長くなりましたが何か良い案があれば
教えていただきたいです。

A 回答 (3件)

流通しているプログラム(NIST SP 800-22)の乱数検定能力を疑わせるバグが依然存在しているので、現状検定プログラムの


ロジック自体にバグが無いと保証する、またそこに責任を持つ
RanSureで評価するのが、一番確実と思われます。

またRanSureが高いということですが、
アカデミックライセンス価格で購入した大学を知っており、
大学の場合、安価で購入できる(た)
のではないのでしょうか?
また、そのNIST SP 800-22 version 1.8とRanSure違いの有無についても議論されてましたが、RanSureは
Vistaで動作するのに対し、NIST SP 800-22は動作しないという動作
環境以外の本質的な乱数検定能力における違いがあり、
RanSureでは全然パスせず、NIST SP 800-22 version 1.8に全ての
項目パスする乱数列が存在し、NIST SP 800-22の方が、RanSureよりも
かなり甘い結果となっていることが、昨年の夏の統計数理研究所
開催の乱数の研究会で発表され公表されてましたので、それが
乱数の専門家の見解とみなしても良いと思われます。
http://www.chaosware.com/ransure/pdf/ransure2.pdf
又、よくある誤りですがNIST自身は、乱数の検定結果に関して決して認定していない(使用の責任は持たないと明言)ので、NIST SP 800-22で
パスしたことを"NISTから認定も受けた"とプレス・論文等で公開するのせっかくの研究成果が2重の詐欺行為となってしまい、危険だと思いますので、論文執筆時、及び公表の段階では、テスト方法(利用ソフト)、テスト結果だけを淡々と述べる、という様な工夫が必要と思われました。現状では、乱数のランダム性を保証する機関はどこにもありません。
    • good
    • 0
この回答へのお礼

問い合わせたところ御指摘のとおり、アカデミック版がありました。
(それでも予想以上の価格ではありましたが)

NIST SP800-22の結果が甘い、ということですが
評価論文に記載されている実験を再現しようとした場合に
それらの結果とは大きく異なる場合が何度かありました。
よく甘めの傾向が出ていたので疑問には思っていましたが
そのような見解もあるのですね。

評価ツールはあくまで参考程度にとどめておくことを
心がけたほうがよさそうですね。

回答どうもありがとうございました。

お礼日時:2008/12/05 17:13

>FFTとLampel ziv検定についての議論は


>あちこちで見かけられますね。

 Lampel ziv検定は、臨床的興味としては面白いですが、
学術的にはどうか、、、その存在が疑問ですね。

 圧縮したデータは乱数に近づくという性質を知っている人は思わずニヤリとするのですが、それを数値としてあらわすと、あるいは、自然に発生する冗長性というものを考えると評価の確立が難しいというのもわかります。

>今回は時間の都合上、やむなくRanSureの導入を決めましたが

 RanSureは確か1.8ベースと記憶します。
導入されたならば、1.8との検定比較をお勧めします。

 私が実施したとき、テンプレートエラーだけだったと思いますが、同一の結果がでました。

1.FFT検定は改良されていると思います。
2.それ以外については、わかりません。同一の可能性があります。

       ***

 それでも通算すると見えないものも見えてくるようです。
1.8にてメルセンヌツイスタを25ファイル検定した結果を
Upします。結果は、自作の集計ソフトで自動生成しています。

 ファイル失格率・失格エラー発生率として目に見える
数字がでてくるのでだいたい分かります。

PS.
 10ファイルで検定というのがそもそも茶番というのが私の臨床的見解です。可能なら100ファイル検定をし、その中で統計的評価の良いものが良いというのが現状現実的と思います。


==========================================================
■ 本Reportの見方
 1.「1~g」の意味
  SP800-22の定める合格値は検定値は0.980561以上です。
  例外としてrandom-excursions(variant)テストは0.977944以上です。
  
 2.「8」「$」の意味
  テンプレートテストで、0.977944未満。0.96以上の項目に付けます。
  0.96未満の時、「$」を付けます。
  このテストは148のテンプレートについてテストします。
  このテストは正しい乱数においても1項目につき0.0028(百分率で0.28)のエラーが発生します。
  従い、148の一つづつに0.28の確率でエラーが発生します。
  148×0.28=39.96の確率「8」を付けるのが期待値です。
  本検定では独立行政法人カオスウェアのガイドラインに従い、「8」が数個でる場合は合格とします。
  1ファイルで@が一つ出る確率は39.96。
  @が二つ出る確率は15.96。
  @が三つ出る確率は6.38。
  ※他のエラーが発生した場合はエラーとします。
==========================================================
ファイル名 判定
==========================================================
Report0.txt 88d p-value平均=0.480788 proportion平均=0.989535
Report1.txt p-value平均=0.514770 proportion平均=0.989486
Report2.txt p-value平均=0.493146 proportion平均=0.989819
Report3.txt 8 p-value平均=0.490573 proportion平均=0.989819
Report4.txt 88 p-value平均=0.482893 proportion平均=0.989693
Report5.txt 7 p-value平均=0.490304 proportion平均=0.989219
Report6.txt p-value平均=0.520369 proportion平均=0.990287
Report7.txt p-value平均=0.514605 proportion平均=0.990189
Report8.txt p-value平均=0.498834 proportion平均=0.989809
Report9.txt 8 p-value平均=0.504614 proportion平均=0.989668
Report11.txt df p-value平均=0.508623 proportion平均=0.990068
Report12.txt p-value平均=0.477115 proportion平均=0.989641
Report13.txt 88 p-value平均=0.497716 proportion平均=0.989607
Report14.txt p-value平均=0.513167 proportion平均=0.990078
Report15.txt 8 p-value平均=0.481148 proportion平均=0.989790
Report16.txt p-value平均=0.494437 proportion平均=0.990109
Report17.txt 8 p-value平均=0.516425 proportion平均=0.989864
Report18.txt 8 p-value平均=0.500440 proportion平均=0.990121
Report19.txt 8 p-value平均=0.453701 proportion平均=0.989414
Report20.txt 8 p-value平均=0.460209 proportion平均=0.989729
Report21.txt 8 p-value平均=0.483010 proportion平均=0.989586
Report22.txt p-value平均=0.533587 proportion平均=0.990283
Report23.txt 89 p-value平均=0.511535 proportion平均=0.989759
Report24.txt 78 p-value平均=0.493956 proportion平均=0.989115
Report25.txt 8d p-value平均=0.495859 proportion平均=0.989364
==========================================================
Total p-value平均=0.496473 proportion平均=0.989762
テンプレートエラー発生期待値=9.990000 : 実発生数=17 差分=7.010000 発生誤差=70.170170%
==========================================================
■総合判定結果。
評価ファイルNo=25 失格ファイル数=6 エラー合計=7
ファイル失格率=0.240000 (テンプレートエラーは除外する)
失格エラー発生率=0.280000 (テンプレートエラーは除外する)
1. Frequency エラー発生率=0.000000
2. BlockFrequency エラー発生率=0.000000
3. CumulativeSums エラー発生率=0.000000
4. Runs エラー発生率=0.000000
5. LongestRun エラー発生率=0.000000
6. Rank エラー発生率=0.000000
7. FFT エラー発生率=0.080000
8. NonOverlappingTemplate エラー発生率=0.680000
9. OverlappingTemplate エラー発生率=0.040000
a. ------------------
b. Universal エラー発生率=0.000000
c. ApproximateEntropy エラー発生率=0.000000
d. RandomExcursions エラー発生率=0.120000
e. RandomExcursionsVariant エラー発生率=0.000000
f. Serial エラー発生率=0.040000
g. LinearComplexity エラー発生率=0.000000
==========================================================
 
    • good
    • 0
この回答へのお礼

お礼が遅れて申し訳ありません。

現在はRanSureも到着し、実験を進めています。
ver1.8との比較は後回しになってしまいそうですが
後ほど実施してみたいと思います。
評価を進めてみるとやはり10件程度の調査では
なんとも言えない感じですね。

---

具体的な評価結果をわざわざ掲載していただきありがとうございます。
大変参考になりました。

お礼日時:2008/12/05 17:03

 NIST SP800-22はいろいろと問題があるようです。


ただ、全然ダメというわけではなく回避して使えるように思います。

 注意点としてはつぎのことでしょうか。

■ FFT検定は使用しない。あるいは、使用しても参考どまりとする。
http://www2.nict.go.jp/y/y213/cryptrec_publicity …

 この資料によれば、FFT検定は信頼性に難ありとしています。
他の検定は、信頼できるという解釈は成立しそうです。

 うろ覚えですが、RANDOM検定も数式が間違っているのではないかという
レポートが出ていたように思います。

 基本的に甘い結果がでるように感じています。

■ SP 800-22は、現行のVer2.0の使用は避けて、以前の1.8を
 使用すると良いと思います。
 各種レポートも1.8以前の物に対して行った物のようです。
 おそらく先輩、教授は1.8をもっていると思いますのでこれを
 使用する事をお勧めします。

■ Ver1.8で検定するにあたり注意事項を述べて置きます。
 ・検定は1Gビット以上のファイルで行うこと。
 ・ストリーム長さは1000,000が良いようです。
 ・このストリームを1000本指定する事。
 ・検定は1Gビット以上のファイルは、最低でも20本以上は
  用意し検定すること。
  欲を言うと50~100本ほど検定しないときちんとした
  評価はできません。
 ・ノンオーバーラッピングテンプレートテストは、1ファイルで
  約40%程度のエラーの発生率が統計学上あるようですので
  エラーがでても気にしないこと。20本以上のファイルを検定
  してようやく、収束するという印象です。
 ・私はWin版しか使った事はありませんが、自分でコンパイルは
  せず、NIST提供のバイナリを使うこと。1.8はVC6++でコンパイル
  できますが、コンパイルオプションで動かない検定があります。
  ちなみに、Ver2.0は、VC6++でコンパイルすると数学関数が正常に
  動作しないという現象を体験しています。
 ・ブロックフレケンシーはブロック長さ20000を指定。
 ・シリアルはブロック長10を指定。これ以外の設定はデフォルト
  で良いようです。
 ・大体、20ファイルを検定する前後でPCがクラッシュしますので
  注意してください。色々と不安定なところがあります。

        ***
          ***

 信頼性のおけない検定を避ける。パラメータを良く確認すること。そして、20本以上の検定を行うことがポイントです。

 カオスウェアのRanSureは、SP800-22 Ver1.8をベースにしていたと記憶します(バージョンにもよりますが)。カオスウェアは問題のある検定を改良しています。逆に言うと、それ以外の検定はVer1.8と同じと思って良いと思います。

 参考にしてください。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。

FFTとLampel ziv検定についての議論は
あちこちで見かけられますね。

NISTのVer.についてですがVer.1.5、1.8、2.0の3つを
実験を用いたことがあります。
1.5は相当古いようでbig endianベースでありintel系マシンでの実行が難しく
現在のgccには標準で含まれるが当時は含まれない関数を自己定義しているため
定義の重複エラーが多発する状況です。

1.8は仰るとおり、ある程度検定が進むとプログラムがクラッシュ、または
最後まで進んでも胡散臭い結果が出ています。
(単純なLFSRの出力すら全ての検定に通ってしまう、など)
多くの論文ではサンプルデータは10本程度での評価が多いようですが
正確な評価に最低でも20、できれば50~100本必要だとすると
それらの評価も不完全なのですね…

2.0では変更箇所などが一切通知されていません。
一応1.8のように途中でクラッシュはしませんが結果は1.8同様の胡散臭さです。

元々暗号をやっている研究室ではなく
個人的な研究としてスタートし勉強してきましたが
ストリーム暗号は各々一般性に欠ける我流の評価方法で安全性を主張し、
すぐに解読されたり評価方法の問題点を指摘されてるケースが多い印象を受けます。
この辺りは暗号の歴史の浅さが伺える気がしますね。

今回は時間の都合上、やむなくRanSureの導入を決めましたが
これらの問題はもっと広く認知されて修正されて欲しいと思います。

お礼日時:2008/11/24 02:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!