Обнаружена серьезная уязвимость в приложении Zilliqa для аппаратных кошельков Ledger, которая затрагивает создание подписей Шнорра для нативных (не-EVM) транзакций Zilliqa. Из-за ошибки при генерации случайных чисел злоумышленники могут восстановить приватный ключ владельца, используя только общедоступные данные блокчейна. Разработчики уже приостановили нативные транзакции в качестве защитной меры и готовят скоординированный план спасения средств пользователей.
Уязвимость затрагивает только нативные (не-EVM) транзакции Zilliqa, подписанные через приложение Ledger. Если с аккаунта отправили пять или более таких транзакций, приватный ключ этого аккаунта следует считать скомпрометированным: его можно восстановить из уже опубликованных в блокчейне подписей, и никакое обновление ПО этого не исправит. Проблема не затрагивает EVM-транзакции и официальные SDK: zilliqa-js, gozilliqa-sdk и pyzil.
Нативные транзакции Zilliqa используют схему подписи EC-Schnorr на кривой secp256k1. Для каждой подписи требуется случайное 256-битное «одноразовое число» (nonce, k), и его непредсказуемость критически важна: любое систематическое смещение позволяет вычислить приватный ключ.
Как выяснилось, код приложения сначала корректно генерировал 40 байт случайных данных и приводил их по модулю порядка кривой, получая равномерное 256-битное значение. Но при копировании результата в буфер nonce использовались не те 32 байта. Вместо содержательной части сохранялись восемь нулевых байт, оставшихся от выравнивания, а восемь байт настоящей энтропии терялись. В итоге старшие 64 бита каждого сгенерированного nonce всегда были нулевыми, то есть значение k оказывалось меньше 2192.
Если есть пять или более подписей с подобным дефектом, частичная предсказуемость числа позволяет за секунды восстановить ключ на обычном оборудовании, решив так называемую задачу о скрытом числе (Hidden Number Problem) методом редукции решеток. Это хорошо известная техника атаки на подписи со смещенным nonce.
При этом уязвимость оставалась непропатченной с момента запуска проекта в 2019 году — целых семь лет! Баг обнаружили только после атаки на одного из партнеров компании 19 июля 2026 года. Фикс все еще готовится, и в компании обещают объявить о нем отдельно.
