Как генерируются эритропоэтические адреса?
Какими критериями должен удовлетворять действительный адрес ethereum? Это просто случайное число в шестнадцатеричном формате? Или это нужно выводить определенным образом, согласно некоторому криптографическому алгоритму? Какие алгоритмы и стандарты используются для создания пары ключей?
2 ответа
Недавно эта статья дошла до моего сведения, что является более глубокой и технической, чем моя более доступная версия ниже. Он также исследует, как создать его самостоятельно. Я очень рекомендую: https://kobl.one/blog/create-full-ethereum- пара ключей-и-адрес /
Из Желтая бумага
Существует три основных шага, чтобы получить от private -> адрес:
-
Создайте случайный закрытый ключ (64 (шестнадцатеричные) символы /256 бит /32 байта)
-
Вывести открытый ключ из этого закрытого ключа (128 (шестнадцатеричных) символов /512 бит /64 байта)
-
Вывести адрес из этого открытого ключа. (40 (шестнадцатеричных) символов /160 бит /20 байт)
Несмотря на то, что многие люди называют адрес открытым ключом, на самом деле это не так в Ethereum. Существует отдельный открытый ключ, который действует как посредник, которого вы никогда не увидите, если вы не задумаетесь о файле JSON для предварительного кошелька.
1. Создание закрытого ключа
Закрытый ключ - 64 шестнадцатеричных символа. Гипотетически каждая отдельная строка из 64 гексагона содержит секретный ключ Ethereum (см. Ссылку вверху, почему это не совсем точно). , который будет иметь доступ к учетной записи. Если вы планируете создавать новую учетную запись, вы должны быть уверены, что они засеяны надлежащим RNG. Как только у вас есть эта строка.
2. Частный ключ -> Открытый ключ
Это трудно и вне меня. Есть что-то с алгоритмом цифровой подписи с эллиптической кривой (ECDSA) и т. Д. Но в итоге вы получаете открытый ключ с 64 байтами.
3. Открытый ключ -> Адрес
-
Начните с открытого ключа (128 символов /64 байта)
-
Возьмите хэш Keccak-256 открытого ключа. Теперь вы должны иметь строку, которая составляет 64 символа /32 байта. (примечание: SHA3-256 в конечном итоге стал стандартом, но Ethereum использует Keccak)
-
Возьмите последние 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]
. - Желтая бумага
Эфирные адреса - это хэши открытого ключа. Таким образом, чтобы сгенерировать его, вы должны сначала сгенерировать закрытый ключ (см. Каков подход к вычислению адреса Ethereum из 256-битного закрытого ключа? ) Закрытый ключ является случайным, но открытый ключ и, следовательно, его хэш используется, поскольку адрес не является случайным.
Чтобы проверить адрес и, следовательно, узнать формат, обратитесь к Как проверить, действителен ли адрес Ethereum?