💾 Archived View for tilde.pink › ~kyo › technomancy › gemini-toha.gmi captured on 2022-03-01 at 15:40:06. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2022-01-08)
-=-=-=-=-=-=-
2022年1月3日
ざっくり言って、ジェミニ(gemini)はhttpのような通信プロトコルであり、httpより単純であるという特徴があります。仕様書は一日だけで読み切って理解できるほど短く、誰でも容易に正しく実装できるようにデザインされました。しかし、httpの万能な取替えになるために作られたのではなく、一種の作業だけに優れた、httpと共に存在するプロトコルなのです。http界でいう「ウェブサイト」に当たる単語はジェミニ界で「カプセル」(capsule)と言います。
ジェミニはセキュリティかつプライバシーを両方実現できるようにデザインされました。プロトコルはとても単純なので、仕様書も実装もオーディットしやすいでしょう。tls (v1.2とv1.3のみ) の使用が強制されているので、全ての通信はデフォルトで保護されます。また仕様書によっては、リダイレクトを除き、ブラウザはユーザが自ら要求したとき以外他のサーバへの接続が許されません。リダイレクトは、悪用されないように制限があります。
コンテンツの面では、ジェムテキスト(gemtext; gmi)という、マークダウンにかなり似ているファイル形式が一般的に使われます。マークダウンの仕様書は不完全かつ曖昧なため、さまさまな実装はそれぞれ挙動が微妙なところに違ったりして、複雑だから脆弱性が生まれる可能性もあります。ジェムテキストは、マークダウンより単純化していて、一行の最初の三文字を見るだけでパーシングできます。これによって仕様は短く、実装は楽になりますが、マークダウンより低機能なマークアップ言語になってしまいます。セキュリティとクォリティーのために機能を犠牲していると言えます。
仕様書を読むと、いかにセキュリティを真面目に考えてくれているのかが伝わります。あらゆる例外のケースとその適切な対応が定義されていて、クライアントの挙動確認のために拷問テスト・カプセルが用意されています。
ジェミニはユーザトラッキングのために悪用されないように、クライアントとサーバの間を渡るデータを最低限にしています。ヘッダーはサポートされていません。リソースを要求したとき、クライアントはリソースのパスのみ送ります。サーバの立場から見ると、要求パスの他、クライアントのipアドレス、tcpポート番号、そしてtls情報しか見れません。ユーザ認証が必要な場合、tlsのクライアント証明書を利用できます。
httpの場合、ユーザをトラッキングする機能は仕様書の原版ではなく、それからの更新のときに追加されたものが多いです。今のジェミニには、トラッキングを可能とし得る機能は少なく思われますが、危険な機能が後ほど加わることを防ぐために、ジェミニの開発者は仕様を凍結することにしました。凍結したから、間違えてでも危険な機能が加わることは絶対にない。すなわち、今の仕様書は最終版なのです。
ジェミニプロトコルに関するリンクを貼っておきます。気になる方はぜひ見てみてくださいね。(英語が読めない方は、deeplなどの機械翻訳サービスが便利です)