SHA-256: безопасное хеширование
Алгоритм SHA-256, применение в блокчейне, SSL, цифровые подписи, сравнение с MD5 и SHA-1.
Введение
SHA-256 — один из самых востребованных криптографических алгоритмов современности. Он стоит за сертификатами сайтов, блокчейном Bitcoin, цифровыми подписями PDF, проверкой целостности дистрибутивов Linux и множеством других задач. В отличие от MD5 и SHA-1, SHA-256 до сих пор считается криптостойким и рекомендован NIST для использования в 2025 году. В этой статье разберём устройство алгоритма, его применение и сравним с соседями по семейству SHA-2. Попробовать SHA-256 в работе можно в нашем SHA-256-генераторе.
Что такое SHA-256
SHA-256 — это криптографическая хеш-функция из семейства SHA-2, разработанная Агентством национальной безопасности США и опубликованная в 2001 году. Цифра «256» в названии означает размер выходного хеша в битах. На выходе алгоритм всегда даёт 256-битный дайджест, который обычно записывается 64 шестнадцатеричными символами.
Например, хеш от строки "hello" выглядит так:
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824Алгоритм обрабатывает входные данные блоками по 512 бит, выполняя 64 раунда перемешивания. Внутри используются восемь 32-битных переменных состояния и 64 константы, полученные из дробных частей кубических корней простых чисел.
Свойства SHA-256
- Детерминированность. Одинаковые входы дают одинаковый хеш.
- Лавинный эффект. Изменение одного бита меняет около 50% бит хеша.
- Однонаправленность. По хешу невозможно восстановить исходные данные.
- Стойкость к коллизиям. Практических коллизий не найдено.
- Фиксированный размер выхода. Всегда 256 бит, независимо от размера входа.
Где применяется SHA-256
1. Блокчейн и криптовалюты
Bitcoin использует SHA-256 дважды для хеширования заголовков блоков. Алгоритм также лежит в основе доказательства работы (Proof-of-Work): майнеры подбирают такое значение nonce, чтобы хеш блока начинался с определённого количества нулей. Ethereum использует Keccak-256 (вариант SHA-3), но многие смарт-контракты всё равно обращаются к SHA-256.
2. SSL/TLS-сертификаты
Современные сертификаты сайтов подписываются с использованием SHA-256. Когда вы видите в браузере «Подключение защищено», речь идёт о TLS-рукопожатии, в котором участвует SHA-256. Старые сертификаты на SHA-1 считаются недоверенными с 2017 года.
3. Цифровые подписи
PDF, DOCX, P7S-файлы — во всех этих форматах цифровая подпись обычно построена на SHA-256. Алгоритм хеширует документ, после чего хеш шифруется приватным ключом подписанта. Получатель проверяет подпись публичным ключом и сравнивает хеш.
4. Проверка целостности файлов
Дистрибутивы Linux, ISO-образы, пакеты npm — почти везде рядом со ссылкой на скачивание публикуется SHA-256-сумма. После скачивания пользователь может самостоятельно вычислить хеш и сравнить с эталоном.
# Linux: вычислить SHA-256 файла
sha256sum ubuntu-24.04.iso
# => 2dde0c46cd17c54eb54d1f56c feather... (64 символа)
# macOS
shasum -a 256 ubuntu-24.04.iso
# PowerShell
Get-FileHash ubuntu-24.04.iso -Algorithm SHA2565. Хранение паролей (с оговорками)
SHA-256 быстрый — это хорошо для проверки файлов, но плохо для паролей. Если всё же приходится использовать его, обязательно добавляйте соль и несколько тысяч итераций (PBKDF2-SHA256). Но в новых проектах лучше выбратьbcrypt или argon2.
Сравнение SHA-256 с другими алгоритмами
| Алгоритм | Размер | Безопасность | Скорость (GPU) |
|---|---|---|---|
| MD5 | 128 бит | Низкая | ~50 млрд/с |
| SHA-1 | 160 бит | Слабая | ~25 млрд/с |
| SHA-256 | 256 бит | Высокая | ~15 млрд/с |
| SHA-512 | 512 бит | Высокая | ~5 млрд/с |
| SHA3-256 | 256 бит | Высокая | ~3 млрд/с |
Подробнее о различиях между алгоритмами читайте в нашей статье«Сравнение хеш-функций».
Примеры использования
JavaScript (браузер и Node.js)
// В браузере (Web Crypto API)
async function sha256(message) {
const data = new TextEncoder().encode(message);
const hash = await crypto.subtle.digest('SHA-256', data);
return Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
sha256('hello').then(console.log);
// => 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
// В Node.js
const crypto = require('crypto');
const hash = crypto.createHash('sha256').update('hello').digest('hex');Python
import hashlib
text = "hello"
hash_hex = hashlib.sha256(text.encode()).hexdigest()
print(hash_hex)
# 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
# Хеш файла
with open('file.bin', 'rb') as f:
file_hash = hashlib.sha256(f.read()).hexdigest()Go
package main
import (
"crypto/sha256"
"fmt"
)
func main() {
h := sha256.Sum256([]byte("hello"))
fmt.Printf("%x\n", h)
// 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
}HMAC-SHA256
SHA-256 часто используется в режиме HMAC — когда нужно не просто получить хеш, а подтвердить подлинность сообщения с помощью секретного ключа. HMAC-SHA256 применяется для подписи JWT-токенов, webhook-запросов и API-вызовов. Подробнее — в статье про HMAC.
Атаки и уязвимости
На сегодняшний день для SHA-256 не найдено практических коллизий. Теоретическая оценка трудоёмкости поиска коллизии — 2¹²⁸ операций, что за пределами возможностей любой вычислительной системы. Известны атаки на усечённые версии SHA-256 (с 46 раундами вместо 64), но они не применимы к полному алгоритму.
Главный риск для SHA-256 в будущем — квантовые вычисления. Алгоритм Гровера снижает трудоёмкость поиска прообраза с 2²⁵⁶ до 2¹²⁸, что всё ещё остаётся недостижимым для ближайших десятилетий.
SHA-256 vs SHA-512
Многие задаются вопросом: «Какой вариант выбрать — SHA-256 или SHA-512?» На 64-битных процессорах SHA-512 часто работает быстрее за счёт работы с 64-битными словами. Но для большинства приложений разница в скорости незаметна. Если вы хешируете небольшие строки — берите SHA-256. Если работаете с большими файлами на сервере — SHA-512 может быть эффективнее. Попробовать оба можно вSHA-512-генераторе.
Заключение
SHA-256 — золотой стандарт хеширования в 2025 году. Он достаточно быстр, чтобы проверять целостность гигабайтных файлов, и достаточно стоек, чтобы защищать цифровые подписи и SSL-сертификаты. Для паролей, впрочем, чистый SHA-256 не подходит — нужны медленные функции вроде bcrypt или argon2. ИспользуйтеSHA-256-генератор для проверки файлов и данных, а для защиты паролей перейдите к статье проbcrypt.
Попробуйте эти инструменты
Похожие статьи
Как создать надёжный пароль: генератор паролей
Правила создания паролей, длина, символы, энтропия, менеджеры паролей, двухфакторная аутентификация.
MD5 хеш: что это и безопасно ли использовать
Алгоритм MD5, хеширование, коллизии, почему MD5 не для паролей, где ещё можно использовать.
UUID: генерация уникальных идентификаторов
UUID версии 1-5, GUID, использование в базах данных, распределённых системах, генерация.
Bcrypt: правильное хеширование паролей
Почему bcrypt для паролей, salt, cost factor, сравнение с SHA, лучшие практики безопасности.