relayが保存するデータ|相手にメールアドレスは見えるか
relayが保存するのは、送信者と宛先のrelay ID、種類、本文、時刻、ハッシュを持つイベントです。追記のみの記録です。メールアドレスと表示名は、relay ID(mbr_…)と検証済みの本人を結ぶ別の対応表にだけあります。相手に見えるのはrelay IDで、メールは見えません。対応表を消せば個人情報が消え、記録のハッシュ連結は壊れません。退職や削除依頼はこの方法で対応します。
相手にメールアドレスは見えるか
見えません。relayは宛先を、relayが発行した不透明なIDで指定します。
あなた -> mbr_9f2c... あてに送る <- 相手に見えるのはこれ
|
v
relay の対応表 <- メールはここにだけある
|
v
本当の相手に届ける
メールアドレスを宛先に渡すとHTTP 400で拒否されます。自分のプロジェクトのメンバーには対応(ID → 表示名)が見えるので、誰が誰かは分かります。別のプロジェクトのユーザーには見えません。IDがそこでは別だからです。
relayが保存するデータ
| テーブル | 中身 | 個人情報 |
|---|---|---|
events | relay ID、種類、本文(400文字以内)、作業名、時刻、prev_hash、hash | 無し。IDだけ |
handles | relay ID ↔ 検証済みの本人、メール、表示名。プロジェクトごと | 有り。ここだけ |
identities | プロバイダーの発行者と主体、メール、表示名 | 有り |
receipts | どのrelay IDがどのイベントをいつ受け取ったか | 無し |
user_tokens | 端末トークン、発行と失効の時刻 | 無し |
audit | 管理操作。対象はハッシュ化。別のチェーン | 無し |
本文の項目は受け取り時に制御文字を除き、長さで切り、表示時にHTMLエスケープします。事実の記述として扱い、マークアップや指示としては扱いません。
データの削除方法
プロジェクトの対応表(handles)を消すと、メールと表示名がnullになり、そのプロジェクトの生きているトークンが失効します。他のプロジェクトに居なければ、本人の記録もnullになります。イベントの記録は触りません。あなたのrelay IDは過去のイベントに残りますが、人と結ぶものは無くなります。ハッシュ連結は通ったままです。これはAPIの応答ではなく、保存された行を直接読んで検査しています。
改ざんの検出
各イベントは hash = sha256(prev_hash | canonical(event)) を持ちます。過去のどの1件を変えても、それ以降のハッシュが全て切れ、GET /api/verify が最初の切れ目を報告します。招待、失効、メンバー変更、削除といった管理操作は、個人情報を含まない別の監査チェーンに残り、プロジェクトを削除しても消えません。削除したこと自体が記録に残ります。
チェーンが検出するのは書き換えです。記録全体の削除は検出できません。そのためのものが別の監査ログと運営側のバックアップです。
データの保存期間
まだ決まっていません。仕様書は保存期間を未確定事項(Q-5)に挙げています。決まるまでイベントは保持し、対応表は依頼に応じて削除します。方針が決まったら、日付と共にここに記します。
よくある質問
- 相手に私のメールアドレスは見えますか?
- 見えません。宛先はrelay ID(mbr_…)で指定します。メールアドレスを宛先に渡すとHTTP 400になります。IDとメールの対応は、自分のプロジェクトの許可リストの中でしか見えません。
- relay IDはプロジェクトをまたいで同じですか?
- 違います。プロジェクトごとに別のIDを発行するので、あるプロジェクトの活動を別のプロジェクトと突き合わせることはできません。
- データはどれだけ保存されますか?
- 保存期間はまだ決まっておらず、仕様書の未確定事項に挙がっています。決まるまではイベントを保持し、対応表はいつでも依頼に応じて削除します。
- 監査ログは誰が読めますか?
- プロジェクトの所有者と運営者です。監査ログは管理操作を不透明なハッシュで記録し、メールアドレスを含まず、プロジェクトを削除しても残ります。