Увійти за допомогою Zcash
Середній рівень - 7 хв
Коротко
- Увійти можна, довівши, що ви контролюєте адресу Zcash, замість використання пароля
- Використовуються два підходи: підписування challenge, або надсилання shielded-платежу з кодом у memo
- Оскільки shielded-адреси приховують баланс та історію, доказ контролю не розкриває ваші фінанси
- Цей підхід ще на ранньому етапі. Затвердженого стандарту поки немає, а реалізації не є взаємосумісними
Для кого це?
- Для розробників, які хочуть реалізувати вхід без пароля без збору персональних даних
- Для користувачів, які не хочуть залишати свою електронну адресу на кожному сайті
- Для всіх, хто хоче входити без прив’язки своєї фінансової історії до акаунта
Проблема
Більшість способів входу щось розкривають:
- Паролі та електронна пошта створюють акаунт, прив’язаний до вашої особи, і обидва зрештою потрапляють у злиті бази даних
- Вхід через соціальні мережі повідомляє постачальнику ідентифікації, де саме ви входите і коли
- Вхід через гаманці у прозорих блокчейнах гірший, ніж здається. Підключення гаманця може передати сайту весь ваш баланс та історію транзакцій назавжди
Зазвичай доводиться обирати між зручністю та розкриттям даних.
Чому саме Zcash?
Zcash відокремлює доказ контролю від розкриття фінансів:
- Shielded-адреси зберігають приватність балансів та історії транзакцій, тож доказ того, що ви володієте такою адресою, нічого не говорить про те, чим ви володієте
- Зашифровані memo можуть приватно передавати одноразовий код входу всередині транзакції
- Viewing Key дають змогу вибіркового розкриття, тож застосунку можна надати доступ лише до того, що йому потрібно, і більше ні до чого
Як це працює
З’явилося два підходи. Обидва завершуються тим, що застосунок отримує для вас стабільний ідентифікатор і не потребує пароля.
Підхід 1: Підписати challenge
- Застосунок генерує випадковий одноразовий challenge
- Ваш гаманець підписує цей challenge ключем, що стоїть за вашою адресою
- Застосунок перевіряє підпис і входить вас у систему
Нічого не транслюється в мережу, тож немає комісії і не потрібно чекати на блок. Відповідна специфікація — ZIP 304, Sapling Address Signatures, яка все ще є чернеткою, тому підтримка підписування повідомлень у гаманцях відрізняється.
Підхід 2: Довести це за допомогою shielded-платежу
- Застосунок генерує одноразовий код і показує запит на платіж
- Ви надсилаєте невелику shielded-транзакцію з цим кодом у memo
- Застосунок відстежує memo, звіряє код і входить вас у систему
Це працює з гаманцями, які вже сьогодні підтримують memo, а це більшість із них. Компроміс у тому, що це коштує мережевої комісії і треба чекати підтвердження.
Як зберегти адресу приватною
Застосунку не обов’язково зберігати вашу адресу, щоб вас розпізнавати. Деякі реалізації хешують її разом зі значенням, специфічним для застосунку, тож кожен сайт бачить інший, але стабільний ідентифікатор для того самого користувача. Це не дає сайтам звіряти дані між собою, щоб пов’язувати ваші акаунти.
Компроміси
Це варто розуміти до того, як ви почнете це будувати або покладатися на це.
| Підписаний challenge | Shielded-платіж |
|---|
| Вартість | Безкоштовно | Мережева комісія за кожен вхід |
| Швидкість | Миттєво | Очікування підтвердження |
| Підтримка гаманцями | Обмежена, ZIP 304 — це чернетка | Широка, потрібна лише підтримка memo |
| Залишає запис у ланцюгу | Ні | Так, транзакція існує |
Спільні обмеження:
- За замовчуванням немає відновлення акаунта. Втрата ключа означає втрату акаунта, якщо тільки застосунок не передбачає шлях відновлення
- Повторне використання адреси може вас пов’язати. Використання тієї самої адреси на багатьох сайтах знову створює проблему відстеження, саме тому важливі ідентифікатори, специфічні для застосунку
- Немає затвердженого стандарту. У кожного проєкту своя схема, тому вхід, створений для одного, не працює з іншим
- Це не анонімність сама по собі. Це приховує ваші фінанси від застосунку, але застосунок усе одно може профілювати те, що ви робите після входу
Поширені помилки, яких варто уникати
- Повторне використання challenge-коду. Кожен код має бути одноразовим і швидко втрачати чинність, інакше перехоплений код можна повторно використати
- Просити користувачів надсилати значущу суму для входу. Платіж є доказом, тож сума має бути мінімальною
- Зберігати сиру адресу, коли ідентифікатор, специфічний для застосунку, виконав би ту саму роль
- Припускати, що підписування повідомлень працює всюди. Перевіряйте гаманці, якими реально користуються ваші користувачі
- Вважати memo секретом постфактум. Воно доводить, що відправник виконав дію, але не є паролем
Проєкти, що досліджують цей підхід
Ці проєкти були створені для треку Zcash Login у ZecHub Hackathon 3.0. Це радше експерименти, ніж готові продукти, і вони показують, наскільки по-різному можна реалізувати ту саму ідею.
- ZecAuth - протокол підключення гаманця для Zcash, за духом схожий на те, що WalletConnect робить в інших екосистемах. Застосунок показує QR-код або посилання
zecauth://, яке містить challenge разом із можливостями, доступ до яких він запитує, наприклад вхід, запити на платіж або доступ до перегляду. Жодної транзакції, жодної комісії, жодної взаємодії з ланцюгом. Разом із кодом постачається письмова специфікація протоколу
- ZShield - перетворює shielded-адресу на W3C DID та ідентичність OpenID Connect. Браузер генерує пару ключів, сервер видає nonce через інтерфейс у стилі ZIP 304, гаманець його підписує, а сервер повертає JWT. Оскільки результат сумісний з OIDC, наявні застосунки можуть використовувати його без спеціальної інтеграції
- ZecPass - доводить володіння через підписане memo і побудований так, щоб застосунок взагалі ніколи не дізнавався адресу користувача. Він виводить хеш, обмежений межами застосунку, щоб використовувати його як стабільний ідентифікатор, робить challenge одноразовими та обмеженими в часі, а також постачається з React-кнопкою plug-and-play і Node-бібліотекою для перевірки
- Portal - вхід шляхом надсилання shielded-транзакції з одноразовим кодом у memo, що працює в mainnet. Той самий потік також використовується для розблокування платного контенту та для надсилання чи отримання грошей за посиланням
- ZcashMe - використовує shielded-платіж як доказ ідентичності та зосереджується на розриві між десктопом і мобільним пристроєм, щоб вхід на ноутбуці не вимагав розширення браузера
- ZBooks - інструмент для бухгалтерії та виплат, який розглядає вхід через Zcash як багаторазовий примітив автентифікації, а не як сам продукт, і зчитує дані казначейства через Unified Full Viewing Key
Пов’язані сторінки