お知らせ

リレーの身元を鍵に結び付け、ミラーの2件の修正を公開

リレーの認証が有効なとき、リレーの身元がチェーン確立と回線の鍵に入るようになりました。クライアントはミラーのバンドルを1つずつ検証し、ディスクリプタのミラーに関する2件のセキュリティアドバイザリは修正済みで公開されています。

クライアントがリレーの鍵を受け取り、それを信頼する仕組みについて、2つの変更が main ブランチに 入りました。回線上のバイトは1つも変わらず、研究のページの数値は、これまでと 同じ予備的な計測のままです。

リレーの身元が鍵の一部になる

前回の変更で、すべての鍵はその交換のトランスクリプトに結び付けられましたが、結び付けたのは 鍵であって、リレーの身元ではありませんでした。いまは、リレーの認証が有効なとき、各ホップの チェーン確立のトランスクリプトと、認証された回線のトランスクリプトに、リレーの身元の鍵、 つまり証明書が証明する署名鍵も入ります。チェーン確立の層と回線が開くのは、その秘密鍵を持ち、 同じ身元を結び付けるリレーだけです。他のリレーのオニオン鍵や回線鍵を自分のディスクリプタに 写したリレーは、それで何も得られません。

鍵の方式のバージョンは v2 になります。バージョンを取り決める仕組みはなく、以前のリレーと クライアントは新しいものとは一緒に動かないため、一緒に更新します。リレーの認証を使うリレーと、 使わないクライアントやリレーのあいだでも、鍵は一致しません。

クライアントはバンドルを1つずつ検証する

クライアントは、一覧にあるすべてのリレーの署名済みバンドルを入口に求めます。以前はそれらを ひとまとまりとして検証し、1つのバンドルが検証に通らないときや、2つのリレーの鍵が重なるときは、 ミラー全体を拒否していました。いまはバンドルを1つずつ検証します。検証に通らない一覧のリレーの バンドルは、同じ上限(-missing、標準では1つ)の中で、入口がミラーから外したリレーとして 数えます。入口自身のバンドルは検証に通る必要があります。異なるリレーのバンドルどうしは、 もう比べません。上の身元の結び付けにより、鍵が重なっても意味がなくなったためです。

リレーが他のリレーのバンドルをミラーに載せるのは、自分の時計でそのバンドルが有効になってから、 期限切れの少し前までになりました。その余裕は、許容される時計のずれに、要求にかかりうる時間を 足したものです。この期間の外では、そのリレーは入口が外したリレーとして数えられます。 ディスクリプタの有効期間には下限ができたので、時計のずれが許容範囲内であれば、期限どおりに 署名し直すリレーはすべてのミラーに残ります。

2件のアドバイザリ、修正して公開

  • GHSA-pwfj-76v6-hcch、 深刻度は中:他のリレーのオニオン鍵を自分のディスクリプタに載せた不正なロスターのリレーが、 クライアントにすべての正直なミラーを拒否させ、クライアントはそのリレーから入るまで入口を 選び直していました。身元の結び付けと、バンドルを1つずつ検証する方式で修正しました。 コードレビューで見つけたもので、計測環境では再現していません。
  • GHSA-5fcf-5qcm-q8vq、 深刻度は低:期限切れの間際にあるディスクリプタのせいで、時計が少し進んでいるクライアントが 正直なミラーを拒否していました。1台のホストで動く計測環境のように時計が同じであれば、 この隙はありませんでした。ミラーの余裕で修正しました。

そのほかの変更

  • クライアントは回線が終わるとすぐに送信をやめます。入口から届いたフレームが開けない場合は、 独立した拒否の種類としてチェーンを閉じます。
  • 鍵のメモリのテストは、linux の ci でページをロックできないときやそのフラグを読めないとき、 スキップせずに失敗します。
  • オニオン鍵の取り替えに失敗したときは、元のエラーの文面を含めず、決まった種類としてログに 記録します。

どう確かめたか

  • 両方のスイートで、身元の鍵がある場合とない場合のゴールデンベクトル。
  • 両方のスイートでのテスト:あるリレーに結び付けたチェーン確立の層と回線は、同じ鍵を持つ 別のリレーでは開かず、片側だけに身元がある場合も開きません。チェーンは、そのために示された 身元を結び付けるリレーを通るときだけ届きます。
  • クライアントのテスト:検証に通らない一覧のリレーのバンドルは上限の中で外されたものとして 数え、入口のバンドルが検証に通らないかないときはミラーを拒否します。
  • 変更は計測環境のクラスタに展開し、すべてのリレーを一緒に更新しました。往復が通ること、 別のアンカーを持つクライアントが拒否されることを確かめました。

これで解決しないこと

  • リレーのアドレスと証明書のハッシュはトランスクリプトに含まれず、リレーの認証を使わない 場合に結び付けられるのは鍵だけです。
  • 不正な入口は、上限の中でなら、いまもリレーをミラーから外せます。またリレーは、いまも リレーごとに違うオニオン鍵を見せて、クライアントがどのミラーを使ったかを知ることができます。
  • 回線の応答側は、依然として開始側を認証しません。

全体の一覧は限界のページと 適用範囲(英語)に、 トランスクリプトは暗号(英語)に、 脅威と対策は脅威モデル(英語)に あります。