Что такое SHA-256
SHA-256 (Secure Hash Algorithm 256-bit) — криптографическая хеш-функция, разработанная NSA и опубликованная NIST в 2001 году. Принимает любые данные (текст, файл, бит-последовательность) и возвращает 256-битный хеш — 64 hex-символа. Часть семейства SHA-2.
Главные свойства:
- Детерминированность. Один и тот же ввод всегда даёт один и тот же хеш.
- Фиксированная длина. Хеш всегда 256 бит, независимо от размера ввода.
- Necolision-resistant. Найти два разных ввода с одинаковым хешем — вычислительно невозможно (~2^128 операций).
- Преimage-resistant. По хешу невозможно восстановить исходные данные. Это «односторонняя функция».
- Avalanche effect. Изменение одного бита во вводе меняет ~50% битов в хеше. Малейшее изменение — кардинально другой хеш.
Как работает алгоритм
Шаг 1 — Padding (выравнивание)
Сообщение дополняется до длины, кратной 512 бит:
- Добавляем «1» бит после конца сообщения.
- Добавляем нули до длины (длина_бит) mod 512 = 448.
- Добавляем 64-битное число — длина исходного сообщения в битах.
Например, сообщение 1 МБ = 8 388 608 бит. После padding: 8 388 608 + 1 + 446 + 64 = 8 389 119 бит ≈ 16 384 блока по 512 бит.
Шаг 2 — Initialization (начальные значения)
8 начальных hash-значений (h0-h7) — первые 32 бита дробной части квадратных корней первых 8 простых чисел:
h0 = 0x6a09e667 // sqrt(2) h1 = 0xbb67ae85 // sqrt(3) h2 = 0x3c6ef372 // sqrt(5) h3 = 0xa54ff53a // sqrt(7) h4 = 0x510e527f // sqrt(11) h5 = 0x9b05688c // sqrt(13) h6 = 0x1f83d9ab // sqrt(17) h7 = 0x5be0cd19 // sqrt(19)
64 константы (k0-k63) — кубические корни первых 64 простых чисел. Эти числа называются «nothing-up-my-sleeve numbers» — они выбраны так, чтобы NSA не могла встроить backdoor.
Шаг 3 — Compression (сжатие)
Каждый 512-битный блок сообщения проходит через 64 раунда. В каждом раунде:
- Расширение блока: 16 32-битных слов → 64 слов через XOR и ROTR (циклический сдвиг).
- Применение функций Ch, Maj, Σ0, Σ1, σ0, σ1 (через AND, OR, XOR, ROTR).
- Обновление 8 регистров (a-h).
После всех раундов регистры (a-h) добавляются к h0-h7 (modular addition).
Шаг 4 — Финал
После обработки всех блоков, итоговые h0-h7 конкатенируются в 256-битный хеш. Записываются как 64 hex-символа.
SHA-256 produces a 256-bit hash value as output. Hash values can be used to verify the integrity of data, authenticate identities, and as part of digital signature schemes.— FIPS 180-4 — Secure Hash Standard (SHS), NIST
Где применяется SHA-256
Bitcoin
Bitcoin использует двойной SHA-256 (SHA-256(SHA-256(block))) для proof-of-work. Майнеры подбирают nonce, чтобы хеш блока начинался с определённого количества нулей. Это требует огромной вычислительной мощности — современная сеть Bitcoin делает ~500 эксахешей в секунду (5×10^20).
SSL/TLS-сертификаты
Большинство современных сертификатов используют RSA-SHA-256 или ECDSA-SHA-256. Цепочка доверия: подпись сертификата = хеш SHA-256 от его данных, зашифрованный приватным ключом CA. Браузер проверяет: расшифровывает подпись публичным ключом CA, сравнивает с хешем сертификата.
Git (новые версии)
Git исторически использовал SHA-1 для ID коммитов. После SHAttered (2017) — Google продемонстрировал коллизию SHA-1 за 6500 GPU-лет — Git начал переход на SHA-256. С 2020 в Git 2.29+ можно создать репозиторий с SHA-256, но миграция большой кодовой базы — challenging задача.
JWT (HS256)
JWT с алгоритмом HS256 = HMAC-SHA-256. Токен подписывается секретным ключом, сервер проверяет подпись. Если алгоритм RS256 — RSA подпись + SHA-256 хеш payload.
File integrity / checksum
Скачали ISO Ubuntu? Проверьте SHA-256 чек-сум. Если совпадает с опубликованным на сайте — файл не повреждён и не подменён. Команда: sha256sum ubuntu.iso (Linux), shasum -a 256 ubuntu.iso (macOS), certutil -hashfile ubuntu.iso SHA256 (Windows).
Пароли (с примитивами)
bcrypt, scrypt, argon2 используют SHA-256 как внутренний примитив. Они НАМЕРЕННО медленные (50-200 ms на хеш) — это защита от brute-force. Никогда не используйте «голый» SHA-256 для паролей — он слишком быстрый.
Безопасность сегодня
- Коллизии: не найдены. Теоретическая стойкость 2^128 операций — больше энергии Солнца за всю его жизнь.
- Preimage attack: не найдены. Восстановить исходные данные из хеша невозможно.
- Length-extension attack: применима. Если знаете SHA-256(secret + msg), можете вычислить SHA-256(secret + msg + extension) без знания secret. Защита — HMAC-SHA-256.
- Quantum threat: Алгоритм Гровера снижает стойкость в 2 раза (с 2^128 до 2^64). Это всё ещё безопасно, но в долгосрочной перспективе нужны post-quantum хеши (SHA-3).
- FIPS 180-4 — Secure Hash Standard (SHS). NIST. csrc.nist.gov/publications/detail/fips/180/4/final. 2015.
- RFC 6234 — US Secure Hash Algorithms. IETF. datatracker.ietf.org/doc/html/rfc6234. 2011.
- Bitcoin Whitepaper. Satoshi Nakamoto. bitcoin.org/bitcoin.pdf. 2008.
- SHAttered — first SHA-1 collision. Google + CWI Amsterdam. shattered.io. 2017.
