Стандарт SHA-256
SHA-256 — та самая хеш-функция, на которой держится Bitcoin. Ты уже знаешь, что такое хеш — теперь разберём именно SHA-256: почему её выбрал Сатоши, как она внутри обрабатывает данные и почему она до сих пор считается надёжной, тогда как MD5 и SHA-1 уже сломаны.
Введи что угодно ниже и смотри, как в реальном времени обновляется дайджест SHA-256. Обрати внимание: на выходе всегда ровно 64 hex-символа — то есть 256 бит — независимо от того, ввёл ли ты одно слово или целый абзац.
Хеш-функции разные. MD5 и SHA-1 когда-то были стандартом индустрии — пока исследователи не научились строить коллизии (два разных входа с одним хешом). Сломанную хеш-функцию нельзя использовать, чтобы защищать финансовую историю. Сатоши выбрал SHA-256: в 2008 году это был самый сильный стандартизованный вариант, и по сей день практических поломок нет.
Реализовывать SHA-256 самому не нужно — всегда есть проверенные библиотеки. Но модель обработки полезна: зачем padding, почему блоки по 512 бит и откуда берутся 256 бит выхода.
| Аспект | SHA-256 | Keccak-256 |
|---|---|---|
| Внутреннее устройство | Конструкция Merkle–Damgård | Sponge (другая семья) |
| Размер выхода | 256 бит (32 байта) | 256 бит (32 байта) |
| Стандарт | SHA-2 (FIPS 180-4) | SHA-3 — но у Ethereum padding до стандарта |
| Где используется | Bitcoin: PoW, Merkle root, double-SHA256d | Ethereum: адреса, слоты хранилища, события |
| Статус | Нет известной практической атаки | Нет известной практической атаки |
| Скорость | Быстро; железо SHA-NI | Быстро; немного другой профиль |
import hashlib
# Обычный SHA-256:
digest = hashlib.sha256(b'Hello Bitcoin').hexdigest()
print(digest) # всегда 64 hex-символа
# Double SHA-256 (SHA-256d) — как в Bitcoin:
inner = hashlib.sha256(b'Hello Bitcoin').digest() # сырые байты, не hex
sha256d = hashlib.sha256(inner).hexdigest()
# Keccak-256 — в Ethereum (НЕ стандартный SHA-3):
from Crypto.Hash import keccak # pip install pycryptodome
k = keccak.new(digest_bits=256)
k.update(b'Hello Ethereum')
print(k.hexdigest()) # отличается от SHA-256 того же входа