Как поменять приватник в Braavos
РазнорабочийUPD: Информация в статье актуальная, но появились дополнения:
https://t.me/raznorabochiy_notes/38
вообще лучше подпишитесь на канал, там все обновления
Я знаю несколько способов.
Способ 1 (не совсем смена, но нечто похожее)
Для этого нужно рассказать, как устроен Braavos.
Если установить Braavos не только в браузер, но и на телефон, то в приложении можно включить Hardware Signer.
Теперь транзакции будут подписываться не основным приватником, а новым приватником, который хранится в телефоне и и доступен при помощи биометрии.
Даже если вы что-то будете делать в браузерном кошельке, телефон будет вам предлагать подписать транзакцию, это похоже на то как работает холодный кошелёк. Приватник хранится внутри секьюрити чипа телефона, чип подписыват транзы скрывая приватник.
С того момента, как вы добавили HW Signer, ваш основной приватник перестаёт работать и не сможет подписывать транзакции, кроме одного типа транз - удаления HW Signer. При этом HW Signer будет удалён не сразу, а по истечении 4 дней, если эта транза не будет отменена HW Signer'ом.
Транзу на удаления самого себя HW Signer тоже может подписать, старый приватник начнёт работать сразу после удаления, не нужно будет ждать 4 дня.
Способ подписи у HW Signer отличается от той, что используется в старкнете по умолчанию, поэтому транзы подписанные HW Signer стоят чуть дороже, так как требуют больше газа.
Если вдаваться в технические детали, HW Signer использует эллиптическую кривую secp256r1.
Я написал код, который проделывает все вышеперечисленные операции, но решил не выкладывать его в паблик, так как после анонса дропа у людей даже из нашей приватки угоняют аккаунты старка меняя им приватники, не хочу упрощать работу скамерам.
Немного расскажу о методах аккаунта Braavos:
add_signer(signer)
— добавляет HW Signer в аккаунт Braavos, стандартный приватник перестаёт работать
is_valid_signature(hash, signarure_len, signature)
— проверяет, может ли ваш аккаунт подписывать транзы стандартным приватником или HW Signer-приватником
remove_signer(index)
— удаляет HW Signer, делает подпись HW Signer'ом, не нужно ждать 4 дня, старый приватник опять начинает работать
remove_signer_with_etd(index)
— удаляет HW Signer используя старый приватник, нужно ждать 4 дня чтобы старый приватник снова начал работать
cancel_deferred_signer_req(removed_signer_id)
— отменяет удаление HW Signer, нужно подписывать HW Signer'ом
Способ 2 (реальная смена приватника как в Аргент)
Этот способ я увидел буквально вчера, когда угнали аккаунты у одного парня из нашей приватки, Ильдара.
У аккаунта Бравос есть метод setPublicKey(newPublicKey), но если посмотреть код в гитхабе, то этот метод пустышка, который в реальности ничего не меняет.
Небольшое отступление, сейчас все свежие Браавос кошельки имеют версию контракта 000.000.011
А на гитхабе самый свежий код 000.000.010 и давно нет активности в проекте, делаем выводы, что они переехали на другой git-сервис, возможно закрытый.
Но это не важно, в 11 версии setPublicKey тоже ничего не делает.
На угнанных аккаунтах Ильдара, сначала делается upgrade кошелька на новую версию и потом вызов setPublicKey который меняет приватник.
При этом на этом аккаунте у же был ранее вызов upgrade сделанный хозяином аккаунта, когда он обновлялся несколько месяцев назад на 11 версию. А после вызова скамером кошелёк стал версии 10.
Я предполагаю, что скамер взял код с гитхаба, дописал функцию setPublicKey, задеплоил этот контракт и в вызове апгрейд у угнанных аккаунтов указал свою новую имплементацию контракта, а далее вызвал setPublicKey.
Вот такой хитрый способ.
Пост Ильдара о случившемся скаме: https://t.me/ildar_scripts/19
Полезные ссылки:
https://braavos.notion.site/Hardware-Signer-FAQs-5d5ae07e999e45ddaf8a7f5c4abbad80
https://github.com/myBraavos/braavos-account-cairo