パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

AMDのCPUにおけるRDRAND命令に不具合、Systemdが影響を受ける」記事へのコメント

  • by Anonymous Coward on 2019年07月17日 16時40分 (#3653027)

    乱数に何を期待しているのか。

    • さすがに、ずっと-1だと作られるハッシュがずっとコリジョンしちゃう。

      親コメント
      • by Anonymous Coward

        ハッシュのシード値を何だと思っているのか。

    • 乱数なので、好きに解釈すれば良いのかも知れませんが、
      普通は unsigned ですよね???
      親コメント
    • by Anonymous Coward

      少なくとも-1という特定の値が連続することは期待してないだろう。
      それでよければ最初から乱数ではなく-1の固定値を使えばいいだけの話だしね。

      • by Anonymous Coward on 2019年07月17日 17時25分 (#3653083)

        -1しか出目が無いのは乱数とは言えないけど出目が連続するのなんか当たり前(むしろ絶対に連続して同じ値が出ないと規定するほうが乱数としては悪い)だし
        そもそもランダム性が無いとブートできない理由がわからない
        あちこちに本の虫を読めとオウムみたいな書き込みがあったから読んでみたけど結局理由は書いてないし

        親コメント
        • by Anonymous Coward on 2019年07月17日 19時05分 (#3653167)

          ああ、確かに「(2-64の確率で)出目が連続したときにブートしない不具合」とも言えるか

          親コメント
          • by Anonymous Coward

            1秒に1回、10億台のLinuxマシンをリブートしても平均500年に1回起きるかどうか、と言えば、脆弱性とか乱数なんだから連続にもなるって言っている人は黙るのかな。

            # 連続という表現がパラドックスの一因だと思う。

            • by Anonymous Coward

              どれだけ統計的に擁護したって論理的に正しくはならないだろ

              「騒いでいるのはごくごくごく一部のユーザだけ!」っていう例の一派じゃあるまいし

              • by Anonymous Coward

                別に擁護でなく、統計は論理的事実です。
                (逆に言うと実験的には正しくはならないでしょう)

                解釈に揺らぎがあるだけです。

              • by Anonymous Coward

                そんなこと言ってたらハッシュ関数使えないやん。

              • by Anonymous Coward

                実際条件限定しないと使えないですよね?

      • by Anonymous Coward on 2019年07月17日 17時00分 (#3653047)

        同じ値が来たらブートできない脆弱性があるということですか?
        つまり、RDRAND命令を使わない場合でも天文学的確率でブート不能な場合があるということで…

        親コメント
        • なんで、そうなるんだろう?

          同じハッシュ値を持ちたくないって仕様だから、前と同じシード値が来たら、
          普通は異なる値が来るまでリトライするよね。
          乱数であれば、そのうち、別の値になることが期待できるだろうし…
          でも、延々リトライさせてストールさせるわけにはいかないから、
          ある程度繰り返しても変化がなければそこで、処理をあきらめる必要がある。

          で、今回の件はかならず -1 を返すので必ずリトライオーバでブートに失敗する
          ってのは、systemd が要求している仕様からでも導けるし、
          通常の乱数の中で同じ値がたまたま数回連続しても、ほぼ大丈夫な実装だろう
          ことは想像できると思うのだけど
          親コメント
      • by Anonymous Coward

        純粋な乱数で-1が連続した場合正常に動作しないコードってこと?
        乱数って必ず-1が連続してはならないって定義あったっけ?

    • by Anonymous Coward

      慣れないながらもソース読んでみたけど分からんね
      ・hashmap の初期 hash_key に使っている
       →初期値にだけ使ってるから衝突しないし、衝突しても O(N) になるだけだし問題ない(のが普通だよね)
      ・root パスワード暗号化のソルトに使ってる
       →暗号強度的なチェックが入っていれば引っかかりそうだけど、見つからず
      ・UUID で使ってる?
       →コメントでは使っていると書いているけど見つからず。ただ same_entry で同じ UUID がないかのチェックをしていて、これに失敗するとコケるっぽい

      UUID がぶつかるのって天文学的確率だし、私も衝突しない前提で書くこと多いけど……バグまで考慮するとそうもいかないのか

      • ソースコードは読めないペーペーなので、どこで使っているかは確認してませんが、
        本の虫でリンクされているコードのコメントによると、サービスにinvocationIDを採番する
        (システムの起動直後ではシステム固有のID(?)が取得できないため乱数に頼るしかないらしい)のに使用しているらしいです。

        で、該当のコードのログをたどると、#11810 [github.com]で、
        UUIDの衝突のために、invocationIDが採番できずに処理が失敗するとあるようです。

        # ブートではなくて、終了時の話だけど・・・

        • by Anonymous Coward

          英語コメント読めない人間なので捕捉の情報助かります
          ただ確かに記載の通り、終了時の動きについてのコメントのようですね

          報告の画面 [phoronix.net]見ると、UUID の衝突でこんな動きになるのか? と思ってしまいます
          衝突したらそれ以上起動できないとしてストンと落ちる気がするんだけど……

          識者の見解求ム

          • by Anonymous Coward

            元コメですが...

            採番したかったinvocationIDは、 systemdが起動するすべてのサービスに振られるため [github.com]、
            ブート時(サービスをたくさん立ち上げる必要がある)にIDが衝突→サービスの起動に失敗が繰り返されるのは不思議ではないのかなと
            systemdの仕様は分かりませんが、一部のサービスが起動できなかったからシステム全体を落とすという動きではなく、
            一部のサービスが実行できなかったとしても可能な限り他のサービスを立ち上げようとした結果、画面のようになったのかなと...

            ただ、

            • by Anonymous Coward

              ソース読めない、英語コメント読めない人間がコメントするなよ…

      • by Anonymous Coward

        ちゃんと読んでないから、予想を多分に含んでるけど、
        RDRANDで生成された乱数を、UUIDの乱数部分(122bit)にそのまま使ってるんじゃないかな。
        だから、-1が連続するとUUIDが毎回衝突してリトライ回数が閾値を超えると死ぬ(?)

        RDRANDで生成された乱数を疑似乱数のシード値にして、疑似乱数からUUIDを生成していれば、
        毎回(起動するたびに)-1が生成されたとしても、UUIDが衝突することは滅多にないはず
        # なんでこうなってないんだろう。。

    • by Anonymous Coward

      まったくそのとおりで、たとえばAES-GCMでnonceを乱数で生成していたら致命的な脆弱性。
      https://jovi0608.hatenablog.com/entry/20160524/1464054882 [hatenablog.com]

    • by Anonymous Coward

      サイコロなら、理論的には、100万回サイコロを振ってすべて6になる可能性はある
      RDRANDが理想的な乱数なら、100万回乱数を発生させればすべて-1になる可能性はある

弘法筆を選ばず、アレゲはキーボードを選ぶ -- アレゲ研究家

処理中...