Калькулятор энтропии для приватных ключей
Энтропия — это ключевой фактор безопасности приватных ключей. Для блокчейн-активов рекомендуется минимум 128 бит энтропии. Введите значение и узнайте, сколько возможных комбинаций это даст.
Вы когда-нибудь задумывались, что делает ваш приватный ключ неподделываемым? Это не сложный пароль. Не секретная фраза. Это - чистая случайность. И если эта случайность слабая, ваш биткоин, эфир или любой другой актив - уже не ваш. Это как оставить ключ от дома на улице, но в надежде, что никто не заметит, что он сделан из сахара.
Приватный ключ - это секрет, который позволяет вам тратить цифровые активы. Он представляет собой огромное случайное число, обычно 256 битов длиной. Для Bitcoin и большинства блокчейнов это число генерируется в соответствии со стандартом secp256k1. Но как именно оно появляется? Не из магии. Не из алгоритма. Из энтропии.
Что такое энтропия и почему она важнее алгоритма
Многие думают, что безопасность приватного ключа зависит от того, какой алгоритм используется. RSA? ECC? SHA-256? Нет. Алгоритмы - это просто правила. Они одинаковы для всех. Проблема - в входе. Если вы начнёте с предсказуемого числа, даже самый мощный алгоритм не спасёт. Это как строить дом на песке и надеяться, что он не рухнет.
В 2012 году исследователи провели масштабный скан интернета и обнаружили, что 0,75% SSL-сертификатов и SSH-ключей были идентичными. Почему? Потому что устройства, включая роутеры и серверы, генерировали ключи сразу после включения - когда система ещё не накопила достаточно случайных данных. В некоторых случаях 62% дубликатов приходились на устройства одного производителя. Это не ошибка. Это системная проблема.
Национальный институт стандартов и технологий (NIST) требует для ключа secp256k1 минимум 128 бит энтропии. Это значит: вы не можете просто взять число от 1 до 1000. Нужно 128 бит - это 2^128 возможных вариантов. Сколько это? Больше, чем атомов в наблюдаемой вселенной. Если энтропии меньше - вы не защищены. Вы просто играете в рулетку с атакующим, который знает, где шарик остановится.
Где берутся случайные числа? Не из головы
Компьютеры - детерминированные машины. Они не умеют быть случайными. Поэтому им нужны внешние источники шума. Вот как это работает на Linux:
- Время между нажатиями клавиш - 0,5-1,5 бита на нажатие
- Интервалы между аппаратными прерываниями (когда мышь двигается, диск читает данные)
- Температура процессора, шум звуковой карты, задержки сети
Все эти данные собираются в «пул энтропии» и хешируются через SHA-1 или SHA-256. Результат - это криптографически безопасный генератор псевдослучайных чисел (CSPRNG). Но есть подвох: на старте системы энтропии мало. Вы можете проверить это в терминале: cat /proc/sys/kernel/random/entropy_avail. Если там 50-100 - это катастрофа. Норма - больше 2048.
На серверах без клавиатуры, мыши или экрана - в облаке, в контейнерах, на Raspberry Pi - энтропии вообще может не быть. Именно поэтому AWS Lambda и другие функции в облаке иногда генерируют слабые ключи при «холодном старте». Уже были случаи, когда 10 000 ключей, сгенерированных на одном сервере сразу после запуска, давали 17 дубликатов. Это не теория. Это реальный инцидент, описанный на Reddit в 2021 году.
Чем отличаются /dev/random и /dev/urandom
В Linux есть два интерфейса для генерации случайных чисел. Они выглядят похоже, но работают по-разному.
/dev/random - блокируется, когда энтропии мало. Это кажется безопаснее. Но на практике - это просто тормоз. Ваша программа может ждать минуту, пока система «накопит» достаточно шума. На виртуальной машине - это может не произойти вообще.
/dev/urandom - никогда не блокируется. Он использует энтропию, которую уже собрал, и «размазывает» её через криптографический алгоритм. После того как система получила хотя бы 128 бит энтропии (что происходит через несколько секунд после загрузки), /dev/urandom становится настолько же безопасным, как /dev/random. Это доказано NIST и большинством криптографов. LibreSSL и другие современные библиотеки уже перешли на /dev/urandom по умолчанию - и это правильное решение.
Самый безопасный способ сегодня - использовать системный вызов getrandom() (доступен с ядром Linux 3.17). Он автоматически выбирает лучший источник и не блокируется, если энтропии достаточно. Это то, что используют Google, Cloudflare и Apple.
Как компании решают проблему энтропии
Cloudflare - одна из немногих компаний, которая пошла дальше. У них в офисе стоят лампы с лавой. Камеры снимают их движение - и каждая кадр даёт 1024 бита энтропии. Это называется LavaRand. Каждую секунду они генерируют тысячи ключей - и ни один не повторяется. Это не шоу. Это криптография.
Компании, которые работают с финансами, используют аппаратные модули безопасности (HSM). Это физические устройства, встроенные в серверы, которые генерируют ключи внутри защищённого чипа. Они используют физические источники шума - квантовый шум, термальный шум, радиоактивный распад. Стоят такие устройства от 15 000 до 50 000 долларов. Но они надёжны. В 2023 году 78,3% компаний из списка Fortune 500 используют HSM для хранения корневых ключей.
Для обычных пользователей - это избыточно. Но для разработчиков, создающих кошельки, смарт-контракты или блокчейн-сервисы - это обязательный стандарт. Если вы пишете код, который генерирует ключи - вы обязаны использовать проверенные библиотеки: libsodium, OpenSSL (с правильной настройкой), или платформенные сервисы вроде AWS KMS.
Что делать, если вы разработчик или пользователь
Если вы просто используете кошелёк - не волнуйтесь. Хорошие кошельки (Ledger, Trezor, MetaMask) делают всё за вас. Они используют HSM или проверенные CSPRNG. Ваша задача - не копировать приватный ключ в текстовый файл и не хранить его на облаке.
Если вы разрабатываете систему - вот что нужно сделать:
- Никогда не используйте
Math.random()в JavaScript илиrand()в C - это не криптографически безопасно. - Используйте
getrandom()на Linux,BCryptGenRandom()на Windows,SecRandomCopyBytes()на macOS/iOS. - На серверах без интерактивного ввода - установите
havegedилиjitterentropy. Это программы, которые генерируют энтропию из задержек процессора. - Проверяйте энтропию перед генерацией ключа. Если
entropy_avail < 2048- ждите или используйте внешний источник (например, NIST Randomness Beacon). - Тестируйте. Сгенерируйте 10 000 ключей. Проверьте, есть ли дубликаты. Если есть - вы делаете что-то не так.
Библиотеки вроде OpenSSL имеют плохую документацию. Их RAND-функции требуют ручного семенирования. Libsodium - проще, понятнее и безопаснее. В 2022 году 4,5 из 5 звёзд получили только её документы среди 150 разработчиков, опрошенных Linux Foundation.
Будущее: проверяемая случайность
Даже если вы используете лучший CSPRNG, как вы можете быть уверены, что ключ действительно сгенерирован правильно? Кто-то мог подменить ваш генератор. Это не теория. В 2013 году выяснилось, что NIST рекомендовала алгоритм Dual_EC_DRBG, который, как оказалось, содержал бэкдор от NSA.
Сейчас появляются технологии, которые позволяют доказать, что ключ был сгенерирован правильно, не раскрывая сам ключ. Это называется KEGVER - Key Generation with Verifiable Randomness. Cloudflare уже использует его в своей системе выдачи сертификатов. Это как получить чек-лист от производителя: «Да, ключ сгенерирован из 128 бит энтропии, и мы можем это доказать, не показывая вам сам ключ».
Инженеры IETF работают над стандартом «Entropy as a Service» - когда вы можете запросить энтропию из надёжного внешнего источника, например, из NIST Randomness Beacon, который выдаёт 512 бит чистой случайности каждые 60 секунд. Это может стать стандартом для блокчейн-узлов, бирж и криптографических систем.
Самый большой риск - это не хакеры, а лень
В 2023 году исследование Snyk показало, что 63,7% открытых проектов правильно инициализируют генераторы случайных чисел. Звучит хорошо? Но 36,3% - это миллионы строк кода, которые могут быть взломаны. Это не ошибка. Это пренебрежение. Это «я просто скопировал код с Stack Overflow».
Самый частый сценарий: разработчик пишет смарт-контракт. Ему нужно сгенерировать приватный ключ. Он находит пример на GitHub. Там используется Math.random(). Он не думает. Код деплоится. Через месяц кто-то находит дубликат ключа. И забирает все токены.
Это не про техническую сложность. Это про дисциплину. Про то, чтобы не экономить на случайности. Потому что случайность - это единственное, что делает криптографию безопасной. Алгоритмы можно взломать. Протоколы можно обойти. Но если энтропия настоящая - атака невозможна.
Ваш приватный ключ - это не цифра. Это ваша цифровая жизнь. И если вы не заботитесь о том, как он родился - вы уже потеряли его. Просто не знаете об этом.
Sergey Kramer декабря 7, 2025
Это как говорить, что замок надёжный, если ключ сделан из сахара 😅
Я тут думал - а если у меня в кошельке 0.001 BTC, и он сгенерирован на старом роутере 2012 года - я уже потерян? Или это как лотерея, где шанс один к квинтиллиону, но всё равно играть стоит?
Спасибо за пост - реально открыло глаза. Я думал, что главное - не хранить ключ в облаке, а тут оказывается, он может быть вообще не ключом, а просто числом, которое уже кто-то знает.