From: Tanaka Akira Date: 2007-06-09T23:40:40+09:00 Subject: [ruby-dev:30945] Re: secrand.rb In article <466AA73C.9030407@sarion.co.jp>, "NAKAMURA, Hiroshi" writes: > 本筋に関しては別の人のコメントを待ちます(なければないでOK)。脇道だけ。 ゆぞさんに口頭で尋ねてみたんですが、SecureRandom がいいとの ことで、なひさんとゆぞさんの二人からそういわれると、そっちの 業界の見識というものだと感じざるを得ません。というわけで SecureRandom かなぁ、と思っています。 他の意見もあれば聞きたいです。 >> そういう pseudo random number generator のクラスを最初から >> ruby が提供するのはありうると思いますが、 > > 提供したほうがいいと思ってます。お前がやれって? まぁ、手を動かす人が一人もいなければ提供されませんからね。 Random という名前のクラスで Random#srand と Random#rand とい うメソッドがあって中身のアルゴリズムが srand/rand と同じ、と いうのをだれかが実装つきで出せばすぐに入っちゃうんじゃないか という気がします。 > もちろんわかってる人は自前で作るでしょうが、例えば現状のcgi/session.rbで > もやってなかったわけで。Railsのどこぞのプラグインがsrandしたおかげで、認 > 証機構が役立たなくなってたとか、いつか起こるんじゃないですかね。 > > 簡単に使える代替案があれば、「ライブラリ作者はrandは危険だから使うな」と > 主張し易くなる。 どうも危険性に実感が湧かないなぁ、と思ってその原因をしばらく 考えたところ、上で述べた Random のようなクラスが必要になる認 証機構の具体例を知らないからだ、と思い至りました。 具体的にはどの認証機構がそういうクラスを必要とするんですか? >> # nonce って secure random でないとよろしくないですよね? > > 厳密に言えば、onceであることがその存在意義なので、secure randomである必 > 要性はありません。例えば0からincrementalでもOKです。で、Rubyでは、randで > 生成しちゃ駄目です。先の話のように、誰かが意図的に、srand(1)とか埋め込む > かもしれない(毎回同じ値になる可能性があり、onceじゃなくなる)。 ふむ。私はあまりよくわかっていないようです。 (言い訳にはなりませんが、事実として素人に近いのです) digest auth で、古い nonce を受け付けることの得失について論 じている項があります。 (RFC 2617 の 4.3 Limited Use Nonce Values) それを読むと転送効率のために古い nonce をある程度受け付ける こともある、と思えます。 そういう場合はどうなんでしょう? それとも、RFC 2617 は間違っていて、古い nonce を受け付けるこ とはありえないのでしょうか? > まぁ、開発者の誰もが厳密に考えるわけじゃないので、「nonceには > SecureRandom使っとけ」というのはいいかもしれません。 あるいは、そういうのが「厳密でない考え」なのでしょうか? -- [田中 哲][たなか あきら][Tanaka Akira]