用語集

URL フラグメント とは?

URL フラグメントは、ハッシュ記号(#)の後に現れる URL の部分です。RFC 3986 に従い、ブラウザはフラグメントをクライアントサイドのみで処理し、サーバーへの HTTP リクエストには含めません。

URL には定義された構造があります。スキーム、オーソリティ、パス、クエリ文字列、フラグメントです。フラグメント(# 以降のすべて)は元々ページ内の特定のセクションにナビゲートするために設計されました。しかし、セキュリティの観点からの最も重要な特性は、HTTP 仕様によってブラウザがフラグメントをサーバーに送信しないことが明示的に要求されていることです。

example.com/page#section のような URL を訪問すると、ブラウザは example.com/page へのリクエストを送信します。#section 部分はリクエスト前に除去されます。フラグメントはブラウザのアドレスバーに残り、ページで実行される JavaScript からアクセス可能ですが、サーバーはそれを知ることができません。この動作は HTTP 仕様で義務付けられており、すべての現代のブラウザで一貫しています。

この特性により、URL フラグメントはウェブアプリケーションで機密データを渡すのに特に有用です。暗号鍵やその他のシークレットをフラグメントに配置すると、復号に必要なクライアントサイドの JavaScript からアクセス可能ですが、サーバーには送信されず、プロキシにログ記録されず、サーバーアクセスログにも記録されません。

See the fragment vanish in transit

Edit the part after # and watch the server log update. The fragment never appears in the HTTP request line.

What your browser sees
https://www.vaulted.fyi/s/aBc123#b9pK4mNxQ_2L7eRfA3vTcU1xY8zB6jH9wM0nP5qS4iE
What the server's access log records
GET /s/aBc123 HTTP/1.1
Host: www.vaulted.fyi
User-Agent: Mozilla/5.0 ...

Per RFC 3986 §3.5, browsers strip everything after # before issuing the HTTP request. The fragment stays in the address bar, accessible only to JavaScript on the loaded page — never logged, never proxied, never cached by the server.

Vaulted における URL フラグメント の使われ方

Vaulted は AES-256-GCM 暗号鍵を URL フラグメントに直接配置します。シークレットを作成すると、生成されたリンクは /s/{id}#{base64url(key)} の形式になります。ブラウザは HTTP リクエストにフラグメントを送信しないため、暗号鍵が Vaulted のサーバーに届くことはありません。受信者のブラウザはフラグメントから鍵を取り出し、サーバーから暗号化されたデータを取得して、ローカルで復号を実行します。このひとつのアーキテクチャ上の判断が Vaulted を真のゼロ知識システムにしています。