ru

Благодаря броскам кубиков ключи от биткоинов хранятся в автономном режиме, но не все будут этим заниматься

image
rubric logo Analytics

Почему результат броска кубика так сложно предсказать

Клод Шеннон, математик, заложивший основы теории информации, использовал энтропию для измерения степени неопределенности результата. В случае честного шестигранного кубика каждая грань имеет одинаковую вероятность выпадения — одну из шести. Это дает каждому броску примерно 2,585 бита энтропии. Подбрасывание монеты дает 1 бит, а бросок восьмигранного кубика — 3 бита.

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

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

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

Преобразование результатов броска кубика в пригодные для использования данные

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

Простой метод «чет-нечет» легко понять, но он тратит впустую большую часть доступной энтропии. Каждый бросок сводится к одному биту, хотя кубик генерирует около 2,6 бита информации. Более эффективные методы собирают длинную последовательность бросков и обрабатывают всю строку, обычно с помощью криптографической хеш-функции. Это позволяет сохранить гораздо больше случайности.

Тот же принцип лежит в основе Diceware — давно известного метода создания безопасных парольных фраз — а также при ручном создании биткойн-кошельков. Типичная 12-словная фраза восстановления кошелька состоит из 128 битов энтропии. При примерно 2,6 битах на каждый бросок около 50 честных бросков дают достаточно исходной информации, чтобы преодолеть этот порог.

Компания Coinkite, производитель аппаратного кошелька Coldcard, рекомендует 99 или более бросков для пользователей, стремящихся к энтропии, близкой к 256 битам. Это не делает кошелек в два раза сложнее в использовании, но обеспечивает сгенерированному секрету гораздо больший математический запас безопасности.

Практическое испытание семян, сгенерированных с помощью кубиков

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

Поскольку части этого алгоритма можно было восстановить, злоумышленники могли сузить круг возможных ключей кошелька, вместо того чтобы просматривать всё пространство ключей. Эта уязвимость была связана с кражей, по оценкам, 1 128,6633 BTC с примерно 1 100 адресов (по состоянию на 13:00 по восточному времени).

Источник изображения: X

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

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

Wizard Sardine анализирует мелкий шрифт

1 августа исследователь в области безопасности Кевин Лоэк (Kevin Loaec) опубликовал на сайте Wizard Sardine оценку уязвимости Coldcard. Его наиболее важное замечание касалось функций Coldcard, которые генерировали собственные секретные ключи отдельно от основного седа кошелька.

«Я считаю чрезвычайно важным подчеркнуть, что даже пользователи, которые импортировали или сгенерировали семенное число с помощью кубиков, уязвимы, если они используют следующие функции», — написал Лоэк на X, после чего представил схему уязвимой системы.

На схеме показано, как уязвимый генератор случайных чисел питает несколько второстепенных функций Coldcard. К ним относятся создание бумажного кошелька, клонирование устройства, шифрование USB-сеансов, функция перевода Secret Teleport, создание ключей для совместного подписания, встроенный генератор паролей и коды аутентификации аппаратного модуля безопасности.

Источник изображения: пост в X от исследователя в области безопасности Кевина Лоэка.

Основной кошелек, созданный с помощью 99 бросков кубиков, оставался в отдельной части системы. Проблема заключалась в том, что другие инструменты по-прежнему могли запрашивать новые случайные данные у неисправного генератора. В результате безопасный семенной код не гарантировал, что каждый пароль, резервная копия, код аутентификации или вторичный ключ, созданные на том же устройстве, были одинаково безопасными.

Почему большинство новых пользователей не будут бросать кубики

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

Источник изображения: X

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

Источник изображения: X

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

Источник изображения: X

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

Что следует проверить владельцам Coldcard

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

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

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