Secrets Sharing — огляд основних методів/бібліотек/реалізацій
Для чого воно
Цифрові підписи зараз вже стали дуже важливою частиною нашого цифрового життя. Прикладні приклади їх застосування оточують нас буквально усюди — від SSL на веб сайтах та подачі податкових декларацій до блокчейн транзакцій.
Але в усіх алгоритмах цифрового підпису є декілька фундаментальних проблем:
1. Крадіжка приватного ключа
2. Втрата приватного ключа
Традиційні методи
Для вирішення першої проблеми приватні ключі можна зберігати на хардварних KMS як хмарних так і хардварних. Але у першому випадку ти повинен дуже довіряти провайдеру, а у другому це погіршує твій експірієнс та додає проблем із втратою ключа
Проблема втрати ключа вирішується різноманітними бекапами, що звісно погіршує секьюрність бо які б місця бекапів не були найдійними факт залишається фактом — чим більше місць де зберігаються копії ключа тим гірша секьюрність.
Проблема втрати ключа не сильно критична для таких кейсів, як подача звітності у податкову бо фактично ключі випускаються довіреним провайдером, який володіє твоїм KYC (тобто паспортними данними) і перевипускати такі ключі можна скільки завгодно. А от для крипти втрата ключа означає втрату доступу до грошей (якщо хто не в курсі, то адреса криптогаманця утворена функцією від публічного ключа і кожна транзакція підписується приватним ключем, цей підпис перевіряють валідатори. Тобто нема ключа — нема гаманця)
Варіанти рішення
Мультипідпис
Є ще один варіант вирішення проблеми втрати ключів для криптогаманців — мультипідпис транзакції. Ця штука не має нативного сапорту на більшості L1 чейнів, але можна написати смарт контракт, на який кидаєш монети. І у логіці контракту прописати що може бути декілька підписантів. У цьому випадку утворюється декілька адрес які керують гаманцем і інші ключі передаються довіреним особам.
Це трохи полегшує справу, але додає вартості транзакціям що погано. Ну крім того нормально працювати це може тільки для ончейн штук. Бо ми всі нікому не довіряємо крім публічного блокчейну
Shamir Secrets Sharing
Це більш цікава історія.
Метод дозволяє розділити секретну інформацію на декілька частин n щоб будь які К учасників могли його відновити. Я не буду вдаватись зараз в математику — вона досить проста і є реалізації під будь-які мови (якщо цікаво можу детально розібрати у наступній сттаті). Але розкажу про прикладне застосування
Зазвичай береться приватний ключ і розбивається на 3 частини.
Одну частину клієнт залишає собі, інша передається провайдеру (того ж криптогаманця), а третя називається резервною шарою і передається довіреній особі.
Для відновлення ключа треба дві частини і він відновлюється на клієнті кожного разу як тільки його треба використати
Таким чином начебто все ок — жоден учасник не має доступу до спільного ключа (теоретично) та втрата однієї з шар не критична.
Але є фундаментальна проблема — одна із сторін на якій відбувається генерація та відновлення ключа (зазвичай це клієнська частина) у якийсь момент знає про ключ і це є вразливістю
Прикладні реалізаціі: Web3Auth, Circle Programmable Wallets, Fireblocks
Multi Party Computation (MPC)
Ідея заключається в розподіленому обчисленні якоїсь функції, результат якої не доступний жодному учаснику окремо. Ця ідея з’явилась аж в 1970х роках, але до прикладної її реалізації добрались тільки зараз.
Одразу скажу — штука не проста як для розуміння, так і для реалізації. Є багато різних реалізацій MPC для алгоритмів цифрового підпису. Суть у них в принципі схожа — кожен учасник має свій приватний ключ і обмінюючись месседжами в рамках протоколу вони домовляються про спільний відкритий ключ. Підпис виконується також спільними зусиллями. Обмін месседжами часто виконується через p2p мережу (зазвичай LibP2P)
Ця штука дійсно секьюрна бо ніхто не володіє спільним приватним ключем. Для підпису також не обов’язкові усі учасники і втрата одного або декількох не критична
Проблеми тут дві
1. Бюрократичні регулятори. У деяких країнах регулятор може не визнати такі гаманці некастодіальними і забов’язати купувати ліцензії. Бо головною їх вимогою є можливість вигрузити із гаманця приватний ключ, а у випадку MPC це складно зробити.
2. Складність алгоритмів та інфраструктури веде до можливих вразливостей. Наприклад гарною відправною точкою для атак на протокол є пошук вразливостей у інфраструктурі обміну повідомленнями.
Ще цікавий факт — у середовищі криптанів MPC стало своєрідною торговою маркою і у 90% випадків коли ви чуєте про MPC майте на увазі що це не MPC, а звичайні шаміри (Shamir Secrets Sharing)
Реалізації. Серед реальних реалізацій MPC можу виділити тільки дві, які дійсно пройшли секьюріті аудити як MPC це
1. Гаманець ZenGo. Має відкриту реалізацію під EСDSA на Rust
2. Ліба від Binance під ECDSA/EdDSA на Golang
P.S Знаю що тут багато крипто хейтерів, але спробуйте трохи притримати свої емоції. Я все ж спробував зробити більш технічну статтю малими зусиллями на обідній перерві і це затравка до більш цікавих статтей по сабжу гаманців, підписів, шифрування і т/п Дяка вам за стриманість!
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів