ИНСТР-SHA256NIST FIPS 180-4Используется в Bitcoinревизия 2026-05-07

SHA-256 — как работает

SHA-256 — криптографическая хеш-функция, основа Bitcoin, SSL, JWT. Как работает, где используется, почему безопасна.

⏱ работает в браузере · без регистрации
Инструмент · ИНСТР-SHA256|real-time
calcal.ru / sha256-kak-rabotaet-bezopasnost
Загрузка...
256бит
Длина хеша
64
hex символов
2001
NSA выпуск
0
Запросов к серверу

Что такое 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. Добавляем «1» бит после конца сообщения.
  2. Добавляем нули до длины (длина_бит) mod 512 = 448.
  3. Добавляем 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 раунда. В каждом раунде:

  1. Расширение блока: 16 32-битных слов → 64 слов через XOR и ROTR (циклический сдвиг).
  2. Применение функций Ch, Maj, Σ0, Σ1, σ0, σ1 (через AND, OR, XOR, ROTR).
  3. Обновление 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).
ИСТОЧНИКИ
  1. FIPS 180-4 — Secure Hash Standard (SHS). NIST. csrc.nist.gov/publications/detail/fips/180/4/final. 2015.
  2. RFC 6234 — US Secure Hash Algorithms. IETF. datatracker.ietf.org/doc/html/rfc6234. 2011.
  3. Bitcoin Whitepaper. Satoshi Nakamoto. bitcoin.org/bitcoin.pdf. 2008.
  4. SHAttered — first SHA-1 collision. Google + CWI Amsterdam. shattered.io. 2017.
ЧАСТЫЕ ВОПРОСЫ

Часто задаваемые вопросы

SHA-256 (Secure Hash Algorithm 256-bit) — криптографическая хеш-функция. Принимает любые данные (текст, файл) и возвращает 256-битный хеш — 64 hex-символа. Часть семейства SHA-2, разработана NSA в 2001. Используется в Bitcoin, SSL/TLS-сертификатах, проверке целостности файлов, паролях. Главные свойства: одинаковый ввод даёт одинаковый хеш, обратное преобразование вычислительно невозможно.
MD5 (1992, 128 бит) и SHA-1 (1995, 160 бит) — считаются СЛОМАННЫМИ. Их можно подобрать (collision attack). MD5 ломается за минуты на современном GPU, SHA-1 — за часы (Google реализовал в 2017). SHA-256 пока считается безопасным: подобрать коллизию требует ~2^128 операций, что превышает энергию Солнечной системы. Не используйте MD5/SHA-1 для безопасности — только для несекьюрных задач (file checksum, etag).
(1) Bitcoin: блок-цепочка использует SHA-256 для proof-of-work (двойной — SHA-256(SHA-256(block))). (2) SSL/TLS-сертификаты: подписи с RSA/ECDSA + SHA-256. (3) Git: ID коммитов = SHA-1 (но Git перешёл на SHA-256 в 2020 в новой версии). (4) Пароли: bcrypt/scrypt/argon2 используют SHA-256 как примитив. (5) JWT: HS256 = HMAC-SHA-256 для подписи токенов. (6) File integrity: проверка скачанных ISO, бэкапов.
НЕТ. SHA-256 — это ОДНОСТОРОННЯЯ функция: легко вычислить хеш из текста, практически невозможно из хеша получить текст. Если хеш короткого пароля «password» — атакующий может проверить миллион популярных паролей через rainbow table и найти совпадение. Это НЕ расшифровка, а brute-force. Защита — соль (salt): SHA-256(password + random_salt) даёт уникальный хеш каждому, rainbow table не работает.
SHA-256 ВСЕГДА возвращает 256 бит = 64 hex-символа, независимо от размера ввода. Хеш «привет» — 64 символа. Хеш файла 10GB — те же 64 символа. Это ключевое свойство хеш-функций: фиксированный выход для произвольного ввода. Работает за счёт алгоритма Merkle-Damgard: разбивка на блоки + сжатие до 256 бит. Подробности — в RFC 6234.
Слишком быстрый — это проблема для паролей. Современный GPU вычисляет миллиарды SHA-256 в секунду. Если БД пользователей утекла, brute-force подберёт слабый пароль за часы. Поэтому для паролей используйте МЕДЛЕННЫЕ хеши: bcrypt (по умолчанию 60 ms), scrypt (память), argon2 (память + параллелизм). SHA-256 — для целостности и подписей, не для паролей напрямую.
Кратко: (1) Padding — добавляем биты до длины кратной 512. (2) Initialization — 8 начальных hash значений (h0-h7), 64 константы (k0-k63) — производные от простых чисел. (3) Compression — каждые 512 бит обрабатываются 64 раундами с операциями: AND, OR, XOR, ROTR, ADD. (4) Финал — итоговые h0-h7 = 256-битный хеш. Полный алгоритм описан в FIPS 180-4 (NIST). Реализация на JS — ~100 строк кода, на C — 200 строк.
Bitcoin использует SHA-256(SHA-256(data)) — двойное хеширование. Причина: историческая. Сатоси Накамото добавил двойную защиту от length-extension атаки (применима к SHA-1, может теоретически к SHA-256). На практике для Bitcoin это не нужно, но изменить теперь невозможно — это было в дизайне с самого начала. Майнеры считают двойной SHA-256 миллиарды раз в секунду в поисках хеша начинающегося с N нулей.
Лиана Арифметова
АВТОРverifiedред. calcal.ru

Лиана Арифметова

Создатель и главный редактор

Миссия: демократизировать сложные расчёты. Превратить страх перед числами в ясность и контроль. Девиз: «Любая повторяющаяся задача заслуживает своего калькулятора».

Mathematical Engineering · МФТИ · редактирует каталог с 2012 года

Был ли этот калькулятор полезен?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

Инструмент справочный — не заменяет эксперта

Только для информационных целей. Все расчёты, результаты и данные, предоставляемые инструментом, носят исключительно ознакомительный и справочный характер. Они не являются профессиональной консультацией — медицинской, юридической, финансовой, инженерной или иной.

Точность результатов. Калькулятор основан на общепринятых формулах и методиках, однако фактические результаты могут отличаться в зависимости от индивидуальных условий, исходных данных и применяемых стандартов. Мы не гарантируем полноту, точность или актуальность приведённых расчётов.

Профессиональные решения — медицинские, финансовые, инженерные — должны приниматься только после консультации с квалифицированным специалистом. Не используйте автоматический расчёт как единственное основание для важных решений.

Ограничение ответственности. Авторы и разработчики сервиса не несут ответственности за прямой или косвенный ущерб, возникший из-за использования данных расчётов. Пользователь принимает на себя всю ответственность за интерпретацию результатов.