Все статьи
Криптография и безопасность

SHA-256: безопасное хеширование

Алгоритм SHA-256, применение в блокчейне, SSL, цифровые подписи, сравнение с MD5 и SHA-1.

22 марта 2025
8 мин чтения
ConvertHub
#sha256#хеш#криптография

Введение

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 SHA256

5. Хранение паролей (с оговорками)

SHA-256 быстрый — это хорошо для проверки файлов, но плохо для паролей. Если всё же приходится использовать его, обязательно добавляйте соль и несколько тысяч итераций (PBKDF2-SHA256). Но в новых проектах лучше выбратьbcrypt или argon2.

Сравнение SHA-256 с другими алгоритмами

АлгоритмРазмерБезопасностьСкорость (GPU)
MD5128 битНизкая~50 млрд/с
SHA-1160 битСлабая~25 млрд/с
SHA-256256 битВысокая~15 млрд/с
SHA-512512 битВысокая~5 млрд/с
SHA3-256256 битВысокая~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.

Попробуйте эти инструменты

Похожие статьи