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

Согласно этому сообщению о том, как получить адрес Ethereum из открытого ключа:

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

Мой вопрос в том, почему последние 20 байтов (в отличие от чего-то другого, чем 20) являются произвольным решением или в нем есть основная математическая цель?

Ответы (1)

Полные открытые ключи на самом деле не так уж полезны в Ethereum*, поскольку они не служат никакой практической пользы. Взятие последних 20 байтов:

  1. Эвристика направлена ​​на упрощение управления ключом; то есть копирование и вставка, контрольные суммы или подтверждения по телефону при больших переводах.

  2. Упреждающий механизм безопасности. Хеш-функции ломаются каждые два десятилетия или около того, поэтому удаление полного открытого ключа является отличным дополнительным уровнем защиты. Сатоши сделал то же самое в Биткойне, так как адрес хэшируется дважды: SHA-256 и RIPEMD-160 (если один сломается, другой останется у вас в качестве щита).

*Вы можете использовать Ethereum для отправки сообщений, но зачем? Это дорого, и вы могли бы использовать PGP.

Для примечания «Вы могли бы использовать Ethereum для отправки сообщений, но зачем вам это? Это дорого, и вы могли бы использовать PGP»: один полезный сценарий — общаться с владельцем ключа за пределами Ethereum, гарантируя, что только он / она может расшифровать сообщение. Для дальнейшего обсуждения см. ethresear.ch/t/from-ethereum-keys-to-pgp-communication/1947/3 .
@PaulRBerg Это проницательно, я забыл, что Сатоши сделал что-то подобное с биткойн-адресами.
Итак, можем ли мы сократить адрес до... скажем, 16 байт? Это может сэкономить место в блокчейне сейчас, когда его размер приближается к терабайту. А может даже меньше? А 12 байт? Можем ли мы управлять безопасностью, просто проверяя настоящий открытый ключ на случай коллизии, а затем запрещая создание этой учетной записи в StateDB?
Думаю, хватит 10 байт, а размер блокчейна уменьшится на 50%!!!!!
SHA256 не работает с 2019 года, поэтому ... это только временное явление, которое безопасно использовать с некоторыми криптографическими функциями, ни одна из них не безопасна, независимо от того, сколько битов они имеют
@Nulik интересный момент. Если вы можете сформулировать его как вопрос, на который можно ответить, я думаю, что он заслуживает отдельной ветки.