Как генерируются эритропоэтические адреса?

Какими критериями должен удовлетворять действительный адрес ethereum? Это просто случайное число в шестнадцатеричном формате? Или это нужно выводить определенным образом, согласно некоторому криптографическому алгоритму? Какие алгоритмы и стандарты используются для создания пары ключей?

82 голоса | спросил max 3 Mayam16 2016, 11:40:53

2 ответа


112

Недавно эта статья дошла до моего сведения, что является более глубокой и технической, чем моя более доступная версия ниже. Он также исследует, как создать его самостоятельно. Я очень рекомендую: https://kobl.one/blog/create-full-ethereum- пара ключей-и-адрес /


Из Желтая бумага

 желтая бумага

Существует три основных шага, чтобы получить от private -> адрес:

  1. Создайте случайный закрытый ключ (64 (шестнадцатеричные) символы /256 бит /32 байта)

  2. Вывести открытый ключ из этого закрытого ключа (128 (шестнадцатеричных) символов /512 бит /64 байта)

  3. Вывести адрес из этого открытого ключа. (40 (шестнадцатеричных) символов /160 бит /20 байт)

Несмотря на то, что многие люди называют адрес открытым ключом, на самом деле это не так в Ethereum. Существует отдельный открытый ключ, который действует как посредник, которого вы никогда не увидите, если вы не задумаетесь о файле JSON для предварительного кошелька.

1. Создание закрытого ключа

Закрытый ключ - 64 шестнадцатеричных символа. Гипотетически каждая отдельная строка из 64 гексагона содержит секретный ключ Ethereum (см. Ссылку вверху, почему это не совсем точно). , который будет иметь доступ к учетной записи. Если вы планируете создавать новую учетную запись, вы должны быть уверены, что они засеяны надлежащим RNG. Как только у вас есть эта строка.

2. Частный ключ -> Открытый ключ

Это трудно и вне меня. Есть что-то с алгоритмом цифровой подписи с эллиптической кривой (ECDSA) и т. Д. Но в итоге вы получаете открытый ключ с 64 байтами.

3. Открытый ключ -> Адрес

  1. Начните с открытого ключа (128 символов /64 байта)

  2. Возьмите хэш Keccak-256 открытого ключа. Теперь вы должны иметь строку, которая составляет 64 символа /32 байта. (примечание: SHA3-256 в конечном итоге стал стандартом, но Ethereum использует Keccak)

  3. Возьмите последние 40 символов /20 байтов этого открытого ключа (Keccak-256). Или, другими словами, удалите первые 24 символа /12 байтов. Этими 40 символами /20 байтами являются адрес. Когда префикс 0x, он становится длиной 42 символа.

Определения

Адрес: . Адрес Ethereum представляет собой учетную запись. Для EOA адрес выводится как последние 20 байтов открытого ключа, контролирующего учетную запись, например, `cd2a3d9f938e13cd947ec05abc7fe734df8dd826. Это шестнадцатеричный формат (нотация 16-го уровня), который часто указывается явно, добавляя 0x к адресу. Web3.js и консольные функции принимают адреса с или без этого префикса, но для прозрачности мы поощряем их использование. Поскольку каждый байт адреса представлен двумя шестнадцатеричными символами, префиксный адрес имеет длину 42 символа. Некоторые приложения и API также предназначены для внедрения новой схемы адресов с включенной контрольной суммой, введенной в кошелек Mist Ethereum, начиная с версии 0.5.0. - Документы Homestead

Закрытый ключ: Случайно выбранное положительное целое число (представленное как байтовый массив длиной 32 в форме большого конца) в диапазоне [1, secp256k1n − 1]. - Желтая бумага

ответил tayvano 5 Mayam16 2016, 05:45:27
8

Эфирные адреса - это хэши открытого ключа. Таким образом, чтобы сгенерировать его, вы должны сначала сгенерировать закрытый ключ (см. Каков подход к вычислению адреса Ethereum из 256-битного закрытого ключа? ) Закрытый ключ является случайным, но открытый ключ и, следовательно, его хэш используется, поскольку адрес не является случайным.

Чтобы проверить адрес и, следовательно, узнать формат, обратитесь к Как проверить, действителен ли адрес Ethereum?

ответил Nicolas Massart 3 Maypm16 2016, 12:33:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132