Согласно этому сообщению о том, как получить адрес Ethereum из открытого ключа:
Возьмите последние 40 символов/20 байт этого открытого ключа (Keccak-256). Или, другими словами, отбросить первые 24 символа/12 байт. Эти 40 символов / 20 байт и есть адрес. С префиксом 0x он становится длиной 42 символа.
Мой вопрос в том, почему последние 20 байтов (в отличие от чего-то другого, чем 20) являются произвольным решением или в нем есть основная математическая цель?
Полные открытые ключи на самом деле не так уж полезны в Ethereum*, поскольку они не служат никакой практической пользы. Взятие последних 20 байтов:
Эвристика направлена на упрощение управления ключом; то есть копирование и вставка, контрольные суммы или подтверждения по телефону при больших переводах.
Упреждающий механизм безопасности. Хеш-функции ломаются каждые два десятилетия или около того, поэтому удаление полного открытого ключа является отличным дополнительным уровнем защиты. Сатоши сделал то же самое в Биткойне, так как адрес хэшируется дважды: SHA-256 и RIPEMD-160 (если один сломается, другой останется у вас в качестве щита).
*Вы можете использовать Ethereum для отправки сообщений, но зачем? Это дорого, и вы могли бы использовать PGP.
Микко Отамаа
Танос
Нулик
Нулик
Нулик
Пол Разван Берг