478 / 736H

Cryptographic Entropy

Криптографическая энтропия: почему секрет трудно угадать

Длинная и сложная запись не обязательно безопасна. Для кошелька прежде всего важно, как появился его секрет и что о нём может знать кто-то другой.

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

Представьте секрет, созданный из даты и времени открытия кошелька. После кодирования он может выглядеть как длинная смесь символов. Но если атакующий знает примерное время и способ, ему может хватить перебора небольшого набора вариантов. Более длинная запись не обязательно усложнит ему работу. Поэтому RFC 4086 различает непредсказуемость и лишь видимость случайности. Оценить энтропию, просто взглянув на один ключ, нельзя: нужно знать, как он появился. [3]

Бит — основная единица записи данных со значением 0 или 1. Само количество битов не показывает, сколько неопределённости остаётся у атакующего. Когда кошелёк создаёт Seed Phrase по BIP39, сначала нужны случайные входные данные. Только затем он переводит их в слова. Для 12 слов это 128 битов входа и 4 бита контрольной суммы; для 24 слов — 256 битов входа и 8 контрольных битов. Контрольная сумма помогает обнаружить некоторые ошибки записи, но не добавляет энтропии: её вычисляют из уже существующего входа. Поэтому более длинный список не исправит плохо сгенерированную случайность. Важен способ создания резервной копии, а не только число слов. [4]

Кошельку не нужно выполнять новое физическое измерение для каждого следующего байта, то есть группы из 8 битов. Он может использовать криптографический генератор DRBG — алгоритм, создающий новые значения из тайного начального состояния. При правильном устройстве и использовании предсказать результаты без знания состояния трудно. При этом алгоритм детерминирован: одинаковое полное состояние и одинаковые входы дают одинаковое продолжение. Больше созданных байтов не означает автоматически больше новой физической энтропии. Важны и качество начального входа, и защита внутреннего состояния. [2]

Хеш-функция вычисляет из данных отпечаток фиксированной длины, который может выглядеть случайным. Но тот, кто знает вход, может вычислить тот же результат. Полностью известные данные не становятся от этого секретом. Технический термин conditioning означает обработку, которая может уменьшить неравномерность и сосредоточить уже имеющуюся неопределённость. Это не создание секрета из ничего. Нельзя и автоматически складывать энтропию нескольких источников: они могут быть связаны и давать одну и ту же информацию. [1] [3]

Электронный источник шума может сломаться или изменить поведение под влиянием окружающих условий. Поэтому NIST SP 800-90B требует проверок необработанного шума при запуске и во время работы, ещё до последующей обработки. Эти проверки ищут признаки сбоев; они не доказывают безопасность каждого результата. Разработчик должен понимать источник, его ограничения и возможные зависимости. Об обнаруженном сбое нужно сообщить приложению, использующему данные. При устойчивой неисправности источник должен прекратить выдачу результатов. Самого наличия чипа с названием «генератор случайности» недостаточно. [1]

Если атакующий получает внутреннее состояние DRBG, то в зависимости от конструкции может предсказывать следующие результаты. Для возвращения непредсказуемости требуется достаточно новых данных, неизвестных атакующему; такое добавление энтропии называют reseeding. Простое продолжение вычислений или добавление известного времени не гарантирует этой защиты. Не путайте и восстановление генератора с защитой прежних средств: восстановленный генератор не делает уже раскрытый ключ недействительным. [2]

Статистический тест может показать, например, подозрительные повторения. Но он не определит наверняка, знает ли атакующий тайный вход или способ предсказать результат. NIST SP 800-22 прямо указывает на это ограничение. Тесты — полезная часть проверки, а не замена анализа всего генератора. Файл с якобы случайными числами сам по себе не доказывает безопасность кошелька. [5]

Новичку не нужно вручную вычислять энтропию своего кошелька. Полезнее искать документированный процесс создания: откуда берётся случайность, как её обрабатывают, как реагируют на ошибки и защищают секреты. NIST SP 800-90C как раз рассматривает объединение источников энтропии и DRBG в полный генератор. Но ссылка на стандарт или известный чип ещё не доказывает, что конкретная версия кошелька использует его правильно. Важны подтверждённые свойства реальной реализации. [1] [6]

Для полной картины прочитайте эту статью вместе с Entropy Bit, CSPRNG, Dice Roll Entropy, Private Key. На эту статью также ссылаются BIP85, Dice Roll Entropy, Entropy Bit, Brute Force Search Space.

DOC · 001NIST SP 800-90B — Entropy source design and health testsСпецификация DOC · 002NIST SP 800-90A Rev. 1 — Deterministic generation and reseedingСпецификация DOC · 003RFC 4086 — Unpredictability and source limitationsСпецификация DOC · 004BIP39 — Entropy, checksum and mnemonic encodingСпецификация DOC · 005NIST SP 800-22 Rev. 1a — Limits of statistical testingДокументация DOC · 006NIST SP 800-90C — Complete random bit generator constructionsСпецификация
Обновлено: Сначала источники · Не является инвестиционной рекомендацией