• 締切済み

擬似乱数生成器が怪しい?

首記の話があるようだがこれは事実か、事実としたらその影響は莫大では?

みんなの回答

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.3

NISTさんと、NSAさんは、 最近は、そんなに仲良くなくて、兄弟げんかをしているようです。 http://www.businessnewsline.com/biztech/201309162152550000.html 日本での暗号ツールは個人レベルでもいろいろ公開されています。 AESをそのままではなくて、アメリカ政府の手が入る前のソースコードを使って実装している人が多いです。 http://www.amazon.co.jp/The-Design-Rijndael-Information-Cryptography/dp/3540425802 また、AESの候補であったものの選考段階でのソースコードもあります。 http://www.amazon.co.jp/Twofish-Encryption-Algorithm-Bruce-Schneier/dp/0387987134/ref=sr_1_2?s=english-books&ie=UTF8&qid=1406412973&sr=1-2&keywords=twofish さらに、乱数は一様ではなくても、原始的に発生されたものを上手く使えばよい。 多段階の多重暗号化で、異なるアルゴリズム、異なる乱数を使えば、十分と考えています。 5段階なら、鍵のビット数は5倍以上になるし、初期化ベクトルもあるのでかなり解読困難になると思っています。沢山ある暗号アルゴリズム、暗号ソフトから、勝手に5つ選んで使えばよい。

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.2

NIST SP 800-90A January 2012 ii NIST Special Publication 800-90A Recommendation for Random Number Generation Using Deterministic Random Bit Generators は、いかのURL にあります。 http://csrc.nist.gov/publications/nistpubs/800-90A/SP800-90A.pdf#search='SP+80090A' 謝辞にあるように、NSAの人が頑張ってお手伝いしてくれたようです。 Acknowledgements The National Institute of Standards and Technology (NIST) gratefully acknowledges and appreciates contributions by Mike Boyle and Mary Baish from NSA for assistance in the development of this Recommendation. NIST also thanks the many contributions by the public and private sectors. NSAの方々がどんな目的でお仕事しているかを考えれば、明らか。 もし、暗号が解読できなくなるような作業をしたなら、職務規定違反になると思います。

sindoiraira
質問者

お礼

設計段階からバックドアなり何なり仕込まれてるように思えますね。 暗号や、その各種要素技術は、思っていたより相当不完全という印象ですね。 でも他よりマシそうだから皆使っているのでしょうけど…… 回答ありがとうございました。

sindoiraira
質問者

補足

NSAとNISTが密接な関係とは聞いていましたがこんなにはっきりと明記しているとは知りませんでした。 こうなると暗号技術全般が怪しいというかNSAみたいな機関や人には余裕で解けるように最初から作られてたりするのでしょうか。だとしても裏の取りようがないですが……

回答No.1

別に怪しくは無い。

sindoiraira
質問者

お礼

回答ありがとうございましたテンパってました。

sindoiraira
質問者

補足

http://d.hatena.ne.jp/mkusunok/20131223/prnd これみたいです標準のを使わなければ問題ないのですね。

関連するQ&A

  • 擬似乱数生成について

    お世話になります。 下記、問題について教えてください。   ============ 問題 =============   線形合同法はA,C,Pを秘密の定数(Pは素数),初期値をR1として下記演算によって計算される系列 R1,R2,R3・・・・を擬似乱数として用いる。 R_{i} = A・R_{i-1} + C (mod P) このアルゴリズムと素数Pがわかっているとき、いくつの乱数値がわかれば次の乱数値が計算できるか?その理由も示せ。   ============================= 自分なりに調べてやってみたのですが、いまいちよくよく分かりません。 直感的に、未知数が3個あるので連続した3つの乱数値を各Rとして代入すれば、2元1次方程式を得られ、A,Cが決定できると思ったのですが、どうもうまくいかない・・・ 暗号理論の専門書を読んでみたところ、やはりPが判明いてる場合、連続した3つの値で良いようです。もしPが判明していない場合でも、4つ以上の連続した値から次の乱数値が分かるそうです。 完全に混乱しています。どなたか分かる方、解説していただけませんか。 よろしくお願いします。

  • ある擬似乱数の生成方法について

    ある擬似乱数の生成方法について 『ある周波数とある周波数を組み合わせて作る擬似乱数』という様なことを以前聞いたことがあるのですが、具体的方法をご存知の方がいらっしゃいましたら、教えて下さい! よろしくお願い致します。

  • 一様乱数?疑似乱数?

    0.0以上~1.0未満の範囲のdouble型一様乱数rdmを1000個発生させて、ヒストグラムをつくりたいのですが、このような書き方で良いのか、ご教示願えませんでしょうか。 ヒストグラムと言っても、グラフではなく、区間0≤u<0.1、0.1≤u<0.2、…、0.9≤u<1.0の10区間とし、配列aaに格納しているだけです。 また、「Math.random」を用いるやり方は理解できるのですが、下記のような書き方はいまいち納得できません。 疑問点1つ目、前者は毎回発生する乱数が違うのに、後者は同じですよね?なぜでしょうか。後者は毎回決まった値が出るので、初期値(seed)から決まった計算をしているということでしょうか。 疑問点2つ目、//kokoの次の行に x = rdm.nextDouble(); のように発生させた乱数を一時的に入れておかなくてもよいのでしょうか。 import java.util.*; public class test { public static void main(String [] args) { int aa [] = new int [10]; long seed = 999L; Random rdm = new Random(); rdm.setSeed(seed); for(int i = 0; i < 1000; i++){ for(int j=1; j<=10; j++){//koko if(rdm.nextDouble() < ((j-1)*0.1) && rdm.nextDouble() >= (j*0.1)) aa[j-1] = aa[j-1] + 1; } } for(int i=0; i<10; i++){ System.out.println( aa[i] ); } } }

    • ベストアンサー
    • Java
  • 擬似乱数

    こんにちわ。 今日の擬似乱数の発展に寄与している偉大な数学者をあげるとしたら 誰が候補になるでしょうか? 古今東西関わらずありましたら名前をあげてくださればと思います。

  • 係数を指定して擬似乱数の生成

    Javaでユーザーがプログラム中で制御可能な任意の係数を使用して、 擬似乱数を作成する機能が欲しいと考えています。 その様な機能は提供されますか? また、その様な機能を実装しようとすると、どの様にすればよいでしょうか? 実現したい機能としては、 1.ユーザーが係数を任意に指定可能 2.同様の係数が与えられれば、異なるVM上であっても出力される乱数は完全に一致する。

    • ベストアンサー
    • Java
  • 超幾何分布に従う疑似乱数の生成について

    今、超幾何分布に従う疑似乱数を生成するコードをScilabで書こうとしています。しかし、Scilabには超幾何分布に従う疑似乱数の関数が実装されていません。有識者の方で、わかる方がいましたら教えてください。 ソースコードに関してはC言語、Basic、Scilabのどれかで教えていただけたら、助かります。また書籍をご存じなら、書籍名を教えてください。 よろしくお願いいたします。

  • 乱数の生成について

    Javaの本を購入し、演習を行いましたが思った以上に理解できませんでした。 例題と演習を記入いたしますので、どなたかご教示くだされば幸いです。 ちなみにですが、本は初心者向けで例題のみで解けるものと思われます。 【例題1】0~9の数値を乱数で生成して表示 import java.util.Random; public class Lesson2to14 { public static void main(String[] args) { Random rand = new Random(); int lucky = rand.nextInt(10); System.out.println("今日のラッキーナンバーは" + lucky + "です。"); } } 【演習1】一桁の正の整数値、一桁の負の整数値、二桁の正の整数値をランダムで生成せよ import java.util.Random; public class Exercise2to7 { public static void main(String[] args) { Random rend = new Random(); int lucky = rend.nextInt(10); System.out.println("一桁の正の整数値を表示します:" + (lucky + 1)); Random rend2 = new Random(); int lucky2 = rend2.nextInt(9); System.out.println("一桁の負の整数値を表示します:" + -lucky2); Random rend3 = new Random(); int lucky3 = rend3.nextInt(90); System.out.println("二桁の正の整数値をランダムに生成します:" + (lucky3 + 10)); } } 演習1に関しては例題からなんとなく理解をしてプログラムを組むことができました。(当たってるかは不明です...) しかし演習2と3については例題1では組めるのか理解できません。 【演習2】キーボードから読み込んだ読み込んだ整数値±5の範囲の整数値をランダムに生成して表示するプログラムを作成せよ。 0~5であればrend.nextInt(6)で簡単にランダム生成できますが、 -5~5の範囲となると例題だけでは何も思いつきませんでした。 【演習3】 -1.0以上1.0未満の実数値をランダムに生成して表示せよ。 上記の場合はnextFloatから生成された数値から-1引けばできると思います。 しかし、例えば-2.0以上10以下など正負の値をランダムで生成する方法が解っていません。 こちらも良かったらご教示お願い致します。

    • ベストアンサー
    • Java
  • 乱数の生成について

    下記のスクリプトではボタンをクリックして乱数を生成しています。 ボタンをクリックする事無く、windowが開くと同時に乱数を生成するにはどのようにすれば良いでしょうか? <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> <!-- function gen_random(num1, num2) { retval=Math.random(); document.myform.ans.value = (Math.floor(retval * (num2 - num1)) + eval(num1)); } //--> </SCRIPT> </HEAD> <BODY> <center> <form name=myform> 乱数の範囲 <input type=hidden name=d1 value=1000> <input type=hidden name=d2 value=9999> <input type=button name=btn1 value=乱数発生 onClick=gen_random(myform.d1.value,myform.d2.value)><br> 乱 数:<input type=text name=ans size=4> </form> </center> </BODY> </HTML>

  • 乱数生成について

    VisualBasic2010を使用しています。 コード内に複数回、乱数を生成しています。 普段は始めだけRandomizeして、Rnd関数を使用していて、毎回違う乱数を生成させているのですが、 今回は毎回同じ乱数を生成させたいのですが、どうやったらできるでしょうか? シード値をどうこうするとは、わかったのですがやり方がわかりません。 わかる方、どうぞよろしくお願いします。

  • 乱数生成について

    c言語のプログラムで、1と-1をランダムにn個出力するプログラムを書きたいと思っています。どのようにすればいいでしょうか。