(для понимания того, о чём говорится в этой статье, необходимо и достаточно хотя бы в общих чертах представлять, что такое асимметричная криптография и как работает электронная подпись)
Сценарий использования одноразового секретного ключа:
- Создаётся ключевая пара, состоящая из секретного (secret key, SK) и открытого (public key, PK) ключей.
- При помощи секретного ключа выполняется ряд операций. Первая из них, создание открытого ключа, уже выполнена на первом шаге.
- Выполняется на первый взгляд противологичное действие – секретный ключ уничтожается без возможности восстановления.
Использование оставшегося открытого ключа для шифрования данных смысла не имеет (расшифровывание при отсутствии секретного ключа считается невозможным), но открытый ключ может быть использован для проверки электронных подписей, созданных на втором шаге.
Данный подход может быть использован для криптографически достоверного связывания данных. При этом открытый ключ первоначальной ключевой пары становится идентификатором связи.
Существенное преимущество заключается в том, что использованная ключевая пара не может быть скомпрометирована иначе, как брутфорсом, либо через эксплуатацию математической уязвимости использованного алгоритма. Если секретного ключа больше вообще не существует, его невозможно ни украсть, ни выведать обманом, ни выпытать.
Пример использования
Задача: в распределённой системе участники регистрируются под создаваемыми ими самими уникальными идентификаторами. Требуется максимально затруднить задачу «угона» чужого идентификатора (identity theft). В случае состоявшегося угона идентификатора обеспечить истинному владельцу возможность возврата похищенного.
Способы решения задачи без использования рассматриваемой технологии:
- «Нулевой вариант». Понадеяться на честность участников процесса.
- «Административный запрет». При регистрации участников требовать паспорт. Законодательно запретить использование чужих идентификаторов. Привязать идентификатор к номеру телефона, использовать многофакторную авторизацию. При возникновении подозрений опять же требовать паспорт. Понадеяться на честность и неподкупность уполномоченных проверяющих. При выявлении случаев неправомерного использования штрафовать и/или сажать провинившихся в тюрьму.
- «Открытый ключ как идентификатор». Соответственно, секретный ключ используется в качестве средства авторизации. В принципе, достойный вариант (в частности, используется в криптоваютах) за тем исключением, что при потере либо компрометации секретного ключа участник необратимо выбывает из игры.
Решение задачи с использованием одноразовых секретных ключей:
- Участник создаёт идентифицирующую ключевую пару [SK0, PK0]. Открытый ключ PK0 (либо его хеш) становится уникальным идентификатором участника.
- Участник создаёт дополнительный набор ключевых пар [SK1, PK1], [SK2, PK2] … [SKn, PKn], и открытый ключ каждой из них подписывается ключом SK0.
- Ключ SK0 уничтожается. Шаги с первого по третий выполняются в рамках единого процесса без записи SK0 в энергонезависимую память.
- Для аутентификации участник использует одну из созданных на втором шаге ключевых пар (например, [SK1, PK1]), а остальные, если они были созданы, прячет в надёжном месте.
- Если используемая ключевая пара оказывается скомпрометированной, её ключ (в примере это PK1) помещается в список отзывов, а для аутентификации используется один из запасных ключей. Либо создаётся ещё один дополнительный ключ, имеющий цепочку сертификации, начинающуюся с PK0 (например, PK0 – PK2 – PKn+1).
Если говорить конкретно о криптовалютах, описанное здесь решение задачи особого смысла не имеет (при помощи похищенного ключа злоумышленник немедленно опустошает кошелёк), но тема «аутентификация» далеко не исчерпывается применением в криптовалютах.
Для удобства дальнейшего обсуждения можно предложить следующие обозначения для используемых ключей:
i-key – идентифицирующий ключ (identity key). В рассматриваемом примере это PK0.
a-key – аутентифицирующий ключ (authentication key). В рассматриваемом примере это PK1 либо любой другой ключ, прямо либо косвенно подписанный i-key.
hc-key – один из дополнительных надёжно спрятанных ключей (злоумышленнику неизвестен ни факт их существования, ни их количество), используемых для восстановления доступа в случае компрометации a-key.
Маленькое замечание к использованию одноразовых секретных ключей. Схема работоспособна только в том случае, если у субъекта, создавшего первоначальную ключевую пару, отсутствует мотивация сохранить себе секретный ключ для какой-то своей отдельной надобности. При использовании данной технологии для аутентификации все потребности полностью покрываются набором дополнительных hc-ключей (кстати, загадка для присутствующих: на что намекает аббревиатура «hc»?). Сохранение первоначального ключа никакой выгоды не приносит, зато создаёт уязвимость, делающую возможным необратимый угон идентификатора.
P.S. Если описанная здесь технология вдруг является оригинальной, то есть желание превратить эту публикацию в статью в каком-нибудь уважаемом англоязычном издании. Тем, кто может с этим помочь, предлагаю сотрудничество либо за вознаграждение, либо за соавторство.
Автор: maslyaev