Адреса в списке — хеши, а не адреса
Задача. Подавлять получателей клиента на узле так, чтобы ни сам узел, ни тот, кто дотянулся до его управляющего интерфейса, не держал читаемого списка адресов.
Из чего складывается:
- hashed-address — запись списка <address-list>: адрес в нижнем регистре, хешированный SHA-256 и закодированный BASE64URL; такие же записи принимает /config/address-lists;
- pmtahashedAddress — утилита из поставки, которая считает этот хеш для известного адреса;
- privacy-policy — прячет в учёте левую часть адресов: заглушкой или хешем SipHash либо HMAC-SHA256 с ключом;
- digest — считает ключевой хеш тем же способом, чтобы найти в учёте записи известного адреса.
Области у составляющих разные. Хешированные записи живут в списке адресов, политика — в блоке <acct-file>, а хеши считаются где угодно.
Как они взаимодействуют. Это две половины, и они не совпадают. Хеш списка — без ключа и от полного адреса: глазами список не прочесть, но знакомый адрес проверяется по нему мгновенно. Хеш учёта — с ключом и только от левой части: без ключа записи не связать ни с адресом, ни со списком. Цена — ключ: без него поддержка не найдёт записей адреса, а потерянный ключ делает прежние записи несвязываемыми навсегда.
Главная ловушка — считать хеш без ключа тайной. SHA-256 от адреса считается без секрета: список не читается глазами, но знакомый адрес — или целая база адресов — проверяется по нему мгновенно.
Что делает Хаб. Не применяет: списков подавления на узле нет. Отписки прогрева Хаб хранит в своей базе и сверяет с подавлением платформы рассылки, а в учёте адреса получателей идут как есть — privacy-policy не задан.
Рекомендуемые значения
Две половины и их хеши:
| Половина |
Что хешируется |
Как |
Кто считает |
| список подавления |
полный адрес в нижнем регистре |
SHA-256 без ключа, BASE64URL |
pmtahashedAddress |
| учёт |
левая часть адреса в нижнем регистре |
SipHash или HMAC-SHA256 с ключом |
digest |
Формат хешированных записей, утилита, политика учёта и команда хеша — из руководства (§ 3.3.5.2, § 3.3.11.16, § 6.3.32, § 8.3.2). Разбор — наш; схема — гипотеза.
Пример в конфигурации
<address-list suppressed>
hashed-address iZ0zh6XFp1VdUdLwoLe1Djl_5IH9mlj6-zibfclOEfY~</address-list>
<acct-file /var/log/pmta/acct.csv>
privacy-policy siphash "secret"
</acct-file>
Хеш — из примера руководства для test@foo.com; ключ учёта — для примера, на узле нужен свой.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.