Tally のしくみ
Tally は、航空機が発信する無線メッセージを一般の家庭にある受信機で受け取り、誰でも使える位置に変えるオープンなネットワークです。このページでは、予備知識がなくてもわかるように設計の全体を説明します。
3 つの用語
- フィーダー:受信した内容を送り出す受信機。誰かの家にある無線受信機と、各メッセージに届いた正確な時刻を記録し、署名して送り出す小さなプログラムからなります。
- リレー:フィーダーから届いたものを集め、位置を計算し、ほかのリレーと共有するプログラム。ネットワークの役目はすべてリレーが担い、誰でもリレーを運用できます。
- クライアント:Web サイト、アプリ、地図など、Tally のデータを読むものすべて。クライアントは共有を一切しません。アクセスは、無料の小規模枠か、ひも付いたリレーのクレジットのどちらかです。大量のデータを求める企業はリレーを運用し、その企業のクライアントはそのリレーのクレジットで読み取ります。クライアントはリレーから読み取ります。firehose が必要なら自分のリレーから(多くの場合、同じ会社が両方を運用します)、少量の利用なら公開リレーから読み取ります。
構成要素
フィーダーはメッセージをリレーに送ります。リレーがすべての仕事をこなします。集め、位置を計算し、互いにデータを渡し合います。クライアントはリレーから読み取ります。すべてのリレーが同じプログラムなので、特別なサーバーも中央の運用者もありません。
データの行き先
フィーダーは、別々のネットワーク上にある、最も近い正常なリレー 2 つにデータを送ります。1 か所の障害や 1 つの不正なリレーによって、その声が途絶えないようにするためです。近さは、メッセージが往復するのにかかる時間で測ります。これは誰にも偽れません。
生のメッセージは近くにとどまります。同じ地域を担当するリレーまで、多くても 1 ホップしか移動せず、そのリレーが地域の位置を計算します。世界中を行き来するのは完成した位置だけなので、誰の通信量も小さく抑えられます。
位置を発信しない航空機
ほとんどの航空機は自分の GPS 位置を発信しています。発信しない機体もありますが、それでもレーダーには短い応答信号で答えます。同じ応答信号を複数のフィーダーが受け取ると、フィーダーごとに距離が違うため、届く時刻がわずかにずれます。時間差の 1 つ 1 つが航空機の位置をある曲線の上に絞り込み、曲線が交わるところに航空機がいます。これがマルチラテレーション、略して MLAT で、リレーの仕事です。
そのためには、フィーダーの時計が 100 万分の 1 秒の精度でそろっている必要がありますが、家庭の受信機はそうではありません。そこでリレーは、GPS を発信している航空機を使って各時計を補正します。その位置はわかっているので、メッセージが届くはずの時刻もわかり、その差がその時計の誤差になります。
どの答えにも正直な誤差範囲が付きます。時計の補正で残る不確かさも含めて、どれだけずれている可能性があるかを示します。
時計は、タイルと呼ぶ固定のグループ単位でまとめて補正されます。世界は約 50、100、200、400 km の 4 つの大きさの地域からなる固定の格子に分けられ、各タイルには近くのフィーダーが最大 48 台入ります。フィーダーは、どこにあるかだけで選ばれます。ある地域の上空の航空機はすべてそのタイルの補正を使うので、計算は航空機ごとではなく地域ごとに一度で済みます。どのリレーも同じタイルを計算するので、結果は検証可能なままです。
どのリレーも、同じデータからは最後の 1 ビットまで同じ答えを計算します。そのため、異なるリレーの答えは食い違うことなく統合でき、誤った答えを公開したリレーは誰でもその誤りを証明できます。
速報と確定
位置をきちんと検証するには時間がかかります。リレーがすべてのフィーダーからのメッセージが届くのを待つためです。そこで MLAT の各機体には 2 つの答えが出ます。まず、応答信号から約 1 から 2 秒後に、直近の時計補正を引き継いで計算した速報が、広めの誤差範囲付きで届きます。続いて検証済みの最終位置が届き、速報を置き換えます。速報を受け取るかどうかはクライアントが選べます。
速報はコックピットで役立ちます。150 ノットで飛ぶ機体は 12 秒で半マイル進むからです。
2 つのプロダクト
- 地域版:生のメッセージを含め、1 つの地域のすべてのデータ。研究者、地域のアプリ、その地域を担当するリレー向けです。
- 世界版:世界中の機体ごとに 1 秒に 1 つの位置。フライト追跡サービスや全体像が必要な企業向けです。
BitTorrent のような共有
各地域のデータは、まずそれを求める少数のリレーに届き、そのそれぞれがさらに数リレーへ渡します。地域のフィーダーを受け持つリレーが送るコピーは、地域の人気にかかわらず 2 つか 3 つに固定されているので、人気のある地域でも費用が増えることはありません。
地域を担当することは義務です。各ストリームはストライプに分けられ、その地域を担当するリレーはそれぞれ自分の分担を数リレーへ転送し、転送しないリレーはその地域から外されます。
地域はツリーをなす
世界は、誰もが合意する固定の地域ツリーに分けられています。小さな地域は地方の中に、地方は国の中に、国は大陸の中に、大陸は世界の中にあります。誰かが割り当てるものではなく、全員に共通の固定の格子です。
リレーは、どの階層でも望む地域を担当します。地方のサイトはその地方を、全国向けのアプリはその国を、世界規模の企業は世界全体を担当します。どの階層を担当しても、リレーはその階層で共有し、その地域のデータを求める相手に転送します。
ある大きな地域の下にあるすべての地域を集めたリレーは、その大きな地域を 1 つのバンドルとして提供できます。そのため、世界全体を扱うリレーは、小さな地域すべてではなく、少数の大陸や国のバンドルに接続するだけで済みます。どの階層も複数のリレーが提供しているので、1 つがオフラインになっても何も失われません。
バンドルされたデータには元のリレーそれぞれの署名が残るので、バンドルのために余分な信頼は必要ありません。バンドルは、その中の地域とまったく同じように検証されます。
公正な利用
小規模な利用は無料です。クライアントは接続さえあれば 1 つの地域の位置を読み取れます。生データや広い地域の位置といった大規模な利用は、フィーダーを受け入れるか新しいデータをアップロードすることで、きちんと貢献するリレーが獲得し、そのリレーにひも付いたクライアントはそのクレジットで読み取ります。クライアントは共有しないので、最も多くのデータを求める人はリレーを運用し、ネットワークの容量を増やすことになります。
すべてのリレーは、必須のアップロード速度上限のもとで動きます。そのため請求額が上限で許される以上になることはなく、運用者が思わぬ請求に驚くことはありません。
フィーダーが受け取るもの
すべてのフィーダーには公開のステーションページがあり、稼働率、メッセージの頻度、受信した機体、受信範囲、そのフィーダーだけが提供するカバー範囲、MLAT への貢献度、ランキングでの順位を表示します。
ステーション検索すべて公開の署名付きデータから計算されるので、誰でも確認できます。
信頼
- すべてに署名があります。フィーダーはそれぞれ独自の鍵を持ち、リレーはフィーダーのメッセージを改ざんすることも作り出すこともできません。できるのは転送しないことだけです。
- 答えは再現できます。同じ生データがあれば、誰でも位置を計算し直して、まったく同じ結果を得られます。
- 不正は証明できます。同じ入力から得られた署名付きの 2 つの答えが食い違えば、それが誤りの証明になり、誰でもそのリレーの利用をやめられます。
- フィーダーは信用を積み上げます。メッセージがほかのフィーダーと一致し続けるフィーダーは、時間とともに重みを増します。