Вход с помощью Zcash
Средний уровень - 7 мин
TL;DR
- Входите, доказывая, что вы контролируете адрес Zcash, вместо использования пароля
- Используются две схемы: подписание challenge, или отправка защищённого платежа с кодом в memo
- Поскольку защищённые адреса скрывают баланс и историю, доказательство контроля не раскрывает ваши финансы
- Этот подход находится на ранней стадии. Утверждённого стандарта пока нет, и реализации не совместимы друг с другом
Для кого это?
- Для разработчиков, которые хотят реализовать вход без пароля без сбора персональных данных
- Для пользователей, которые не хотят оставлять адрес электронной почты на каждом сайте
- Для всех, кто хочет входить в аккаунт, не связывая свою финансовую историю с учётной записью
Проблема
Большинство способов входа что-то раскрывают:
- Пароли и электронная почта создают учётную запись, связанную с вашей личностью, и оба в итоге попадают в утечки данных
- Вход через социальные сети сообщает провайдеру идентификации, где именно и когда вы входите
- Вход через кошелёк в прозрачных блокчейнах хуже, чем кажется. Подключение кошелька может навсегда передать сайту весь ваш баланс и историю транзакций
Обычно вам приходится выбирать между удобством и раскрытием данных.
Почему Zcash?
Zcash отделяет доказательство контроля от раскрытия финансовой информации:
- Защищённые адреса сохраняют в тайне балансы и историю транзакций, поэтому доказательство владения таким адресом ничего не говорит о том, чем вы владеете
- Зашифрованные memo могут приватно переносить одноразовый код для входа внутри транзакции
- Viewing keys позволяют выборочное раскрытие, так что приложению можно дать доступ на чтение ровно к тому, что ему нужно, и ни к чему больше
Как это работает
Появились два подхода. Оба заканчиваются тем, что приложение получает для вас стабильный идентификатор и не использует пароль.
Подход 1: Подписать challenge
- Приложение генерирует случайный challenge для одноразового использования
- Ваш кошелёк подписывает этот challenge ключом, стоящим за вашим адресом
- Приложение проверяет подпись и выполняет вход
Ничего не публикуется в сеть, поэтому нет комиссии и не нужно ждать блока. Соответствующая спецификация — ZIP 304, Sapling Address Signatures, она всё ещё находится в статусе draft, поэтому поддержка подписания сообщений в кошельках различается.
Подход 2: Доказать с помощью защищённого платежа
- Приложение генерирует одноразовый код и показывает запрос на платёж
- Вы отправляете небольшую защищённую транзакцию с этим кодом в memo
- Приложение отслеживает memo, сопоставляет код и выполняет вход
Это работает с кошельками, которые уже сегодня поддерживают memo, а это большинство из них. Компромисс в том, что приходится платить сетевую комиссию и ждать подтверждения.
Сохранение адреса в тайне
Приложению не обязательно хранить ваш адрес, чтобы распознавать вас. Некоторые реализации хешируют его вместе со значением, специфичным для приложения, так что каждый сайт видит разный, но стабильный идентификатор одного и того же пользователя. Это не даёт сайтам сопоставлять данные и связывать ваши аккаунты.
Компромиссы
Стоит понять их до того, как вы начнёте это использовать или полагаться на него.
| Подписанный challenge | Защищённый платёж |
|---|
| Стоимость | Бесплатно | Сетевая комиссия за каждый вход |
| Скорость | Мгновенно | Нужно ждать подтверждения |
| Поддержка кошельков | Ограниченная, ZIP 304 находится в статусе draft | Широкая, нужны только memo |
| Оставляет запись в цепочке | Нет | Да, транзакция существует |
Общие ограничения:
- По умолчанию нет восстановления аккаунта. Потеря ключа означает потерю аккаунта, если только приложение не предусмотрело путь восстановления
- Повторное использование адреса может связать вас. Использование одного и того же адреса на многих сайтах заново создаёт проблему отслеживания, поэтому идентификаторы, специфичные для приложения, так важны
- Нет утверждённого стандарта. У каждого проекта своя схема, поэтому вход, созданный для одного, не работает с другим
- Это не анонимность сама по себе. Такой подход скрывает ваши финансы от приложения, но приложение всё равно может профилировать ваши действия после входа
Распространённые ошибки, которых стоит избегать
- Повторное использование challenge-кода. Каждый код должен быть одноразовым и быстро истекать, иначе перехваченный код можно будет использовать повторно
- Просить пользователей отправлять значимую сумму для входа. Платёж — это доказательство, поэтому сумма должна быть символической
- Хранить исходный адрес, когда идентификатор, специфичный для приложения, выполняет ту же задачу
- Предполагать, что подписание сообщений работает везде. Проверьте, какими кошельками реально пользуются ваши пользователи
- Считать memo секретом постфактум. Оно доказывает, что отправитель совершил действие, но это не пароль
Проекты, изучающие этот подход
Они были созданы для трека Zcash Login на ZecHub Hackathon 3.0. Это скорее эксперименты, чем готовые продукты, и они показывают, насколько по-разному можно реализовать одну и ту же идею.
- ZecAuth - протокол подключения кошелька для Zcash, по духу похожий на то, что WalletConnect делает в других экосистемах. Приложение показывает QR-код или ссылку
zecauth://, содержащую challenge вместе с запрашиваемыми возможностями, такими как вход, платёжные запросы или доступ на просмотр. Ни транзакции, ни комиссии, ни взаимодействия с цепочкой. Вместе с кодом поставляется письменная спецификация протокола
- ZShield - превращает защищённый адрес в W3C DID и идентичность OpenID Connect. Браузер генерирует пару ключей, сервер выдаёт nonce через интерфейс в стиле ZIP 304, кошелёк подписывает его, а сервер возвращает JWT. Поскольку результат совместим с OIDC, существующие приложения могут использовать его без специальной интеграции
- ZecPass - доказывает владение через подписанное memo и построен так, что приложение вообще не узнаёт адрес пользователя. Он выводит хеш с областью действия приложения для использования в качестве стабильного идентификатора, делает challenge одноразовыми и ограниченными по времени и поставляется с готовой React-кнопкой и библиотекой проверки
- Portal - вход путём отправки защищённой транзакции с одноразовым кодом в memo, работающий в mainnet. Тот же поток используется для разблокировки платного контента и для отправки или получения денег по ссылке
- ZcashMe - использует защищённый платёж как доказательство идентичности и сосредоточен на разрыве между десктопом и мобильными устройствами, чтобы вход на ноутбуке не требовал расширения браузера
- ZBooks - инструмент для бухгалтерии и выплат, который рассматривает вход с помощью Zcash как переиспользуемый примитив аутентификации, а не как сам продукт, и считывает данные казначейства через Unified Full Viewing Key
Связанные страницы