MSTR Cat

Блокчейн/Уровень II · Механика/2.1 Криптография/Урок 5

Энтропия и случайность

Невидимый фундамент: почему ключ надёжен ровно настолько, насколько случаен шум, из которого он создан

МатериалыНабор игральных костей (необязательно, чтобы увидеть физическую энтропию)Тетрадь

Любопытство

  1. Что отличает истинную случайность от человеческой интуиции?
  2. Как программная ошибка в одном дистрибутиве Linux сделала тысячи ключей уязвимыми для атак полным перебором?
  3. Почему фраза из двенадцати слов — это ровно 128 бит энтропии плюс контрольная сумма?

Исследование

  1. Приватный ключ Bitcoin — это случайное целое число от 1 до n-1, где n — порядок генератора кривой secp256k1. Это пространство содержит примерно 1,158 × 10^77 возможных значений. Чтобы обеспечить 128-битную безопасность против атак на дискретный логарифм, ключ нужно выбирать из этого диапазона равномерно. Если процесс выбора предсказуем или смещён, эффективная энтропия падает, и объём работы для злоумышленника сокращается до малой доли теоретического максимума.
  2. Энтропия измеряет неопределённость в битах. Мнемоническая фраза BIP39 из двенадцати слов кодирует 128 бит истинной случайности плюс четырёхбитную контрольную сумму, полученную из SHA-256. Фраза из двадцати четырёх слов несёт 256 бит. Последнее слово отчасти служит детектором ошибок: случайный набор слов редко образует корректную фразу, потому что контрольная сумма не сойдётся. Такая структура сокращает число незамеченных ошибок при переписывании — при условии, что исходная энтропия была настоящей.
  3. Случайность, созданная человеком, заведомо слаба. В фразах, которые выбирают люди, гораздо меньше энтропии, чем кажется, потому что люди предпочитают знакомые слова, цитаты и шаблоны. Злоумышленники пользуются этим, проводя словарные атаки на ключи, полученные из запоминающихся фраз, — так называемые «брейн-кошельки» (brain wallets). Vasek, Bonneau и др. (2016) задокументировали, как такие кошельки регулярно опустошались, часто вскоре после пополнения, поскольку злоумышленники могли проверять огромные списки вероятных фраз.
  4. Ошибки программной реализации не раз подрывали генерацию ключей. Изменение OpenSSL в Debian (действовало в 2006–2008 годах, раскрыто в DSA-1571) оставило идентификатор процесса почти единственным источником вариативности, поэтому для каждого типа и размера ключа существовало всего около 32 768 возможных ключей. В августе 2013 года уязвимость SecureRandom в Android привела к тому, что некоторые биткоин-кошельки повторно использовали нонсы подписей, — это раскрыло приватные ключи и сделало возможными кражи. Эти инциденты показывают, что источники энтропии должны быть криптографически стойкими и не зависеть от состояния системы.
  5. Исследование Randstorm, опубликованное в 2023 году компанией Unciphered, показало, что веб-кошельки эпохи BitcoinJS (примерно 2011–2015 годы) использовали слабые генераторы случайных чисел, из-за чего пользователи были уязвимы к атакам с восстановлением ключей. Современные аппаратные кошельки при инициализации собирают энтропию из нескольких внутренних источников и показывают полученную мнемоническую фразу по одному слову. После записи эти слова становятся единственным ключом к средствам; их потеря означает безвозвратную утрату доступа.
  6. Качественную энтропию дают криптографические генераторы случайных чисел операционной системы (CSPRNG), аппаратные RNG или физические процессы, например броски игральных костей (с оговорками о смещении). CSPRNG смешивают шум от системных событий и аппаратных датчиков, получая непредсказуемые биты. Если результат лежит в диапазоне от 1 до n−1, он становится действительным приватным ключом; в противном случае генератор повторяет попытку с новыми случайными данными. Этот цикл обеспечивает равномерное распределение по всему порядку кривой.

Ключевые факты

  • Приватный ключ Bitcoin рассчитан на 128-битную безопасность, что требует равномерного выбора из ~1,158 × 10^77 возможных значений.
  • Фраза BIP39 из двенадцати слов кодирует 128 бит энтропии плюс четырёхбитную контрольную сумму; двадцать четыре слова кодируют 256 бит.
  • Ошибка OpenSSL в Debian (2006–2008, DSA-1571) сократила пространство ключей примерно до 32 768 вариантов на каждый тип и размер ключа.
  • Уязвимость SecureRandom в Android, раскрытая в августе 2013 года, заставила некоторые кошельки повторно использовать нонсы подписей, из-за чего ключи оказались доступны для кражи.
  • Исследование Randstorm (опубликовано в 2023 году) выявило слабую случайность в веб-кошельках эпохи BitcoinJS, использовавшихся примерно в 2011–2015 годах.
  • Ключи, полученные из запоминающихся фраз («брейн-кошельки»), злоумышленники регулярно находили и опустошали.

Упражнение девять, шесть, три, один

9СобратьПеречислите 9 источников цифровой или физической случайности. Укажите механизм (например, джиттер системных часов, тепловой шум) и известные исторические уязвимости, связанные с каждым из них.
6СгруппироватьРаспределите 9 источников по 6 категориям в зависимости от качества энтропии: криптографически стойкие CSPRNG, аппаратные RNG, физические процессы, созданные человеком, ошибочные программные реализации и прочие.
3Выделить главноеСведите 6 групп к 3 критериям оценки того, подходит ли источник случайности для генерации приватного ключа Bitcoin.
1КристаллизоватьНапишите одно предложение о том, почему равномерное распределение по всему порядку кривой n — непреложное условие безопасности ключа.

Проверка фактов

Даты, цифры и утверждения были проверены по приведенным ниже опубликованным источникам.

Открыть в интерактивной академии →

EN PT ES ZH JA KO DE FR MS