運用担当が Zoom のパスコードや会議室の入館コードを、カレンダーの説明に書く。件名は「今夜リリース」。チーム全員を招待し、会議室も取る。散会後、自分のカレンダーを開いて削除する。アシスタントと共有しているカレンダーには、説明が残っている。会議室のリソースカレンダーを開ける人は、同じ一段を読める。十分前のリマインダーが鳴り、ロック画面に「パスワード」と、その後ろの一行が乗る。

前の記事ではメール本文に一時パスワードを書くと、送信済み、転送、スマホプレビューに何が残るかを書いた。あれは「パスワードがメールに乗ったあと、送信済みと通知欄からまだ読めるか」だ。本稿の問いは別にある。パスワードをカレンダー招待の説明に書いたあと、まだ開ける場所はどこか。鍵をワンタイムで渡すなら、形はいまも s.html?id=…#… だ。作成も閲覧も登録不要。MyPassGen のツールは開いたその場で使える。作成画面のボタン案内ではない。公式ヘルプと、予定の詳細、共有権限、通知欄で見えるものだけを照合する。

先に二つを分ける

「非公開」が遮るのは、あなたのカレンダー全体を見る人だ。この予定へ招いたゲストではない。ゲストが開くのは予定そのものだ。説明のパスワードは、ゲストには見える。自分の予定を消しても、ゲストのコピー、会議室のリソースカレンダー、ロック画面のリマインダーが一緒に空になるわけではない。

自分の予定を消しても、パスワードが残る理由

カレンダー招待は、自分の窓に一瞬だけ出る付箋ではない。RFC 5545 §3.8.1.5 は DESCRIPTION を、カレンダーコンポーネントの上のテキスト属性と書く。VEVENT に、件名より長い説明を載せるための欄だ。パスワードを説明に書いた時点で、それはこの予定のデータになる。件名、時刻、場所と一緒に動く。「送信」を押した編集枠だけに点灯して消えるわけではない。

送り出すとき、よく使うのは一方通行の告知ではなく、日程調整の要求だ。RFC 5546 は REQUEST を、iCalendar オブジェクトを他のカレンダー利用者と調整するために渡すことと書く。受け手は返信メソッドで応える。会議出席依頼は、そこに挙がる例の一つだ。招待された人はそれぞれ、自分のカレンダーへ書き込めるコピーを受け取る。ウェブで主催者側の予定を消すのは、自分のアカウントのこの1件を変えただけだ。ゲストのカレンダー、すでにスマホへ落ちたオフラインのコピーは、自動では消えない。

Google カレンダーを使っていない人へは、招待メールが届くことが多い。Google の カレンダーの予定にゲストを招待する は、任意のメールアドレスで招待できると書く。相手には招待メールが届く。Google カレンダーを使っていない人、および Gmail 以外のメールで Google カレンダーを使っている人にはメールが届き、各自のカレンダーサービスの設定に従って予定が更新される。「カレンダーを一件作っただけで、別途メールは書いていない」は、平文が一つだけ、という意味にはならない。招待そのものが、受信トレイへもう一通コピーする。メール本文のパスワードがどこに残るかは前の記事で分けた。ここでは繰り返さない。

「非公開」が遮る相手

Google カレンダーは、一件の予定に三つの公開設定を置く。デフォルトの公開設定、公開、非公開だ。カレンダーで予定とタスクの公開設定を変更する はこう書く。デフォルトは、カレンダー全体の共有設定に従う。同僚に「予定の詳細の表示」以上を付けていれば、その同僚は詳細を見られる。非公開は、ほとんどの閲覧者には「予定あり」だけを出す。例外は、「予定の変更と予定の詳細の表示」以上を付けた人だ。遮るのはあなたのカレンダーを見る人であり、この予定へ招いたゲストではない。

同じページには、見落としやすい境界が続く。誰かを招待したあと、相手はこの予定を自分のカレンダーでどう見せるかを管理できる。予定がデフォルトの公開設定で、相手が自分のカレンダーを他の人へ共有していれば、その人たちは相手のカレンダー上で予定の詳細を見られる。会議室などのリソースを予約すると、そのリソースのカレンダーにアクセスできる人も詳細を見られる。非公開にしても、ゲストを招待したり部屋を取ったりすると、開始時刻、終了時刻、作成者はまだ出ることがある。定期的な予定に置ける公開設定は一つだけだ。一回分を変えると、系列全体に効く。

Outlook の「非公開」も、破棄ではない。Microsoft の Web 版 Outlook でカレンダーを共有する は書く。非公開のアイテムは保護される。予定表を共有した相手の多くには、時刻だけが見え、件名、場所、その他の詳細は見えない。非公開の定期アイテムは、繰り返しの型も見える。例外は、非公開イベントを表示する許可を代理人に付けたときだ。代理人に非公開が見えるなら、説明とパスワードも、その人が開ける範囲に入る。予定や会議を非公開にする も、詳細は自分と会議の出席者に見えると書く。説明に会議パスワードを書き、「非公開」の三文字に片付けを任せるのは、これらの条項と合わない。

共有カレンダー、会議室、非公開URL

カレンダー全体の共有は、一件の「非公開」より影響が大きい。Google の カレンダーを共有する は、「予定の詳細の表示」をこう定義する。相手はすべての詳細、つまり予定の名称、日時、場所、説明を見られる。職場または学校のアカウントでは、共有していなくても、管理者がカレンダーとすべての予定の詳細を見られることがある。カレンダーを一般公開すると、他の人はインターネットや検索結果でそれを見つけ、他のアプリで購読できる。パスワードを説明に書くのは、「予定の詳細の表示」を持つ人すべてと、ありうる管理者のビューへ、平文を渡すことだ。

同期の入口は、もう一つある。Google は iCal リンクで、カレンダーを Outlook や Apple カレンダーへ読み取り専用で同期できる。公式の呼び方は「iCal 形式の非公開 URL」だ。カレンダーをパソコン上のプログラムと同期する は、非公開 URL は自分だけが知るべきで、他の人へ渡さないと書く。誤って渡したら、リセットして新しい URL に替える。このアドレスを持った人は、iCal 購読で予定一式を読める。説明の会議パスワードは購読に乗る。ゲスト名簿へ入れ直す必要はない。

Apple のパブリック共有も、カレンダーごとコピーする。iCloud ヘルプ iCloud.comでカレンダーを共有する は書く。パブリックに共有すると、参加者はカレンダーの URL が載ったメールを自動で受け取る。承諾して見る人は、iCloud の利用者である必要はない。Outlook のウェブ版は、外向け共有の上限を「予定ありを表示」「件名と場所を表示」「すべての詳細を表示」と置く。組織外の人には編集や代理人は渡せないことが多いが、「すべての詳細を表示」だけで説明は読める。会議室のリソースカレンダー、チームの購読カレンダー、非公開 URL。この三つは、削除を押しただけでは回収できない。

リマインダー、ロック画面、転送の差

同じパスワードが説明に乗ったあと、リマインダーがもう一度掲げる。Google は予定ごとに通知を最大 5 件まで置ける。Google カレンダーのゲストへのリマインダーは、相手自身の設定に従い、あなたが置いた本数を共有しない。Google カレンダーを使っていないゲストは、あなたが置いた通知を受け取ることも、相手のカレンダーサービスの選択に従うこともある。リマインダーのバナーは、たいてい件名を載せる。テーマや表示によっては、説明の先頭数行も載る。パスワードを一文目に書いた、あるいは件名を「パスワードは xxx」にしたとき、プレビューは画面を見られる人へ平文を掲げる。

ロック画面は、もう一枚の窓だ。Apple の iPhone ユーザガイド iPhoneのロック画面から機能にアクセスする は書く。通知のプレビューには、メッセージの本文、メールの先頭数行、カレンダーの出席依頼の詳細が含まれる。「プレビューを表示」は「常に」にできる。プレビューが開いていると、ロックを外さなくても、システムが掲げる数語が見える。自分のカレンダーの予定を消したあとでも、ゲストのスマホのリマインダーは、相手の設定で鳴る。

転送は、もう1件のコピーを作る。Google の招待ヘルプは「重要」でこう書く。招待状を転送すると、相手は更新後の会議詳細を見られることがあり、あなたの出欠返答を変えられることもある。ゲストを追加できる権限があるとき、新しい人へ招待を転送すると、返答した人はゲスト名簿に入り、さらに他の人を招待できる。ゲストが他の人を招待できないようにするなら、予定の編集で「他のユーザーを招待する」を外す。Zoom は、招待文そのものをカレンダーへ貼る材料として扱う。公式の Where to find the meeting invitation text は、招待文を丸ごとコピーし、メールやカレンダー招待へ貼ると書く。Chrome 拡張は、参加リンクと会議詳細をカレンダーの予定へ入れる。Passcode and security settings は、予約した会議のパスコードは招待に入り、Zoom Rooms はカレンダー招待からパスコードを読んで自動入力すると書く。会議ソフトがパスコードを説明へ書くのは、一部のチームの悪癖ではない。この受け渡しの経路が、最初から運ぶ欄だ。

会議室を取っても、機密の一段にはならない

リソースカレンダーは、受付、アシスタント、フロア全体へ「予定の詳細の表示」が開いていることが多い。デフォルトの公開設定の予定は、詳細がリソースカレンダーへ入る。非公開でも、開始時刻、終了時刻、作成者は止まらない。コピーしたあとクリップボードを誰が読むかは、パスワードをコピーしたあと、クリップボードはまだ誰が読めるか。パスワードを、普通の議事と同じ説明へ書かない。

対照表:カレンダーのパスワードは何が残るか

同じテスト用パスワード、同じ件名で、普通の招待、非公開、カレンダー全体の共有、招待の転送を分ける。開けるページは同じではない。表は「自分が押せる場所」で書く。製品の呼び方では書かない。

あなたがしたこと 自分のカレンダー 他の人に多い結果
説明にパスワードを書き、自分の予定を消す こちらは空になりうる。検索で先に照合する ゲストのコピー、招待メール、同期済みのスマホ予定に原文が残りうる
非公開にし、ゲストは招待する 自分は説明を見られる ゲストは説明を見られる。あなたのカレンダーを見る人は、多くが予定ありだけ
カレンダー全体を「予定の詳細の表示」で共有する 元の予定は残る 共有された人は名称、時刻、場所、説明を読める
会議室を取る、または iCal の非公開 URL を公開する 元の予定は残る リソースカレンダーや購読側が詳細を読める。非公開 URL が転送されれば、一式を購読できる
説明はワンタイムの番号だけ。鍵は電話 カレンダーに # の後ろの鍵は無い リマインダーと共有は、そろった資格情報を取れない。半分ずつ揃えて初めて復号できる

五行目と、前の四行を混ぜない。完全な s.html?id=…#… を説明へ丸ごと貼ると、ゲストのコピー、共有カレンダー、ロック画面のリマインダーには、いまでも一本の資格情報が残る。サーバが見えないのは鍵だけだ。リマインダー用のボットは、たいてい # の後ろを取らない。人は URL 全体をコピーできる。番号と鍵を分ければ、カレンダー検索は開ける完全なリンクを拾えない。完全なリンクは、いまでもパスワードそのものとして扱う。カレンダーやブックマークへ残さない。

その場で確かめる

下の手順は、どの製品の約束にも依らない。最初から最後まで、本番のアカウントへログインしないテスト用パスワードを使う。例は orange-lake-7。件名は「テスト-本番を開かない」。いま使っているマスターパスワード、本番の鍵、本物のワンタイムでは練習しない。

  1. 個人のテスト用カレンダーで、自分宛てに予定を一つ作る。説明にはテスト用パスワードだけを書く。二つ目のテスト用メールを招待する。送信後、ゲストのカレンダーを開き、説明があることを確認する。スマホのカレンダー通知を開き、ロック画面や通知欄にテスト用パスワードや件名が出るかを見る。職場の本番カレンダーでは、この段をやらない。
  2. カレンダー検索で orange-lake-7 を探す。当たるなら、説明の文字は索引されている。まだ開ける入口を書く。主催者のカレンダー、ゲストのカレンダー、招待メール。主催者側の予定を消し、もう一度探す。ゲストのカレンダーや「すべてのメール」は、まだ当たるか。
  3. Google の公開設定を照合する。同じテスト予定を非公開にする。「予定の詳細の表示」だけを持ち、変更権限の無いテストアカウントで、あなたのカレンダーを開く。見えるのは予定ありだけであるべきだ。招待されたテストアカウントで予定そのものを開く。説明は残っているべきだ。この段が示すのは「非公開 ≠ ゲストから隠す」だけだ。
  4. 捨ててよいテスト用カレンダーがあれば、別のテストアカウントへ共有する。権限は「予定の詳細の表示」。相手のビューを開き、名称、時刻、説明のテスト用パスワードがあることを確認する。職場または学校のアカウントでは、管理者に別の閲覧権があるかも見る。テナントの実設定を見る。製品の標語で代用しない。
  5. カレンダー設定の「カレンダーの統合 / iCal 形式の非公開 URL」を開く。公式が「共有しない」と書いていることを確認する。このアドレスをチャットへ送って試さない。すでに送ったなら、ヘルプどおりリセットする。テスト用パスワードだけを書いた予定を別に作り、ロック画面のプレビューを見る。iPhone は「設定 → 通知 → プレビューを表示」で、常に、ロック解除時のみ、しない、のどれかを照合できる。
  6. MyPassGen のワンタイムで、同じテスト文のリンクを作る。期限は 24 時間、閲覧回数は 1 のまま。カレンダーの説明には、ハッシュ記号の前の s.html?id=… だけを貼る。鍵は電話か対面で言う。登録せずに開く。受け手が番号だけなら、リンクは不完全に見える。半分を揃えて初めて復号できる。読んだらクリップボードを上書きする。# 付きのアドレスをカレンダーへ残さない。

社用カレンダーは、半段足す。このテスト予定が取った会議室のリソースカレンダーに、説明のテスト用パスワードがまだあるか。アシスタントの共有カレンダーが、同じ一段を同期したか。MyPassGen は、あるゲートウェイが別コピーを残したかを代行して判断しない。照合の結果は、いま開けた窓だけを見る。

カレンダーで渡さざるを得ないとき、資格情報を分ける

一対一で、相手がすぐ開けるなら、パスワードを説明に書かない。この端末で生成し、ワンタイムに包む。MyPassGen のパスワード生成は、ランダムが 6〜128 文字、初期値 16、8 未満は弱いと出す。登録せずに開く。生成結果は業務データとして上がらない。作成時、ブラウザは AES-256-GCM で暗号化する。一文の上限は 32 KB。閲覧回数の初期値は 1、上限は 10。期限は 1 時間、24 時間、7 日、または回数だけ見て TTL 無し。サーバが預かるのは暗号文だけ。鍵を # の後ろに置く理由は、同僚にパスワードを一度だけ渡すとき、なぜ復号鍵を URL の # の後ろに置くのかにある。

カレンダーが必須なら、経路を分ける。カレンダーは時刻、場所、番号、「鍵は電話」の一文だけにする。同期し、共有し、ロック画面のプレビューを描く説明へ、完全なリンクを貼らない。電話、対面、別のメッセンジャアカウントが運ぶのは # の後ろだけだ。半分だけでは解けない。これは使い方であり、製品の既定の分割ではない。作成画面が出すのは、いまでも一本の完全なリンクだ。一対一ではそれが楽だ。プレビューカードを描くチャンネルでは、先にテスト用リンクでプレビューが回数を使うかを見てから、本番を出す。見方はSlackやLINEにワンタイムリンクを貼ると、プレビューで先に消費されるか。

32 KB を超える証明書の束や書き出し表は、ワンタイムのテキストに無理に載せない。ファイル暗号を使う。ブラウザで AES-256-GCM のストリーム暗号化、一件 5 GB まで、出力は .lock / .enc、パスフレーズは別経路。クラウドやカレンダー添付が持つべきは暗号文だけだ。見方はファイルをクラウドに入れる前、平文は誰が読めるか、パスフレーズはどの経路で送るか。暗号化していない表をカレンダーへ付けるのは、説明にパスワードを書くのと同じ類だ。添付はゲストのコピーと、その後の転送に乗る。

「主催者の予定を消したあと、ゲストのカレンダーはまだ当たるか」と「ロック画面のプレビューにテスト用パスワードが出るか」の二回を終えたら、本稿の問いに答えられる。パスワードをカレンダーの説明に書いたあと、ゲストのコピー、共有カレンダー、会議室のリソース、スマホのリマインダーは、平文をもう一度出せる。非公開が遮るのは、カレンダーを見る人であり、ゲストではない。非公開 URL とパブリック共有は、説明一式を購読させる。カレンダーは時刻と番号向きだ。パスワードそのもの向きではない。

よくある質問

自分の予定を消したら、相手も見えなくなるか

こちら側の予定が空でも、ゲストのカレンダーは空にならない。招待は RFC 5546 の REQUEST で相手へコピーされる。テスト用パスワードを先に探す。ゲストのカレンダー、招待メール、スマホの通知。相手がすでに転送した、またはリソースカレンダーがまだ掛かっているなら、自分の予定を消しても当てはまらない。「予定を消した」を、パスワードの更新の代わりにしない。

非公開は、ワンタイムの代わりになるか

ならない。Google は、非公開はカレンダーを見る人へ予定ありを出すと書く。ゲストは説明を開ける。部屋を取ると、開始時刻、終了時刻、作成者はまだ出ることがある。Outlook の非公開は、共有相手の多くから件名と詳細を隠す。代理人が非公開を見る許可を持っているときは例外だ。本文はカレンダーサービスが預かる。平文が受信者のブラウザにだけ出るわけではない。「サーバが暗号文以外を見たか」を見るなら、ワンタイムと Network を使う。非公開で代用しない。

完全なワンタイム URL をカレンダーの説明に貼る方が、パスワードそのものより良い点は何か

サーバのログと、HTML だけ取るプレビューは、たいてい # の後ろの鍵を見ない。閲覧ページも、スクリプトが暗号文を取るまで回数を動かさない。ゲストのコピー、共有カレンダー、ロック画面のリマインダーには、URL 全体が残りうる。コピーした人は、破棄前に開ける。より安定なのは、カレンダーは番号だけ、鍵は別経路だ。

作成と閲覧に登録は要るか。経路を間違えたら、問い合わせで戻せるか

登録は不要。作成も閲覧も訪問者に公開されている。暗号文が回数か期限で破棄されたあと、サーバ側の平文バックアップは無く、取り戻せる問い合わせ窓口も無い。新しいパスワードと新しいリンクを作る。同じ URL を何度も更新して戻るのを待たない。