Дежурный вписывает код доступа к созвону в описание мероприятия, в теме ставит «выкат сегодня вечером», зовёт всю группу и бронирует переговорную. После звонка открывает свой календарь и жмёт «Удалить». В общем календаре помощника описание на месте. У кого есть доступ к календарю комнаты — открывает тот же абзац. За десять минут до слота всплывает напоминание: на экране блокировки слово «пароль» и строка следом.

В предыдущей заметке разбирали, если вписать временный пароль в письмо, что оставят «Отправленные», пересылка и превью на телефоне: там вопрос «когда пароль уже в теле, читаются ли ещё «Отправленные» и шторка». Здесь другой: когда пароль уже в описании приглашения календаря, какие копии вы ещё можете открыть. Если секрет идёт одноразовой ссылкой, форма по-прежнему s.html?id=…#…. Создать и прочитать можно без аккаунта. Инструменты MyPassGen открываются сразу. Это не обход кнопок календаря. Это сверка официальных справок и того, что видно в карточке мероприятия, в правах общего доступа и в шторке уведомлений.

Сначала разделите два факта

«Личное» прячет мероприятие от тех, кто смотрит ваш календарь целиком. Оно не прячет его от гостей, которых вы пригласили на это событие. Гость открывает само мероприятие. Пароль в описании ему виден. Удаление вашей копии не опустошает копии гостей, календарь ресурса переговорной и напоминание на блокировке.

Почему удаление своего мероприятия не стирает пароль

Приглашение календаря — не стикер, который живёт только в вашем окне. В RFC 5545 §3.8.1.5 поле DESCRIPTION описано как текстовое свойство компонента календаря: оно даёт VEVENT более полное пояснение, чем заголовок. Как только пароль попал в это поле, он становится частью данных мероприятия. Он едет вместе с названием, временем и местом. Он не застревает в том поле, на котором вы нажали «Отправить».

То, что уходит, обычно не односторонняя рассылка, а запрос на согласование. В RFC 5546 метод REQUEST описан так: взять объект iCalendar и согласовать его с другими пользователями календаря. Получатель отвечает методом ответа. Запрос на встречу — один из перечисленных примеров. Каждый приглашённый получает копию, которую может записать в свой календарь. Удаление строки организатора в веб-интерфейсе меняет только этот аккаунт. Календари гостей и офлайн-копии, уже синхронизированные на телефон, вместе с этим кликом не исчезают.

Те, кто не сидит в Google Календаре, часто всё равно получают письмо-приглашение. В справке Как пригласить гостей на мероприятие в Календаре Google пишет: пригласить можно любого человека с адресом электронной почты; гость получит письмо, в котором сразу ответит «Да», «Нет» или «Может быть». Пользователи сторонних сервисов календаря и те, кто зашёл в Google Календарь с почтой не от Gmail, получают письмо, которое затем обновляет их расписание по настройкам их собственного сервиса. Поэтому «я только создал мероприятие, отдельное письмо не писал» не значит, что открытый текст лежит в одном месте. Само приглашение может положить ещё одну копию во «Входящие». Куда уходит пароль из тела письма, уже разобрано в предыдущей заметке; здесь эту карту не повторяем. Для ящиков на Яндексе или Mail.ru это тот же хоп: пришло письмо — появилась ещё одна дверь, которую удаление вашего слота не закрывает.

Кого на самом деле прячет «Личное»

В Google Календаре у одного мероприятия три настройки доступа: по умолчанию, общедоступное и личное. Страница Как изменить настройки доступа к мероприятию или задаче говорит прямо. «По умолчанию» повторяет общий доступ календаря. Если коллеге дали разрешение «Просматривать данные о мероприятиях» или выше, он найдёт подробности. «Личное» большинству смотрящих ваш календарь показывает интервал с надписью «Занят(а)». Исключения — вы сами и те, кому выдано «Изменять и просматривать данные о мероприятиях» или выше. Эта настройка закрывает тех, кто смотрит ваш календарь. Она не закрывает гостей, которых вы пригласили на это мероприятие.

Та же страница перечисляет границы, которые легко пропустить. После приглашения гость сам решает, как мероприятие выглядит в его календаре. Если доступ по умолчанию, а он открыл свой календарь другим, эти люди увидят подробности уже у него. Если вы забронировали переговорную или другой ресурс, те, у кого есть доступ к календарю ресурса, тоже видят подробности. Даже у личного мероприятия приглашение гостей или бронь комнаты могут выдать время начала, время окончания и создателя. У повторяющейся серии только одна настройка доступа: смена одного экземпляра действует на всю серию.

Пометка «Частное» в Outlook тоже не сожжение после чтения. Microsoft в справке общий доступ к календарю в Outlook в Интернете пишет: элементы, помеченные как частные, защищены — большинство тех, кому вы открыли календарь, видят только время, без названия, места и прочих подробностей. У частной повторяющейся серии по-прежнему виден шаблон повторения. Исключение — делегат, которому разрешили просматривать частные элементы. На странице как сделать встречу или собрание частными добавлена вторая половина: после пометки и отправки обновления подробности остаются видны вам и участникам собрания. Вписать пароль от встречи в описание и надеяться, что слово «Частное» его подметёт, этим пунктам не соответствует.

Общий календарь, переговорная и закрытый адрес

Общий доступ ко всему календарю достаёт дальше, чем одна пометка «Личное». В справке Как предоставить доступ к календарю разрешение «Просматривать данные о мероприятиях» сформулировано так: пользователь сможет находить все подробности, включая название, описание, время и место. На рабочем или учебном аккаунте у администратора могут быть особые права: он найдёт календарь и подробности мероприятий, даже если вы доступ не открывали. Если календарь сделать общедоступным, другие найдут его в интернете и в результатах поиска и смогут подписаться из другого приложения. Пароль в описании — открытый текст для каждого, у кого есть «Просматривать данные о мероприятиях», и для любой администраторской выборки в вашем тенанте.

Есть ещё отдельная дверь синхронизации. Google позволяет смотреть календарь только на чтение в Outlook или Календаре Apple по ссылке iCal и называет её закрытым адресом. В Как синхронизировать календарь с программами на компьютере прямо сказано: закрытый адрес в формате iCal предназначен для личного использования, никому его не сообщайте; если уже сообщили — нажмите «Сбросить». Кто держит этот URL, тот подписывается на весь календарь. Пароль от встречи в описании едет вместе с подпиской. В списке гостей человеку быть не нужно.

Открытый общий доступ Apple тоже копирует календарь целиком. В справке iCloud Общий доступ к календарю на сайте iCloud.com написано: при доступе к открытому календарю участники автоматически получают письмо с URL; чтобы смотреть такой календарь, аккаунт iCloud не обязателен. В Outlook в Интернете верхняя граница внешнего доступа — «видеть, когда я занят», «видеть названия и места», «видеть все сведения». Люди вне организации не получают прав на правку или делегирование, но «видеть все сведения» уже достаточно, чтобы прочитать описание. Календарь ресурса переговорной, подписка команды и закрытый адрес — три места, которые ваш клик «Удалить» не чистит.

Где расходятся напоминания, блокировка и пересылка

Когда тот же пароль уже в описании, напоминание может показать его снова. Google разрешает до пяти уведомлений на одно мероприятие. Напоминания гостям Google Календаря идут по их настройкам, не по тем, что выставили вы. Гости без Google Календаря могут получить ваши уведомления или те, что выбрали в своём сервисе. Всплывающее окно обычно несёт название. Некоторые оболочки ещё показывают первые строки описания. Если пароль — первое предложение или тема звучит как «пароль: xxx», превью держит открытый текст перед тем, кто видит экран.

Экран блокировки — ещё одно окно. В руководстве iPhone Доступ к функциям на экране блокировки Apple пишет: предварительный просмотр уведомлений может включать текст сообщения, несколько строк письма и сведения о приглашениях в Календаре. «Показ миниатюр» можно поставить в «Всегда». При включённом превью разблокировка не нужна, чтобы увидеть те слова, которые система считает достойными подсветки. После удаления вашего мероприятия телефоны гостей по-прежнему срабатывают по своим напоминаниям.

Пересылка делает ещё одну копию. Google помечает это как «Важно» на странице про приглашения: если вы перешлёте приглашение, получатель, возможно, увидит актуальные сведения о встрече и в любой момент изменит ваш ответ. Если гостям разрешено добавлять других, пересылка новому человеку после ответа вносит его в список гостей, и он тоже сможет приглашать. Не хотите, чтобы гости звали остальных, — в мероприятии снимите флажок «приглашать других гостей». Zoom относится к полному тексту приглашения как к материалу, который вставляют в календарь: официальная справка Where to find the meeting invitation text про копирование всего приглашения в письмо или в событие календаря. Ссылка для входа и код доступа едут в этом блоке. То, что конференц-сервис сам пишет код доступа в описание, — не дурная привычка одной команды. Это поле, которое этот путь передачи уже несёт с собой.

Бронь переговорной — не лишний слой тайны

Календарям ресурсов часто дают «Просматривать данные о мероприятиях» ресепшену, помощнику или целому этажу. Мероприятие с доступом по умолчанию кладёт подробности в календарь ресурса. «Личное» всё равно не прячет время начала, время окончания и создателя. Кто ещё читает пароль после «Копировать» с генератора — в Кто ещё читает буфер обмена после копирования пароля. Код доступа — не обычный пункт повестки в том же описании.

Что остаётся от пароля в календаре

Возьмите один и тот же тестовый пароль и одну тему. Отправьте обычное приглашение, пометьте одно как личное, откройте доступ ко всему календарю, затем перешлите приглашение. Страницы, которые вы откроете, будут разными. Таблица написана по «местам, которые можно нажать», не по маркетинговым названиям.

Что вы сделали Ваш календарь Что у других часто остаётся
Пароль в описании, затем удалили своё мероприятие У вас может быть пусто; сначала поиск Копии гостей, письмо-приглашение и синхронизированное событие на телефоне могут держать оригинал
Пометили «Личное», гостей всё равно пригласили Описание вам видно Гости читают описание; те, кто только смотрит ваш календарь, обычно видят «Занят(а)»
Весь календарь отдан с правом «Просматривать данные о мероприятиях» Исходное мероприятие на месте Те, кому открыли доступ, читают название, время, место и описание
Забронировали комнату или опубликовали закрытый адрес iCal Исходное мероприятие на месте Календарь ресурса или подписчик читает подробности; пересланный закрытый адрес подписывает весь календарь
В описании только номер одноразовой ссылки; ключ — по телефону В календаре нет ключа после # Напоминания и общий доступ не собирают полный допуск; для расшифровки нужны обе половины

Пятую строку с первыми четырьмя не смешивайте. Если вставить в описание полный s.html?id=…#…, копии гостей, общие календари и напоминание на блокировке по-прежнему держат один целый допуск. Сервер ключ всё равно не видит. Бот напоминаний обычно не читает хвост после #. Человек копирует всю строку. Разнесите номер и ключ — поиск по календарю не найдёт ссылку, которая открывается. Полную ссылку храните как сам пароль. В календарь и в закладки её не кладите.

Сверка на месте

Эти шаги не опираются на обещание бренда. Берите тестовый пароль, который никогда не войдёт в живой аккаунт, например orange-lake-7. Тему мероприятия напишите «тест — продакшен не открывать». Не тренируйтесь на текущем мастер-пароле, рабочем ключе или живой одноразовой ссылке.

  1. В личном тестовом календаре создайте одно мероприятие, в описании только тестовый пароль, и пригласите второй тестовый ящик. После отправки откройте календарь гостя и убедитесь, что описание на месте. Откройте уведомление календаря на телефоне и посмотрите, высвечивает ли блокировка или шторка тестовый пароль или тему. Рабочий продакшен-календарь для этого шага не берите.
  2. Найдите в календаре orange-lake-7. Попадание значит, что текст описания проиндексирован. Запишите все двери, которые ещё открываются: календарь организатора, календарь гостя, письмо-приглашение. Удалите мероприятие организатора и поищите снова: бьёт ли ещё календарь гостя или «Все письма».
  3. Сверьте доступ Google: то же тестовое мероприятие поставьте «Личное». Откройте ваш календарь с тестового аккаунта, у которого есть «Просматривать данные о мероприятиях», но нет права менять. Должно быть «Занят(а)». Откройте само мероприятие с приглашённого тестового аккаунта. Описание должно остаться. Этот шаг доказывает только «Личное ≠ скрыто от гостей».
  4. Если есть одноразовый тестовый календарь, откройте его другому тестовому аккаунту с правом «Просматривать данные о мероприятиях». В его представлении проверьте название, время и тестовый пароль в описании. На рабочем или учебном аккаунте отдельно спросите, видит ли администратор подробности без вашего шаринга. Верьте фактической настройке тенанта, не слогану продукта.
  5. Откройте в настройках календаря «Интеграция календаря / Закрытый адрес». Справка пишет: не сообщать. Не вставляйте этот адрес в чат «для проверки». Если уже вставили — «Сбросить» по справке. Создайте ещё одно мероприятие только с тестовым паролем и смотрите превью на блокировке. На iPhone путь «Настройки → Уведомления → Показ миниатюр» покажет, стоит ли сейчас «Всегда», «Если разблокирован» или «Никогда».
  6. Соберите одноразовую ссылку MyPassGen на ту же тестовую фразу, срок 24 часа, число чтений оставьте 1. В описание календаря вставьте только часть до решётки, s.html?id=…. Ключ скажите по телефону или лично. Открывается без аккаунта. С одним номером получатель должен увидеть неполную ссылку; для расшифровки нужны обе половины. После чтения перезапишите буфер. Адрес, в котором ещё есть #, в календарь не сохраняйте.

На корпоративном календаре добавьте полшага: откройте календарь ресурса переговорной для тестового мероприятия и посмотрите, есть ли тестовый пароль в описании, и подтянул ли общий календарь помощника тот же абзац. MyPassGen не скажет, сохранил ли конкретный шлюз ещё одну копию. Верьте тем окнам, которые только что открыли.

Если календарь — единственный канал, разнесите допуск

Для передачи один на один, которую коллега откроет сейчас, пароль в описание не пишите. Сгенерируйте его на этом устройстве и заверните в одноразовую ссылку. Генератор MyPassGen в случайном режиме даёт 6–128 символов, по умолчанию 16, ниже 8 предупреждает, что слабо. Открывается без аккаунта. Результат как рабочие данные не уходит. При создании браузер шифрует AES-256-GCM. Одна заметка — не больше 32 КБ. Читаний по умолчанию 1, максимум 10. Срок — 1 час, 24 часа, 7 дней или только по счётчику, без TTL. На сервере только шифротекст. Почему ключ ставят после # — в Когда пароль нужно отдать коллеге один раз, почему ключ ставят после # в адресе.

Когда календарь обязателен, разнесите канал. В мероприятии только время, место, номер и фраза «ключ по телефону». Не вставляйте полную ссылку в описание, которое синхронизируется, отдаётся в общий доступ и рисует превью на блокировке. Звонок, встреча или другой мессенджер несут только хвост после #. Одна половина не расшифровывает. Это приём использования, не настройка продукта по умолчанию. Страница создания по-прежнему выдаёт целую ссылку — так удобнее отдать один на один. В канале с карточками превью сначала прогоните тестовую ссылку и посмотрите, считает ли превью чтение, прежде чем слать живой секрет. См. Если вставить одноразовую ссылку в Slack или Telegram, сожжёт ли превью её раньше вас.

Пакет сертификатов или выгрузка больше 32 КБ в текстовую одноразовую ссылку не лезут. Берите шифрование файлов: потоковый AES-256-GCM в браузере, один файл до 5 ГБ, выход .lock / .enc, пароль — другим каналом. Диск или вложение календаря должны хранить только шифротекст. См. Перед тем как бросить файл в облако: кто получит открытый текст и каким каналом передавать пароль. Незашифрованная таблица во вложении мероприятия — тот же класс задачи, что пароль в описании: файл едет вместе с копиями гостей и каждой пересылкой.

Когда сверили «календарь гостя всё ещё бьёт после удаления мероприятия организатора» и «превью на блокировке показывает тестовый пароль», на вопрос статьи уже можно ответить: как только пароль в описании календаря, копии гостей, общие календари, календари переговорных и напоминания на телефоне снова показывают открытый текст. «Личное» закрывает тех, кто смотрит ваш календарь, не гостей. Закрытый адрес или открытый общий доступ подписывает описание целиком. Календарь годится для времени и номера. Для самого пароля это плохой канал.

Частые вопросы

Если удалить своё мероприятие, другой человек уже не увидит?

Пустая ваша строка не опустошает его. Приглашение копируется к нему как REQUEST по RFC 5546. Найдите тестовый пароль: календарь гостя, письмо-приглашение, уведомление на телефоне. Если уже переслали или календарь ресурса всё ещё держит запись, удаление вашего мероприятия не действует. «Я удалил слот» — не смена пароля.

Можно ли подменить одноразовую ссылку пометкой «Личное»?

Нет. Google пишет: «Личное» показывает «Занят(а)» тем, кто смотрит ваш календарь; гости по-прежнему открывают описание. Бронь комнаты может выдать время начала, время окончания и создателя. Outlook прячет название и подробности от большинства тех, кому открыли календарь, кроме делегата с правом видеть частные элементы; участники собрания подробности видят. Тело хранит сервис календаря; открытый текст появляется не только в браузере получателя. Чтобы сверить «видел ли сервер что-то кроме шифротекста», берите одноразовую ссылку и вкладку «Сеть». «Личное» на это не меняйте.

Чем полный одноразовый URL в описании лучше самого пароля?

Журналы сервера и превью, которые берут только HTML, обычно не видят ключ после #, а страница чтения ждёт скрипт, который заберёт шифротекст, прежде чем посчитать чтение. Копии гостей, общие календари и напоминание на блокировке могут хранить весь адрес. Кто скопировал — откроет до сожжения. Надёжнее: в календаре только номер, ключ — другим каналом.

Нужен ли аккаунт, чтобы создать и прочитать? Если канал ошибочный, поддержка вернёт секрет?

Регистрация не нужна. Создание и чтение открыты посетителю. Когда шифротекст сгорает по счётчику или сроку, серверной копии открытого текста нет и почты поддержки, которая его вернёт, тоже нет. Сгенерируйте новый пароль и новую ссылку. Не обновляйте один и тот же URL в надежде, что секрет вернётся.