アカウント名:
パスワード:
乱数に何を期待しているのか。
さすがに、ずっと-1だと作られるハッシュがずっとコリジョンしちゃう。
ハッシュのシード値を何だと思っているのか。
少なくとも-1という特定の値が連続することは期待してないだろう。それでよければ最初から乱数ではなく-1の固定値を使えばいいだけの話だしね。
-1しか出目が無いのは乱数とは言えないけど出目が連続するのなんか当たり前(むしろ絶対に連続して同じ値が出ないと規定するほうが乱数としては悪い)だしそもそもランダム性が無いとブートできない理由がわからないあちこちに本の虫を読めとオウムみたいな書き込みがあったから読んでみたけど結局理由は書いてないし
ああ、確かに「(2-64の確率で)出目が連続したときにブートしない不具合」とも言えるか
1秒に1回、10億台のLinuxマシンをリブートしても平均500年に1回起きるかどうか、と言えば、脆弱性とか乱数なんだから連続にもなるって言っている人は黙るのかな。
# 連続という表現がパラドックスの一因だと思う。
どれだけ統計的に擁護したって論理的に正しくはならないだろ
「騒いでいるのはごくごくごく一部のユーザだけ!」っていう例の一派じゃあるまいし
別に擁護でなく、統計は論理的事実です。(逆に言うと実験的には正しくはならないでしょう)
解釈に揺らぎがあるだけです。
そんなこと言ってたらハッシュ関数使えないやん。
実際条件限定しないと使えないですよね?
同じ値が来たらブートできない脆弱性があるということですか?つまり、RDRAND命令を使わない場合でも天文学的確率でブート不能な場合があるということで…
なんか嫌なことでもあったの?
職質でもされたんだろう
ハッシュのシード値にしてるだけなら-1でも別に問題ないので、ブートしない理由になってなくない?(と調べずにコメントする)
> 今時ハッシュテーブルを毎回同じで初期化するとかバカなのレベルだし
いやいや、「毎回同じで初期化する」処理でなんでブートできないのって話題で、これはこれで脆弱性なのでは?という話です。
別に環境的にそうであるならそのまま使っても良いじゃん。安全性高くできるならその様に、出来ないのならやっぱりその様に使えば良いだけじゃ。んでもって、「AMDだと安全性に疑問があるから直してね」って言えば良いだけに思えるが。
-1でブートするように書き換えてビルドしろと
ハッシュテーブルのシード値が毎回変わらないからと言ってブートできなくなるのは、「Linuxは低い確率でリブートに失敗します」ってこと
乱数って同じ値が連続する事は絶対ないのでしたっけ?
純粋な乱数で-1が連続した場合正常に動作しないコードってこと?乱数って必ず-1が連続してはならないって定義あったっけ?
慣れないながらもソース読んでみたけど分からんね・hashmap の初期 hash_key に使っている →初期値にだけ使ってるから衝突しないし、衝突しても O(N) になるだけだし問題ない(のが普通だよね)・root パスワード暗号化のソルトに使ってる →暗号強度的なチェックが入っていれば引っかかりそうだけど、見つからず・UUID で使ってる? →コメントでは使っていると書いているけど見つからず。ただ same_entry で同じ UUID がないかのチェックをしていて、これに失敗するとコケるっぽい
UUID がぶつかるのって天文学的確率だし、私も衝突しない前提で書くこと多いけど……バグまで考慮するとそうもいかないのか
ソースコードは読めないペーペーなので、どこで使っているかは確認してませんが、本の虫でリンクされているコードのコメントによると、サービスにinvocationIDを採番する(システムの起動直後ではシステム固有のID(?)が取得できないため乱数に頼るしかないらしい)のに使用しているらしいです。
で、該当のコードのログをたどると、#11810 [github.com]で、UUIDの衝突のために、invocationIDが採番できずに処理が失敗するとあるようです。
# ブートではなくて、終了時の話だけど・・・
英語コメント読めない人間なので捕捉の情報助かりますただ確かに記載の通り、終了時の動きについてのコメントのようですね
報告の画面 [phoronix.net]見ると、UUID の衝突でこんな動きになるのか? と思ってしまいます衝突したらそれ以上起動できないとしてストンと落ちる気がするんだけど……
識者の見解求ム
元コメですが...
採番したかったinvocationIDは、 systemdが起動するすべてのサービスに振られるため [github.com]、ブート時(サービスをたくさん立ち上げる必要がある)にIDが衝突→サービスの起動に失敗が繰り返されるのは不思議ではないのかなとsystemdの仕様は分かりませんが、一部のサービスが起動できなかったからシステム全体を落とすという動きではなく、一部のサービスが実行できなかったとしても可能な限り他のサービスを立ち上げようとした結果、画面のようになったのかなと...
ただ、
ソース読めない、英語コメント読めない人間がコメントするなよ…
ちゃんと読んでないから、予想を多分に含んでるけど、RDRANDで生成された乱数を、UUIDの乱数部分(122bit)にそのまま使ってるんじゃないかな。だから、-1が連続するとUUIDが毎回衝突してリトライ回数が閾値を超えると死ぬ(?)
RDRANDで生成された乱数を疑似乱数のシード値にして、疑似乱数からUUIDを生成していれば、毎回(起動するたびに)-1が生成されたとしても、UUIDが衝突することは滅多にないはず# なんでこうなってないんだろう。。
まったくそのとおりで、たとえばAES-GCMでnonceを乱数で生成していたら致命的な脆弱性。https://jovi0608.hatenablog.com/entry/20160524/1464054882 [hatenablog.com]
サイコロなら、理論的には、100万回サイコロを振ってすべて6になる可能性はあるRDRANDが理想的な乱数なら、100万回乱数を発生させればすべて-1になる可能性はある
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家
乱数なら-1が連続してもいいのでは (スコア:0)
乱数に何を期待しているのか。
Re:乱数なら-1が連続してもいいのでは (スコア:3)
さすがに、ずっと-1だと作られるハッシュがずっとコリジョンしちゃう。
Re: (スコア:0)
ハッシュのシード値を何だと思っているのか。
Re:乱数なら-1が連続してもいいのでは (スコア:1)
普通は unsigned ですよね???
Re: (スコア:0)
少なくとも-1という特定の値が連続することは期待してないだろう。
それでよければ最初から乱数ではなく-1の固定値を使えばいいだけの話だしね。
Re:乱数なら-1が連続してもいいのでは (スコア:3, 興味深い)
-1しか出目が無いのは乱数とは言えないけど出目が連続するのなんか当たり前(むしろ絶対に連続して同じ値が出ないと規定するほうが乱数としては悪い)だし
そもそもランダム性が無いとブートできない理由がわからない
あちこちに本の虫を読めとオウムみたいな書き込みがあったから読んでみたけど結局理由は書いてないし
Re:乱数なら-1が連続してもいいのでは (スコア:1)
ああ、確かに「(2-64の確率で)出目が連続したときにブートしない不具合」とも言えるか
Re: (スコア:0)
1秒に1回、10億台のLinuxマシンをリブートしても平均500年に1回起きるかどうか、と言えば、脆弱性とか乱数なんだから連続にもなるって言っている人は黙るのかな。
# 連続という表現がパラドックスの一因だと思う。
Re: (スコア:0)
どれだけ統計的に擁護したって論理的に正しくはならないだろ
「騒いでいるのはごくごくごく一部のユーザだけ!」っていう例の一派じゃあるまいし
Re: (スコア:0)
別に擁護でなく、統計は論理的事実です。
(逆に言うと実験的には正しくはならないでしょう)
解釈に揺らぎがあるだけです。
Re: (スコア:0)
そんなこと言ってたらハッシュ関数使えないやん。
Re: (スコア:0)
実際条件限定しないと使えないですよね?
Re:乱数なら-1が連続してもいいのでは (スコア:1)
同じ値が来たらブートできない脆弱性があるということですか?
つまり、RDRAND命令を使わない場合でも天文学的確率でブート不能な場合があるということで…
Re:乱数なら-1が連続してもいいのでは (スコア:2)
同じハッシュ値を持ちたくないって仕様だから、前と同じシード値が来たら、
普通は異なる値が来るまでリトライするよね。
乱数であれば、そのうち、別の値になることが期待できるだろうし…
でも、延々リトライさせてストールさせるわけにはいかないから、
ある程度繰り返しても変化がなければそこで、処理をあきらめる必要がある。
で、今回の件はかならず -1 を返すので必ずリトライオーバでブートに失敗する
ってのは、systemd が要求している仕様からでも導けるし、
通常の乱数の中で同じ値がたまたま数回連続しても、ほぼ大丈夫な実装だろう
ことは想像できると思うのだけど
Re: (スコア:0)
なんか嫌なことでもあったの?
Re: (スコア:0)
職質でもされたんだろう
Re: (スコア:0)
ハッシュのシード値にしてるだけなら-1でも別に問題ないので、ブートしない理由になってなくない?(と調べずにコメントする)
Re: (スコア:0)
> 今時ハッシュテーブルを毎回同じで初期化するとかバカなのレベルだし
いやいや、「毎回同じで初期化する」処理でなんでブートできないのって話題で、
これはこれで脆弱性なのでは?という話です。
Re: (スコア:0)
別に環境的にそうであるならそのまま使っても良いじゃん。
安全性高くできるならその様に、出来ないのならやっぱりその様に使えば良いだけじゃ。
んでもって、「AMDだと安全性に疑問があるから直してね」って言えば良いだけに思えるが。
Re: (スコア:0)
-1でブートするように書き換えてビルドしろと
Re: (スコア:0)
ハッシュテーブルのシード値が毎回変わらないからと言ってブートできなくなるのは、
「Linuxは低い確率でリブートに失敗します」
ってこと
Re:乱数なら-1が連続してもいいのでは (スコア:1)
乱数って同じ値が連続する事は絶対ないのでしたっけ?
Re: (スコア:0)
純粋な乱数で-1が連続した場合正常に動作しないコードってこと?
乱数って必ず-1が連続してはならないって定義あったっけ?
Re: (スコア:0)
慣れないながらもソース読んでみたけど分からんね
・hashmap の初期 hash_key に使っている
→初期値にだけ使ってるから衝突しないし、衝突しても O(N) になるだけだし問題ない(のが普通だよね)
・root パスワード暗号化のソルトに使ってる
→暗号強度的なチェックが入っていれば引っかかりそうだけど、見つからず
・UUID で使ってる?
→コメントでは使っていると書いているけど見つからず。ただ same_entry で同じ UUID がないかのチェックをしていて、これに失敗するとコケるっぽい
UUID がぶつかるのって天文学的確率だし、私も衝突しない前提で書くこと多いけど……バグまで考慮するとそうもいかないのか
UUIDの衝突が原因で失敗したっぽい? (スコア:0)
ソースコードは読めないペーペーなので、どこで使っているかは確認してませんが、
本の虫でリンクされているコードのコメントによると、サービスにinvocationIDを採番する
(システムの起動直後ではシステム固有のID(?)が取得できないため乱数に頼るしかないらしい)のに使用しているらしいです。
で、該当のコードのログをたどると、#11810 [github.com]で、
UUIDの衝突のために、invocationIDが採番できずに処理が失敗するとあるようです。
# ブートではなくて、終了時の話だけど・・・
Re: (スコア:0)
英語コメント読めない人間なので捕捉の情報助かります
ただ確かに記載の通り、終了時の動きについてのコメントのようですね
報告の画面 [phoronix.net]見ると、UUID の衝突でこんな動きになるのか? と思ってしまいます
衝突したらそれ以上起動できないとしてストンと落ちる気がするんだけど……
識者の見解求ム
Re: (スコア:0)
元コメですが...
採番したかったinvocationIDは、 systemdが起動するすべてのサービスに振られるため [github.com]、
ブート時(サービスをたくさん立ち上げる必要がある)にIDが衝突→サービスの起動に失敗が繰り返されるのは不思議ではないのかなと
systemdの仕様は分かりませんが、一部のサービスが起動できなかったからシステム全体を落とすという動きではなく、
一部のサービスが実行できなかったとしても可能な限り他のサービスを立ち上げようとした結果、画面のようになったのかなと...
ただ、
Re: (スコア:0)
ソース読めない、英語コメント読めない人間がコメントするなよ…
Re: (スコア:0)
ちゃんと読んでないから、予想を多分に含んでるけど、
RDRANDで生成された乱数を、UUIDの乱数部分(122bit)にそのまま使ってるんじゃないかな。
だから、-1が連続するとUUIDが毎回衝突してリトライ回数が閾値を超えると死ぬ(?)
RDRANDで生成された乱数を疑似乱数のシード値にして、疑似乱数からUUIDを生成していれば、
毎回(起動するたびに)-1が生成されたとしても、UUIDが衝突することは滅多にないはず
# なんでこうなってないんだろう。。
Re: (スコア:0)
まったくそのとおりで、たとえばAES-GCMでnonceを乱数で生成していたら致命的な脆弱性。
https://jovi0608.hatenablog.com/entry/20160524/1464054882 [hatenablog.com]
Re: (スコア:0)
サイコロなら、理論的には、100万回サイコロを振ってすべて6になる可能性はある
RDRANDが理想的な乱数なら、100万回乱数を発生させればすべて-1になる可能性はある