Все записи

5 мин чтения

Проверьте получателя, прежде чем запечатать файл

Адрес получателя — это открытый ключ, а не имя. Прежде чем запечатать конфиденциальный файл, подтвердите адрес получателя по доверенному каналу: шифрование может сработать безупречно и всё равно отправить файл не тому человеку.

Прежде чем запечатать конфиденциальный файл, проверьте адрес получателя по каналу, который злоумышленник вряд ли контролирует. Адрес получателя — это открытый ключ, а не имя. Если вы зашифруете данные не на тот ключ, открыть файл сможет владелец чужого ключа, а тот, до кого вы хотели достучаться, — нет.

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

Что такое адрес получателя?

Адрес получателя — это открытый ключ шифрования, на который отправитель запечатывает запись. В CardanoWall он существует в двух формах:

  • age1... — классический адрес получателя X25519;
  • age1pqc... — гибридный постквантовый адрес получателя.

Отправитель запечатывает данные на опубликованный адрес получателя. Получатель открывает запись соответствующим закрытым ключом, который выводится из его Identity Seed (сида идентичности). Адрес предназначен для того, чтобы им делиться; закрытый ключ и сид должны оставаться в секрете. (Подробнее о том, что такое адрес и как получатели его раздают, см. что такое адрес получателя.)

Почему проверка ключа так важна?

Потому что открытые ключи — это не идентичности.

Кто угодно может прислать вам строку, похожую на адрес получателя. Кто угодно может приписать ключ к знакомому отображаемому имени. Сама строка ничего не доказывает о том, кто владеет соответствующим закрытым ключом, — только то, что им владеет кто-то. Злоумышленник, подсунувший вам свой собственный адрес, сможет прочитать всё, что вы запечатываете «для» вашего контакта, а контакт не получит ничего.

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

Что считается хорошим каналом проверки?

Используйте путь, который злоумышленник вряд ли контролирует, и подтверждайте ключ по каналу, отдельному от того, по которому он пришёл. Разумные варианты, примерно в порядке убывания надёжности:

  • личная передача (например, совместное сканирование QR-кода);
  • звонок на номер, который вы уже знаете, с зачитыванием отпечатка ключа вслух;
  • страница с ключом в каталоге .well-known на официальном домене получателя;
  • запись DNS TXT на этом домене;
  • подписанный профиль со ссылкой с официального сайта получателя;
  • уже существующий разговор со сквозным шифрованием, которому вы доверяете;
  • одобренный организацией каталог ключей;
  • распечатанный отпечаток ключа, переданный через процесс, которому вы доверяете.

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

Чего самого по себе недостаточно?

Знакомого имени недостаточно. Считайте перечисленное непроверенным, пока второй канал не подтвердит ключ:

  • ключ, пришедший в совершенно новой почтовой переписке;
  • личное сообщение от учётной записи, которую вы не проверили;
  • скриншот ключа;
  • публичный профиль без доверенной ссылки на самого человека;
  • адрес, пересланный вам третьей стороной;
  • сообщение «вот мой новый ключ» без проверки по второму каналу.

Злоумышленники сосредотачиваются именно на моменте обмена ключами, потому что это единственный шаг, где подменённый ключ выглядит совершенно нормально. Стоит один раз сохранить неверный ключ — и каждая последующая отправка может незаметно уходить не туда.

Как пользоваться адресной книгой?

Сохраняйте ключ после того, как проверили его, а не до. Для каждого доверенного контакта адресная книга хранит:

  • отображаемое имя;
  • открытый ключ подписи Ed25519 этого контакта (идентификатор, который связывает его записи с ним);
  • адрес получателя age1..., если он есть;
  • постквантовый адрес получателя age1pqc..., если он есть;
  • как и когда вы проверили ключ;
  • произвольные заметки — запишите точно, как именно вы его проверили.

Позже, когда вы создаёте запечатанную запись, выбирайте контакт из адресной книги вместо того, чтобы снова вставлять адрес. Так одна тщательная проверка превращается во множество более безопасных отправок. О том, как собрать адресную книгу, см. создание адресной книги и как работает адресная книга.

Стоит ли предпочесть постквантовый адрес?

Для файлов, которые могут оставаться конфиденциальными многие годы, — да, используйте постквантовый адрес, если получатель его предлагает.

Гибридный адрес age1pqc... гораздо длиннее классического, но он защищает от злоумышленника, который записывает запечатанный шифротекст сегодня, а расшифровывает его позже с помощью будущего квантового компьютера («собрать сейчас, расшифровать позже»). Если записи нужно сохранять конфиденциальность лишь на ближайшую перспективу, классического адреса age1... обычно достаточно.

Что бы вы ни выбрали, правило не меняется: сначала проверьте адрес. Непроверенный постквантовый ключ ничуть не безопаснее непроверенного классического.

Что делать, если получатель сменил ключи?

Проверьте новый ключ так, будто это новый контакт. Не перезаписывайте сохранённый адрес получателя только потому, что сообщение утверждает, что он изменился, — именно так и выглядит атака с подменой ключа. Подтвердите новый ключ по доверенному каналу, обновите запись и отметьте, почему он изменился.

Для команд и организаций смена ключей должна объявляться в предсказуемых местах: на официальном домене, в подписанном профиле или через документированный внутренний процесс. Если вы подозреваете, что ключ скомпрометирован, немедленно прекратите запечатывать данные на старый адрес и дождитесь подтверждения нового.

Что запечатанная запись раскрывает в блокчейне?

Не читаемый список получателей. Запечатанная запись Label 309 упаковывает ключ содержимого в один зашифрованный слот для каждого получателя, а затем перемешивает их, поэтому публичная запись не содержит явного поля «получатель». Раздел «Входящие» находит предназначенные вам записи, пробно расшифровывая каждый слот локально вашими собственными ключами. Наблюдатель может увидеть лишь то, что запечатанная запись существует, когда она была опубликована и сколько в ней слотов, — но никогда не узнает, кто получатели.

Эта невидимость получателей защищает приватность в блокчейне, но никак не помогает с проверкой ключа. Блокчейн скрывает, кому вы запечатали данные; он не может проверить, что вы запечатали их на правильный ключ. Выбор верного адреса по-прежнему целиком на отправителе. И учтите ограничение с другой стороны: запечатывание оставляет открытый текст зашифрованным для владельцев ключей, но не гарантирует анонимности, и любой получатель может слить открытый текст, как только расшифрует его. (О том, что подтверждение может и чего не может установить, см. что подтверждение не доказывает.)

Коротко

Хорошее шифрование плюс плохая проверка ключа — это всё равно плохая отправка. Поэтому:

  • проверяйте адрес получателя, прежде чем запечатывать что-либо конфиденциальное, в идеале по двум каналам;
  • сохраняйте проверенные ключи в адресной книге; отмечайте, как был проверен каждый;
  • проверяйте заново при смене ключа — относитесь к новому ключу как к совершенно новому контакту.

Криптография — это простая часть. Проверка — это часть, за которую отвечаете вы.

Что почитать дальше

securitysealed-poeaddress-book