Генеративный анализ данных

Как Kraken Wallet решает проблемы мобильной криптобезопасности

Дата:

Мы считаем, что самый безопасный мобильный криптокошелек — это тот, который преодолевает ограничения, присущие мобильной операционной системе. Например, в iOS CryptoKit от Apple не поддерживает secp256k1 эллиптическая кривая, стандарт для Биткойна, Эфириума и многих других блокчейнов.

Это ограничение не позволяет разработчикам использовать безопасный элемент устройств для хранения ключей и подписания транзакций. В результате мобильные криптокошельки классифицируются как горячие кошельки, поскольку они подключены к Интернету и подписывают транзакции вне защищенного элемента, используя программную реализацию криптографических алгоритмов.

Это означает, что закрытые ключи должны быть доступны – по крайней мере, во время подписания – в памяти изолированной среды приложения. Это делает их более уязвимыми для потенциальных угроз, чем кошелек, который использует безопасный элемент для подписи транзакций.

Несмотря на невозможность выполнить подпись на защищенных элементах напрямую, что обеспечило бы повышенную защиту, мы взяли на себя обязательство предоставить мобильный криптокошелек с открытым исходным кодом, в котором приоритет отдается безопасности, прозрачности и пользовательскому контролю.

Наша архитектура безопасности специально создана для:

  • Поддержка нескольких блокчейнов
  • Генерируйте закрытые ключи с высокой энтропией — мерой непредсказуемости, повышающей безопасность.
  • Используйте проверенную в боевых условиях криптографию для безопасного шифрования личных ключей пользователей, используя возможности защитного оборудования мобильных телефонов и функции безопасности ОС.
  • Предложите повышенную безопасность с помощью пароля, сгенерированного пользователем, для опытных пользователей, которым нужен дополнительный уровень шифрования (помимо защиты цепочки ключей ОС для ключа дешифрования).
  • Создайте прочную основу для будущего внедрения новых типов управления ключами, таких как аппаратные кошельки и системы на основе кворума MPC.

Преимущество открытого исходного кода

В качестве одного из основополагающих принципов безопасности, Кракен кошелек это бесплатное программное обеспечение с открытым исходным кодом, распространяется под лицензия MIT. Создавая новый кошелек с нуля, для нас было важно способствовать развитию распределенной экосистемы с открытым исходным кодом.

Без открытого исходного кода Kraken Wallet потребовал бы большого доверия и прозрачности. Это дало бы клиентам меньшую защиту; вы не могли бы проверить, изменить или запустить клиент самостоятельно, даже если бы захотели. «Не верь, проверь!» это не просто отраслевая максима, это один из наших руководящих принципов.

Открытый исходный код нашего программного обеспечения позволяет достичь двух фундаментальных целей, которые мы изначально поставили перед этим продуктом: проверяемая и проверяемая минимизация доверия:

  • Проверяемость: Возможность проверить, что предположения о безопасности, представленные в этом сообщении блога, верны. Любой может посмотрите исходный код чтобы конкретно понять, что делается и чего не делается в этом кошельке. 
  • Проверяемость: Возможность проверить правильность результатов нашей реализации безопасности и сообщить, если это не так. Мы привлекали внутренние и внешние команды для проведения нескольких проверок безопасности перед выпуском. В дальнейшем любой сможет проверить код и составить отчет о своих выводах.

Генерация ключей и импорт ключей

React Native, хотя и является мощным инструментом, не имеет встроенного криптомодуля. Чтобы обойти эту проблему, мы использовали реализацию крипто-модуля NodeJS на чистом js (crypto-browserify). Метод crypto.randomBytes(), который генерирует фактические случайные байты, необходимые нам во время генерации ключа, обрабатывается реагировать-родные-получить-случайные значения полифилл.

React-native-get-random-values ​​использует собственный код для использования криптографически безопасного генератора псевдослучайных чисел (CSPRNG), доступного на устройстве, для генерации случайных чисел. Практически на всех современных устройствах этот генератор случайных чисел поддерживается безопасным аппаратным генератором случайных чисел.

Во время инициализации кошелька мы извлекаем энтропию из CSPRNG и преобразуем ее в мнемоническое начальное число, используя хорошо зарекомендовавшие себя пакеты npm (BIP32, BIP39).

Ключи преобразуются, сохраняются и предоставляются пользователю в соответствии со стандартом BIP39, который предлагает простой в резервном копировании мнемонический метод, совместимый с большинством кошельков в экосистеме. Функция импорта поддерживает восстановление семян, совместимых с BIP39, что обеспечивает лучшую совместимость в экосистеме. 

Ключевой менеджмент 

Kraken Wallet хранит два секретных значения — начальное число и мнемоническое значение — и несколько несекретных (но все же частных) значений, таких как адреса кошельков, имена кошельков и описания транзакций.

Материал закрытого ключа (начальное число/мнемоника) хранится в Keychain (на iOS) и Keystore (на Android). Материал открытого ключа и неконфиденциальные данные (расширенные открытые ключи, адреса и описания) хранятся в зашифрованной базе данных приложения (с использованием Область).

Существует несколько мер безопасности, защищающих данные:

  • Блокировка приложения: случайно сгенерированная 64-байтовая строка, хранящаяся в Keychain или Keystore. Доступ к секрету защищен требованиями присутствия пользователя — биометрической аутентификацией или аутентификацией с паролем.
  • Пароль: предоставляется пользователем и не хранится на устройстве. Вместо этого пользователь должен ввести пароль вручную по запросу приложения. Кошелек определяет, нужен ли пароль, сверяясь с двумя флагами (is_storage_encrypted и is_seed_encrypted), хранящимися в Keychain или Keystore. Алгоритм Argon2 используется в качестве функции получения ключа.
  • Шифрование базы данных: База данных (Realm) используется для хранения несекретных данных. Данные шифруются случайным 64-байтовым ключом.
  • Механизм блокировки: Ввод неправильного пароля приводит к задержке перед последующими попытками ввода пароля. Этот механизм эффективно предотвращает атаки методом перебора паролей. Информация о параметрах блокировки, таких как количество попыток и продолжительность задержек, надежно хранится в «Связке ключей» или хранилище ключей.

Начальное значение, мнемоника и ключ шифрования базы данных всегда хранятся в зашифрованном виде.

  • Когда никакая защита не включена: начальное значение, мнемоника и ключ шифрования Realm хранятся непосредственно в связке ключей или хранилище ключей без контроля доступа на основе присутствия пользователя.
  • Когда активирована блокировка приложения: мнемоника и начальное значение сначала шифруются с помощью секрета блокировки приложения, а затем надежно сохраняются в связке ключей или хранилище ключей. Ключ шифрования Realm также хранится непосредственно в связке ключей или хранилище ключей.
  • Когда включена защита паролем: мнемоника и начальное значение шифруются паролем, тогда как ключ шифрования Realm шифруется паролем только в том случае, если для параметра is_storage_encrypted установлено значение true.
  • Когда включены как блокировка приложения, так и защита паролем: Мнемоника и начальное значение зашифрованы как паролем (первый), так и блокировкой приложения (второй). Ключ шифрования Realm шифруется только с помощью пароля и только в том случае, если для параметра is_storage_encrypted установлено значение true.

Использование ключа

Начальное значение/мнемоника хранится в Keychain или Keystore и играет решающую роль в криптографических операциях. Когда необходимо создать новый адрес кошелька или подписать транзакцию, мы получаем необходимую информацию, такую ​​как закрытый ключ, из этого начального числа.

Однако важно отметить, что во время этих операций закрытый ключ должен быть загружен в память. Эта необходимость проистекает из ограничений, которые мы упоминали ранее в отношении мобильных кошельков, и отсутствия прямого доступа к защищенному элементу для подписания транзакций.

  • Подписание транзакции (отправка токенов)
  • Подписание данных WalletConnect (обработка запросов сеанса)
  • Добавление нового кошелька
  • Включение цепочек тестовой сети (добавление кошельков тестовой сети)
  • Отображение мнемоники
  • Проверка мнемоники
  • Включение и отключение блокировки приложений
  • Включение и отключение пароля

Дополнительная биометрическая аутентификация выполняется для следующих функций:

  • Включение блокировки приложения
  • Удаление всех данных
  • Удаление кошелька (аккаунта)
  • Включение или отключение пароля (помимо восстановления блокировки приложения)
  • Открытие приложения
  • Перемещение приложения на передний план
  • Просмотр расширенных открытых ключей
  • Подключение к децентрализованному приложению (dApp)

Кроме того, для открытия приложения может потребоваться пароль. Связка ключей и хранилище ключей всегда используются через реакция-родной-брелок обертка:

  • Обертка генерирует новый ключ в Keychain или Keystore для каждого элемента.
  • Обертка отвечает за передачу правильных флагов конфигурации для Keychain и Keystore.
  • Кошелек всегда запрашивает обертку для настройки флагов, чтобы устройство было разблокировано для доступа к ключу.
  • Проверка присутствия пользователя (биометрическая) настроена на основе времени и действительна в течение 5 секунд; проверка присутствия пользователя не выполняется при каждом доступе

Алгоритм шифрования одинаков для всех элементов:

  • Ключ получен с помощью Argon2id из секретного кода, нормализованного NFC.
  • Соль для Argon2id — это уникальный идентификатор устройства.
  • Режим шифрования AES-GCM.
  • Вектор инициализации (IV) для AES составляет 16 случайных байтов.
  • Тег аутентификации для AES должен иметь длину 16 байт.

Подписание транзакции

В дополнение к ранее упомянутым мерам, касающимся хранения ключей, биометрии и защиты паролей, подписание транзакций остается критически важной областью постоянного совершенствования. В качестве первого шага мы реализовали несколько заслуживающих внимания мер в этой области, в том числе:

Моделирование транзакции

Мы используем внешние сервисы API (например, Blowfish и другие), чтобы проверить возможные уровни «серьезности», которую транзакция может принести пользователю (оценка риска). Это варьируется от полного экрана блокировки возможных вредоносных транзакций (или подписи сообщений) до предупреждений о различных уровнях осторожности, которые пользователь должен соблюдать перед подписанием или подтверждением транзакции. 

Другие меры включают в себя:

  • Проверка адреса, чтобы убедиться, что вы не отправляете на неправильный адрес.
  • Адреса, которые всегда видны целиком, чтобы гарантировать, что пользователь не станет объектом конкретных атак, связанных с составлением адресов.
  • Проверка сети и предупреждения, чтобы убедиться, что пользователь не отправляет данные в неправильную сеть.
  • Проверки разумности комиссий, чтобы убедиться, что пользователь не переплачивает за транзакцию.

Конфиденциальность сети

Чтобы защитить конфиденциальность и личные данные пользователей таким образом, чтобы эти данные не утекли при сетевых запросах, особенно к сторонним службам, мы разработали шлюз API для прокси-запросов. Этот прокси позволяет нам не передавать пользовательские запросы сторонним сервисам и не раскрывает IP-адрес клиента внешним или публичным провайдерам. 

Эта серверная служба по сути представляет собой API для запроса общедоступных данных блокчейна. В архитектуре безопасности кошелька его цель — инкапсулировать эту функциональность в общий API для всех блокчейнов, чтобы Kraken Wallet не приходилось реализовывать специфичное для блокчейна поведение для запроса данных.

Эта серверная служба определяет этот общий API. В конечном итоге он передает запросы другим сторонам, от которых получает фактические данные. Он не индексирует сами блокчейны и не поддерживает состояние.

Предположения о безопасности

Наша архитектура безопасности основывается на нескольких ключевых предположениях, обеспечивающих оптимальную защиту. Мы исходим:

  • Устройство пользователя не имеет root-прав, операционная система не устарела и не подвержена критическим уязвимостям, которые могут предоставить злоумышленнику доступ к памяти устройства.
  • Пакет Keychain или Keystore обеспечивает достаточно надежную защиту.
  • Мобильная ОС предлагает надежную изолированную программную среду между процессами приложений, гарантируя правильное управление памятью, содержащей конфиденциальные данные, такие как начальные данные.

Дополнительный функционал

  • Приложение работает по принципу хранения только минимального количества данных, необходимого для работы кошелька.
  • На клиенте не используются сторонние аналитические пакеты или пакеты разработки программного обеспечения для создания отчетов о сбоях (SDK).
    • Учитывая наши усилия по предотвращению утечки каких-либо данных третьим лицам, не имеет смысла включать дополнительное отслеживание данных — это означает, что вы не найдете в клиенте никакого программного обеспечения для аналитики или создания отчетов о сбоях.
  • Никакие обновления по беспроводной сети (кроме обычного процесса обновления AppStore/Play Store) не разрешены и не реализованы в базе кода.
    • Пользователь может рассчитывать на скомпилированное программное обеспечение, которое не может быть обновлено без его согласия.
  • Список токенов и система репутации
    • Чтобы помочь пользователям управлять своими токенами, мы внедрили систему списков и репутации на основе активов, предоставленных Kraken и другими третьими сторонами.
  • NFT-спам
    • Первым шагом, который мы планируем продолжать совершенствовать, является обнаружение спама и связанных со спамом атак, при котором спам автоматически архивируется в папке пользователя.

Внешний аудит безопасности

Безопасность нашего кошелька для самостоятельного хранения была тщательно оценена в ходе аудита, проведенного Трейл бит, уважаемой в отрасли аудиторской фирмы в области безопасности. Этот аудит включал детальное изучение нашей кодовой базы и клиентской архитектуры с целью выявления и устранения потенциальных уязвимостей безопасности.

Чтобы обеспечить прозрачность и дать представление о безопасности нашей платформы, результаты этого аудита общедоступны. Этот открытый доступ позволяет пользователям и заинтересованным сторонам просматривать результаты анализа безопасности, проведенного Trail of Bits. Отчет служит важным ресурсом для понимания принимаемых нами мер безопасности и нашего стремления поддерживать безопасную среду для наших пользователей.

Приоритет безопасности, прозрачности и пользовательского контроля

Kraken Wallet обеспечивает тонкий баланс между удобством и надежной защитой перед лицом присущих платформе ограничений. Наш подход всегда заключался в том, чтобы начать с совместимой структуры кошелька, которая широко признана. Этот прочный фундамент создает для нас основу для инноваций и добавления новых возможностей с целью предложить нашим пользователям постоянно развивающееся, первоклассное решение безопасности для самостоятельного хранения своих криптоактивов.

Эти материалы предназначены только для общих информационных целей и не являются инвестиционными советами, рекомендациями или предложениями покупать, продавать, делать ставки или хранить какие-либо криптоактивы или использовать какую-либо конкретную торговую стратегию. Kraken не работает и не будет работать над повышением или понижением цены какого-либо конкретного криптоактива, который он предоставляет. Некоторые криптопродукты и рынки не регулируются, и вы не можете быть защищены государственными компенсационными и/или нормативными схемами защиты. Непредсказуемый характер рынков криптоактивов может привести к потере средств. Налог может взиматься с любого дохода и/или любого увеличения стоимости ваших криптоактивов, и вам следует обратиться за независимой консультацией по поводу вашей налоговой позиции. Могут применяться географические ограничения.

Spot_img

Последняя разведка

Spot_img

Чат с нами

Всем привет! Могу я чем-нибудь помочь?