パスワードを忘れた? アカウント作成

矛盾表示が指摘されていた接触確認アプリCOCOA、当初のバグ誤認説を改め修正版を配布」記事へのコメント

  • by Anonymous Coward on 2020年09月25日 22時47分 (#3895293)

    問題の箇所は ExposureNotificationHandler.cs で定義されている暴露リスクの評価テーブルです。
    https://github.com/cocoa-mhlw/cocoa/commit/868e291cd05cf50e7e61e6eb499... [github.com]
    https://github.com/cocoa-mhlw/cocoa/commit/20f3e8c570175f1ad693ccbf90e... [github.com]

    修正前

    - TransmissionRiskScores = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 },
    - AttenuationScores = new[] { 1, 2, 3, 4, 5, 6, 7, 8 },
    - DurationScores = new[] { 1, 2, 3, 4, 5, 6, 7, 8 },
    - DaysSinceLastExposureScores = new[] { 1, 2, 3, 4, 5, 6, 7, 8 },

    修正後

    + TransmissionRiskScores = new int[] { 7, 7, 7, 7, 7, 7, 7, 7 },
    + AttenuationScores = new[] { 0, 0, 0, 0, 1, 1, 1, 1 },
    + DurationScores = new[] { 0, 0, 0, 0, 1, 1, 1, 1 },
    + DaysSinceLastExposureScores = new[] { 1, 1, 1, 1, 1, 1, 1, 1 },

    このテーブルを利用して「X[days]前に電波強度Y[dBm]以上でZ[min]以上の接触を濃厚接触とみなす」といった判定をしています。修正前のコードは見るからにサンプル値です。通常は厚労省のサーバから送られてくる最新の値が優先されるので問題にならないのですが、何らかの事情でサーバ値を取得できなかった場合にはデフォルトでアプリ内のサンプル値が使われてしまい、どれだけ軽微な接触でも濃厚接触扱いになるということのようです。「オンラインで陽性登録者のIDは取得できるがテーブルの値が取得できない」という微妙なケースを想定し切れていなかったんでしょうね。

    8月4日の時点でおかしいと気付いたYoshiyuki Nakamura氏が詳細な解説を行っています。
    https://twitter.com/nakayoshix/status/1290608592949620736 [twitter.com]
    https://twitter.com/nakayoshix/status/1303296656121589760 [twitter.com]
    https://twitter.com/nakayoshix/status/1305784863320993793 [twitter.com]

    > このため、厳密に設定して検出されない事態を避けるため、検出範囲を広げすぎていたのが理由であったようだ。

    というのはnagazou君の妄想、真っ赤なデマです。

    ここに返信
    • サンプル値そのまま……
      実際に動いてしまうサンプル値を入れたコードを公開した結果起きた失敗事例がまた一つ。

      こんなのどうすれば。
      リリースビルドでサンプル値のままだとエラーになるようにするしかない?

      # BTデバイスとか [security.srad.jp]

      --
      私を信じないで、貴方を裏切ってしまうから。
      • by Anonymous Coward

        Risk levelって国ごとに社会情勢ごとに設定すべきもので 作り始めで決められるものではないですね

        • by Anonymous Coward

          それを.csファイルにハードコーディングしている段階でおかしいんですよね。
          settings.jsonに切り出しておけば誰かが早期に気付いた可能性も。
          その上で設定値が空のsettings.jsonとサンプルのsettings.json.exampleを用意するのが正道。

          • by Anonymous Coward

            何らかのエラーがあったときのためのデフォルト値なんだから読めない可能性がある外部ファイルに依存するのはむしろ問題では?

            • by Anonymous Coward

              cocoa/Covid19Radar/Covid19Radar/settings.json [github.com] って読めない可能性がある外部ファイルなんですか?
              いや、まあ、デフォルト値を設定してもいいですけど、何万人もの行動に影響する値をハードコーディングする勇気はちょっと私にはないですね……。

              • by Anonymous Coward

                ファイルなんて読めない可能性があるもの。
                もっともそいつだと読めないならアプリ動かすなって代物でもあるが。

                それと#3895293をよく読めよ。
                サーバから値取得して使うんだけど、それが取得できない場合の値だよ。
                ファイルにしたところでハードコードする部分は残る。
                なので取得できなくとも動作させるのか、させないかでしかない。

              • by Anonymous Coward

                配列自体を空にしといてサーバから読んだ値を格納すること無く参照したらエラーでコケるようにしとけばハードコードは要らない。
                まぁこれは取得できない場合に動作させない選択をした場合限定の方法だが。
                前回最後に取得成功したときの値を覚えておくって手もある。

    • by Anonymous Coward

      「オンラインで陽性登録者のIDは取得できるがテーブルの値が取得できない」という微妙なケースを想定し切れていなかったんでしょうね。

      某MNポイント申込APIが想像以上にエラー返しているのを見ると国のサービスなんてあてにしちゃだめだよね、という感想もある

    • by Anonymous Coward

      ちゃんと公開レポジトリー更新されてるんだね

    • by Anonymous Coward

      サンプル値っていう表現に違和感がある。普通、サンプリングした値のことをサンプル値って呼ぶ気がする。
      初期値、デフォルト値ならわかるんだけど。
      元にしたサンプルコードの値そのままっていうような意味で使ってるのかしら。

      • by Anonymous Coward

        はい、書いた当人もそう思います。ここでは例示値という意味で使いました。
        初期値・デフォルト値と言い換えることも考えましたが、修正後のコードもある意味では初期値・デフォルト値であり、区別が難しくなるのでやめました。

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

処理中...