From: "mame (Yusuke Endoh)" <noreply@ruby-lang.org>
To: ruby-dev@ruby-lang.org
Subject: [ruby-dev:51164] [Ruby master Bug#13885] Random.urandom と securerandom について
Date: Wed, 16 Feb 2022 05:19:31 +0000 (UTC) [thread overview]
Message-ID: <redmine.journal-96512.20220216051931.18@ruby-lang.org> (raw)
In-Reply-To: <redmine.issue-13885.20170909154049.18@ruby-lang.org>
Issue #13885 has been updated by mame (Yusuke Endoh).
いまは Random.urandom は利用できない環境で RuntimeError を投げるようになっているはずなのですが、securerandom.rb で Random.urandom が利用可能かをチェックするコードが古いまま(nil を返すかどうかを見る)になってました。
ちょっと Random.urandom が利用できない環境を作るのが難しそうでテストできないのですが、おそらく動かないと思うので修正しておこうと思います。
https://github.com/ruby/ruby/pull/5557
----------------------------------------
Bug #13885: Random.urandom と securerandom について
https://bugs.ruby-lang.org/issues/13885#change-96512
* Author: mame (Yusuke Endoh)
* Status: Closed
* Priority: Normal
* ruby -v: ruby 2.5.0dev (2017-09-09 trunk 59792) [x86_64-linux]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
遠藤です。
Random.urandom と securerandom の仕様について卜部さんと話していて、いくつか気になる点が出てきたので挙げておきます。
1. Random.urandom は、getrandom(2) や (/dev/urandom に対する) read(2) システムコールを 1 回しか呼ばないようです。よって、要求量が大きくて 1 回では文字列を準備できないとき(例えば Random.urandom(100_000_000) )、失敗して nil を返します。これは意図的でしょうか。要求量が得られるまで(または他の要因で失敗するまで)繰り返し呼ぶべきではないでしょうか。
2. Random.urandom は失敗するとき、nil ではなく例外を投げるほうがよいのではないでしょうか。nil を返して実行が進んで幸せになるケースはあまり思い浮かびませんでした。
3. Random.urandom が nil を返す可能性があることは rdoc で明記されるべきではないでしょうか。(とりあえず r59803 で書き足しました。まずかったらすみません)
4. securerandom は、初回の呼び出しで Random.urandom が成功したらその後ずっと Random.urandom を使い、失敗したらずっと openssl を使うようになっています。これは本当に初回の呼び出しだけで振り分けるのでよいのでしょうか。具体的には、Random.urandom(0) は常に成功する(空文字列を返す)ので、実際には urandom が使えない環境でも urandom に固定される可能性があります。
5. 逆に、securerandom のバックエンドを動的に切り替えるようにしたら問題あるでしょうか。最初は成功していた Random.urandom が途中から失敗するようになったとき、openssl へフォールバックしても良いものでしょうか。また、Random.urandom が復活した場合、openssl から Random.urandom に戻すのは問題ないでしょうか。
--
https://bugs.ruby-lang.org/
parent reply other threads:[~2022-02-16 5:19 UTC|newest]
Thread overview: expand[flat|nested] mbox.gz Atom feed
[parent not found: <redmine.issue-13885.20170909154049.18@ruby-lang.org>]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=redmine.journal-96512.20220216051931.18@ruby-lang.org \
--to=noreply@ruby-lang.org \
--cc=ruby-dev@ruby-lang.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).