Биткоин генерировать

В различных местах в Биткойне важно генерировать безопасные пароли/парольные фразы. Безопасность особенно важна в Биткойне, потому что, если ваш BTC украден, часто нет никакого средства защиты. Биткойн-транзакции не могут быть отменены.

Сила

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

Примеры включают в себя:

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

  • Аппаратный пин-код кошелька. Злоумышленнику нужен как аппаратный кошелек, так и ваш PIN-код.

Все советы, которые вы когда-либо слышали о безопасности паролей, были для автономного использования пароля.

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

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

Это не нормальная ситуация за пределами биткойна.

Примеры ключей, которые могут быть взломаны глобальным поиском:

  • Семя/мнемоника HD кошелька.
  • Пароль к файлу кошелька, который стал общедоступным или к которому злоумышленник получил доступ иным способом.
  • Вход в (Предупреждение: очень настоятельно рекомендуется не пытаться использовать кошелек мозга.)

Пример ключей, которые могут быть взломаны целевым поиском:

  • Пароль к файлу кошелька, который может стать общедоступным или к которому злоумышленник может получить доступ.
  • Вход в безопасный

Стандарты для автономных парольных фраз

Между 64 и 80 битами энтропии кажется разумным. Пароль должен быть абсолютно случайным (см. Более поздние разделы о генерации). Аппаратные кошельки имеют дополнительную защиту, и это нормально, что они часто позволяют только короткий ПИН-код.

Это соответствует следующим длинам пароля/парольной фразы:

  • Только цифры: 20-25 цифр
  • Шестнадцатеричный код: 16-20 символов
  • Все строчные или все заглавные буквы: 14-18 символов

  • Все строчные или все заглавные буквы + цифры: 13-16 символов
  • Буквы смешанного регистра: 12-15 символов
  • Буквы смешанного регистра + цифры: 11-14 символов
  • Все стандартные символы клавиатуры: 9-11 символов
  • Слова для игры в кости: 5-7 слов
  • Случайные английские слова (список слов из 100 000 слов): 4-5 слов

Стандарты для онлайн-кодовых фраз

Обычно вам не нужно лично генерировать онлайн-кодовую фразу. Наиболее распространенным случаем онлайн-парольной фразы в Биткойне является мнемоника для HD-кошелька, но хороший кошелек должен безопасно генерировать ее для вас (это несколько слов мнемоники, которые большинство кошельков говорят вам записать при первом запуске), предполагая, что она не была подделана.

Если вам нужно вручную сгенерировать онлайн-кодовую фразу, то потребуется 128 бит энтропии. Кодовая фраза должна быть абсолютно случайной (см.

Это соответствует следующим длинам пароля/парольной фразы:

  • Только цифры: 39 цифр
  • Шестнадцатеричный: 32 символа
  • Все строчные или все прописные буквы: 28 символов
  • Все строчные или все прописные буквы + цифры: 25 символов
  • Смешанные регистровые буквы: 23 символа
  • Смешанные регистровые буквы + цифры: 22 символа
  • Все стандартные символы клавиатуры: 20 символов
  • Diceware слова: 10 слов
  • Случайные английские слова (100 000 слов): 8 слов

Риски автоматической генерации посевной/парольной фразы

Автоматическая генерация бумажника/парольной фразы защищена только с помощью:

  1. Верное программное обеспечение кошелька: оно не было злонамеренно подделано. Если вы сами не скомпилировали программное обеспечение кошелька на надежном компьютере с надежным компилятором, надежный исходный код не является гарантией надежного двоичного файла. Подробнее см. взлом Кена Томпсона. Кошельки с детерминированным процессом сборки (например, Bitcoin Core) более устойчивы к атакам.
  1. Верный ГСЧ: ГСЧ (генератор случайных чисел) могут быть реализованы в программном, аппаратном или обоих. Программное обеспечение кошелька полагается на безопасность RNG, чтобы безопасно генерировать закрытые ключи вашего кошелька. Небезопасный RNG может создавать ключи кошелька, которые впоследствии могут быть воссозданы злоумышленником, генерируя psuedo-случайность, которая будет казаться статистически неотличимой от истинной случайности, но все же будет предсказуемой для продвинутого злоумышленника. RNG может стать небезопасным в результате злонамеренного ослабления или непреднамеренной ошибки. Этот режим отказа является общим для любой процедуры генерации кошелька, в которой истинная случайность используемого источника энтропии не может быть проверена.
  1. Верное оборудование: программное обеспечение выполняется аппаратным обеспечением. Неверное оборудование может неверно выполнять верное программное обеспечение. Это было бы особенно трудно обнаружить для вычислений, где конечный результат недетерминирован, например, неверное аппаратное выполнение процедур генератора случайных чисел. Риск такой атаки возрастает из-за непрозрачности реализации аппаратных средств и централизованного капиталоемкого характера производства аппаратных средств, что делает аппаратные компании более уязвимыми для принуждения, особенно в недемократических странах, где в настоящее время производится большая часть аппаратных средств.

Для приложений с высоким риском пара честных костей может обеспечить более простой и проверяемый безопасный источник энтропии.

Как не генерировать парольные фразы

Люди очень, очень плохо генерируют парольные фразы самостоятельно. Не пытайся. Если на каком-либо этапе процесса генерации парольных фраз ваш мозг используется для того, чтобы выбрать что-то наугад или рандомизировать что-то, то вы делаете это неправильно.

Не берите слова из книги или другой работы. Слова должны быть абсолютно случайными.

Не используйте метод генерации пароля xkcd.

Использование кубиков

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

Безопасные кости

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

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

Генерация паролей

Чтобы сгенерировать пароль, запишите список допустимых символов и последовательно пронумеруйте каждый символ, начиная с 1. Например, если вы хотите сгенерировать 4-значный PIN-код, вы должны создать такой список:

1 0 2 1 ... 10 9

Если бы вы хотели сгенерировать пароль с символами [a-zA-Z], вы бы создали такой список:

1 а 2 б ... 52 Z

Теперь вам нужно выяснить, сколько кубиков вам нужно будет бросить. Все ваши кости должны иметь одинаковое количество сторон. Если в вашем списке символов есть C символов, а каждая из ваших костей имеет S сторон, то вам нужно броситьS(C) кубиков, округленных вверх. Например, log6(52) — это примерно 2.2, который вы округляете до 3. Итак, если ваш список персонажей содержит 52 символа, то вам нужно бросить 3 6-сторонние кости.

Здесь предполагается, что кости пронумерованы от 1 до S. Если это не так, то вы должны создать систему для перевода результатов игры в кости в диапазон от 1 до S. Например, если вы имеете дело с 10-гранными кубиками, помеченными от 0 до 9, то вы можете добавить 1 к броску.

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

Предположим, что d0-это крайняя правая игральная кость, которую вы бросили, d1-вторая от крайнего правого кубика, которую вы бросили, и т. д. Тогда случайное число:

1 + [(d0 — 1) × S0] + [(d1 — 1) × S1] + [(d2 — 1) × S2] + …

Например, если мы бросили 316 с 6-сторонними кубиками, это становится:

1 + [(6 — 1) × 60] + [(1 — 1) × 61] + [(3 — 1) × 62]
= 1 + [5 × 1] + [0 × 6] + [2 × 36]
= 1 + 5 + 0 + 72
= 78

Таким образом, наш случайный символ будет 78 символом в списке.

Важно: если ваш номер больше, чем вам нужно, то вы должны полностью перепробовать этот символ. Не пытайтесь (Только для авантюрных: вы можете безопасно уменьшить количество повторных бросков, сделав вид, что у кубика высшего порядка меньше сторон. Например, на 6-стороннем штампе скажите, что 1&4 = 1, 2&5 = 2, 3&6 = 3; или что 1&2&3 = 1 и 4&5&6 = 2. все равно умножьте его на соответствующую степень 6, а не на 3 или 2. Но матрица должна быть разделена поровну, вы должны убедиться, что максимально возможное значение все еще больше или равно самому высокому значению символа, и вы должны использовать точно такую же обработку матрицы высокого порядка на протяжении всего процесса генерации.)

Важно: существует множество различных способов получить случайное число из нескольких кубиков, но они, как правило, неслучайны. Например, добавление кубиков будет очень неслучайным. Вышеописанный метод обеспечивает случайное распределение, если сами кости случайны и если они упорядочены случайным образом.

Если пароль имеет длину L символов, то пароль имеет лог2(CL) бит энтропии.

Генерация парольных фраз

Как и выше, но используйте список слов вместо списка символов.

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

Генерация ключей, семян и случайных чисел (дополнительно)

Этот раздел в основном предназначен для программистов и продвинутых пользователей.

Предупреждение: считается небезопасным напрямую обращаться с ключами Bitcoin, так как это может привести к ошибкам и часто приводит к тому, что люди отправляют BTC в небытие.

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

Во-первых, решите, сколько битов безопасности вы хотите. 128 бит, вероятно, безопасны для большинства вещей. Мы будем называть это значение B.

Затем бросьте логS(2B) кубиков, округленных в большую сторону, где S — количество сторон на кубик. Например, с 6-сторонними кубиками вам нужно будет бросить 50 кубиков. Поместите результаты прямо рядом друг с другом в строку текста, так что, например, если вы бросаете 3, 2, 5, 6, 1, вы начинаете свою строку как Если у ваших кубиков достаточно сторон, чтобы получить двузначные числа, поставьте перед однозначными числами начальный ноль.

Затем хэшируйте свою строку командой типа echo . Полученный хэш-это ваше случайное число. Если вы хотите 128-битный или 512-битный номер, используйте sha128sum или sha512sum соответственно. Если вы хотите какое-то промежуточное количество битов, используйте следующий больший размер хэша, а затем отрежьте число, где вам это нужно.

Вы можете генерировать любой размер случайного числа, комбинируя выходы. Например, предположим, что вам нужно 768 бит случайности, и по какой-то причине вы можете использовать только sha256sum. Вы можете сделать это, как:

$ echo $ echo 6d7f302e01da0a7131377d57ee93aaff0b26ebd25e52c7dea0a5eeddabac151c - $ echo 

Затем объедините все эти хэши, чтобы получить окончательное случайное число. В этом примере результат cf6a25b...52b855.

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

Если вы хотите сгенерировать число в диапазоне с размером диапазона, который не является степенью двойки, выберите следующую по величине степень двойки и выберите правильное количество битов на основе этого. Если полученное число слишком велико, отбросьте все эти биты и возьмите новые из бесконечного потока случайных битов. Не используйте оператор по модулю, так как это приводит к смещению. Например, если вы хотите сгенерировать число от 0 до 9 (размер диапазона = 10), выберите следующую-более высокую степень 2, 16. Если ваш случайный поток начинается с 0xA52F…, захватите 4 бита (log2(16) = 4), давая 0xA = 10. Это находится за пределами диапазона, поэтому отбросьте эти биты и перейдите к следующим 4 битам, 0x5 = 5. это находится в диапазоне, поэтому конечный результат равен 5.

При создании необработанных Биткойн-закрытых ключей: хотя крайне маловероятно, что это произойдет со случайным 256-битным числом, Биткойн-закрытые ключи не могут быть равны 0 или больше, чем 0xfffffffff FFFFFFFF ffffffff ffffffff BAAEDCE6 AF48A03B BFD25E8C D0364140. При создании закрытого ключа биткойна вы должны убедиться, что эти условия соблюдены; если нет, повторно запустите закрытый ключ. Некоторые программы могут позволить вам использовать эти недействительные закрытые ключи, но это будет небезопасно.

Использование компьютера

Компьютеры хороши в создании безопасных случайных чисел, но вы должны быть осторожны, чтобы использовать правильные команды. Многие команды, функции языка программирования и фрагменты, которые вы найдете в интернете, дадут небезопасные случайные числа, которые выглядят случайными, но предсказуемы. Например, функция C rand, модуль Python random и переменная Windows %RANDOM% являются небезопасными источниками случайных чисел.

Не берите пароли ни от чего в веб-браузере, даже если на странице написано, что он использует чисто клиентский JavaScript

Линукс

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

Следующая команда сгенерирует случайный пароль из 20 символов:

Change -head-count=20 для изменения длины пароля и [a-zA-Z0-9]\|[[:punct:]] для изменения набора символов. Обратите внимание, что эта команда никогда не будет использовать символы вне ASCII, даже если ваш шаблон grep выберет такие символы.

Чтобы сгенерировать парольную фразу из слов, создайте файл под названием words с одним словом на строку и окончаниями строк в стиле Unix и запустите:

shuf --random-source=/dev/urandom --repeat --head-count=7 слов | tr '\n' ' '

Change -head-count=7 для изменения количества слов.

Обратите внимание, что при получении вашего списка слов существует риск того, что злоумышленник передаст вам список слов, в котором есть дублированные или очень похожие слова. Например, список слов может выглядеть так, как будто он содержит 1 миллион слов, но на самом деле это одни и те же 1000 слов, повторяемых снова и снова. Или все слова могут иметь букву И т.д. Это может привести к тому, что вы значительно переоцениваете безопасность своей парольной фразы. Поэтому вы должны получить свой список слов из надежного источника.

Windows

KeePass включает в себя генератор паролей, хотя и не генератор парольных фраз на основе слов.

(Если кто-то знает о некоторых лучших, отредактируйте эту страницу, чтобы добавить ее.)

См. также

  • zxcvbn — реалистичная оценка силы парольной фразы