Пароли, переданные в мессенджере или по почте, остаются в истории переписки. Обёртывание ответа позволяет передать вместо секрета одноразовый токен с коротким сроком жизни: секрет можно получить по нему только один раз, а попытка перехвата обнаруживается.
Цель
Передать коллеге пароль так, чтобы его можно было прочитать только один раз, в течение ограниченного времени, и чтобы получатель мог убедиться, что токен не был подменён или использован до него.
Предварительные требования
Для выполнения примера нужны:
- Отправитель имеет токен Stronghold с правами на чтение передаваемого секрета или на
sys/wrapping/wrap. - Получателю доступен адрес Stronghold. Входить в Stronghold получателю не нужно: для распаковки достаточно самого токена обёртывания.
- Отдельный канал связи для передачи токена (мессенджер, почта).
Шаг 1. Оберните секрет
Выберите один из вариантов.
Секрет уже хранится в KV. Прочитайте его с параметром
-wrap-ttl:d8 stronghold kv get -wrap-ttl=1h -mount=secret handover/db-adminПроизвольные данные. Оберните их через
sys/wrapping/wrap, ничего не сохраняя в KV:d8 stronghold write -wrap-ttl=1h sys/wrapping/wrap username=db-admin password='T3mp-P@ss'
Ответ содержит поля wrapping_token, wrapping_token_ttl, wrapping_token_creation_time и wrapping_token_creation_path. Запомните creation_path — получатель сверит его.
Выбирайте -wrap-ttl минимально достаточным: чем короче срок, тем меньше окно для перехвата.
Шаг 2. Передайте токен
Передайте получателю токен и путь создания по разным каналам:
- Отправьте получателю
wrapping_token. - Отдельно (например, голосом) сообщите ожидаемый путь создания:
secret/data/handover/db-adminилиsys/wrapping/wrap.
Шаг 3. Проверьте токен (получатель)
Перед распаковкой проверьте свойства токена. Эта операция не расходует токен и не требует аутентификации:
d8 stronghold write sys/wrapping/lookup token=<WRAPPING_TOKEN><WRAPPING_TOKEN> — токен обёртывания, полученный от отправителя.
Убедитесь, что:
- токен существует и не истёк;
creation_pathсовпадает с сообщённым отправителем;creation_timeсоответствует времени отправки.
Если токен не найден или путь не совпадает, не распаковывайте его и сообщите в службу безопасности: токен мог быть перехвачен или подменён.
Шаг 4. Распакуйте секрет (получатель)
Распакуйте секрет с помощью токена обёртывания:
d8 stronghold unwrap <WRAPPING_TOKEN>Команда возвращает исходный ответ. После этого токен становится недействительным.
Проверка
Проверьте результат:
- Повторите
d8 stronghold unwrap <WRAPPING_TOKEN>— команда должна вернуть ошибку: токен одноразовый. - Отправитель проверяет, что токен использован:
sys/wrapping/lookupдля этого токена возвращает ошибку. - При включённом аудите найдите в журнале запрос
sys/wrapping/unwrapи убедитесь, что он пришёл от ожидаемого получателя.
Обязательное обёртывание для директории передачи
Чтобы секреты из директории handover/ нельзя было прочитать без обёртывания, задайте в политике, по которой их читают, min_wrapping_ttl и max_wrapping_ttl:
d8 stronghold policy write handover-readers - <<'POLICY'
path "secret/data/handover/*" {
capabilities = ["read"]
min_wrapping_ttl = "1s"
max_wrapping_ttl = "24h"
}
POLICYЗапись в директорию выдайте отдельной политикой без этих параметров.
Подробнее — в разделе «Требуемые TTL для обёртывания ответа».
Очистка
Удалите объекты, созданные в примере:
Удалите исходный секрет, если он больше не нужен:
d8 stronghold kv metadata delete -mount=secret handover/db-adminЕсли получатель не распаковал токен, а передача отменена, отзовите токен, чтобы им нельзя было воспользоваться до истечения TTL:
d8 stronghold token revoke <WRAPPING_TOKEN>Попросите получателя сменить временный пароль после первого входа.