お知らせ

リレー間の回線の認証とディスクリプタのミラー

リレーは、自分のロスターにあるリレーにだけ、そのリレーに対して認証された回線でチェーンを延ばすようになりました。クライアントは、チェーンのバンドルを入口のリレーだけから受け取ります。

前回のお知らせ以降、main ブランチに変更がひとつ入りました。前回の時点では、リレー間の回線は 認証されていませんでした。いまは、リレーの認証が有効であれば、チェーンのすべての回線が 接続先のリレーに対して認証されます。研究のページの数値は、これまでと同じ 予備的な計測のままです。

すべてのリレーがロスターを受け取る

証明書の発行は、すべてのリレーにロスターを送って終わるようになりました。ロスターは、トラスト アンカーと、その発行に含まれるすべてのリレーの名前とアドレスで、どのリレーにも同じバイト列が 送られます。リレーが受け取るロスターはプロセスごとにひとつだけで、証明書のあとに限られます。

ロスターを受け取ったリレーは、ロスターの他のリレーの署名付きバンドルを取得し、それぞれを ロスターのアンカーで検証して、メモリの中だけに保持します。

回線は接続先のリレーに対して認証される

リレーがチェーンを延ばす先は、自分のロスターにあり、検証済みのディスクリプタを保持している リレーだけです。それ以外のアドレスを指定したチェーン確立のセルは、接続せずに拒否します。

リレーは、その検証済みディスクリプタにある次のリレーの回線鍵を、回線のハンドシェイクに 混ぜ込みます。クライアントが入口のリレーに対して行っているのと同じです。そのうえで応答側は、 セルがひとつも送られないうちに鍵を確認します。期待された回線鍵を持たない応答側はこの確認を 作れず、ハンドシェイクは失敗し、チェーン確立のセルは送られません。

なぜ重要か:リレーの間にいる能動的な攻撃者が、次のリレーになり代わることへの対策です。

入口がディスクリプタをミラーする

すべてのリレーはミラーを提供します。自分のバンドルと、ロスターの他のリレーの検証済みバンドル です。クライアントは、チェーンのバンドルを入口のリレーに要求し、他のリレーには要求しません。

クライアントは入口を何も信頼しません。すべてのバンドルを自分のアンカーで検証するので、入口は バンドルを渡さないことはできても、書き換えることはできません。

なぜ重要か:クライアントが接続するリレーは、チェーンのバンドルを受け取るときも含めて、 入口だけになりました。

これで解決しないこと

  • 回線の認証は一方向です。応答側は開始側を認証しないため、リレーは依然として、相手がロスターの リレーなのか、クライアントなのか、セル用ポートに接続してきたそれ以外の誰かなのかを 区別できません。
  • 入口はバンドルを渡さないことができます。これはサービス拒否です。また入口には、 クライアントがチェーンを準備する時点が見えます。ディスクリプタの要求がチェーン確立の前に 来るためです。
  • リレーは、ロスターの他のリレーのディスクリプタを期限が切れるまで保持します。そのリレーが 再起動したあとも、ミラーはディスクリプタの有効期間が終わるまで以前のバンドルを渡し、 そのリレーを通るチェーンは確立に失敗します。
  • ロスターを導入する者が、リレーがディスクリプタを問い合わせる先のホストを決めます。応答は、 ロスターのアンカーで検証できた場合だけ有効です。
  • リレーの認証を使わない基準構成は、計測環境での計測のために残っています。この構成は チェーン確立のセルに書かれたどのアドレスにもチェーンを延ばし、リレー間の回線は 認証されません。

ロードマップの次の項目は、チェーンの層の前方秘匿性と、3つより多いリレーの 一覧です。

全体の一覧は限界のページと 適用範囲(英語)に あります。回線のハンドシェイク、ロスター、ミラーは アーキテクチャ(英語)に、 脅威と対策は 脅威モデル(英語)に あります。リポジトリのアドバイザリは、すべて security advisories のページで 公開されています。