SHA-224, SHA-384, SHA-512

Алгоритмы SHA-224, SHA-384 и SHA-512 входят в семейство криптографических хеш-функций SHA-2, разработанное для обеспечения высокой криптостойкости и устойчивости к коллизиям. Они отличаются длиной выходного хеша, внутренними параметрами и областью применения.

  • SHA-224 → 224 бита (28 байт)
  • SHA-384 → 384 бита (48 байт)
  • SHA-512 → 512 бит (64 байта)

Все три алгоритма являются криптографическими хеш-функциями, то есть:

  • принимают данные произвольной длины
  • возвращают фиксированную строку (digest)
  • необратимы (восстановление исходных данных невозможно)
  • устойчивы к коллизиям (при корректной реализации)

В библиотеке CryptoJS они реализованы как отдельные функции.


Подключение CryptoJS

Перед использованием необходимо подключить библиотеку:

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>

SHA-224

Особенности алгоритма

  • Основан на SHA-256, но с изменёнными начальными значениями
  • Укороченный результат (224 бита)
  • Быстрее SHA-256 при меньшем размере хеша
  • Используется там, где требуется компромисс между безопасностью и размером

Пример использования

const hash = CryptoJS.SHA224("Hello, world!");
console.log(hash.toString());

Результат:

8552d8b0eecdb4c5f4f0a5f4f3d58a64e63a7b36f0a2d4cfc0d2b7d7

Преобразование в различные форматы

const hash = CryptoJS.SHA224("data");

console.log(hash.toString(CryptoJS.enc.Hex));     // Hex (по умолчанию)
console.log(hash.toString(CryptoJS.enc.Base64));  // Base64

Практическое применение

  • контроль целостности данных
  • сокращённые цифровые подписи
  • системы, где важен меньший размер хеша

SHA-384

Особенности алгоритма

  • Основан на SHA-512
  • Использует 64-битные операции
  • Укороченный вывод (384 бита)
  • Повышенная безопасность по сравнению с SHA-256

Пример использования

const hash = CryptoJS.SHA384("Hello, world!");
console.log(hash.toString());

Результат:

fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd

Использование с бинарными данными

const wordArray = CryptoJS.enc.Utf8.parse("binary data");
const hash = CryptoJS.SHA384(wordArray);

console.log(hash.toString());

Когда использовать SHA-384

  • криптографические протоколы высокого уровня
  • цифровые подписи
  • TLS/SSL
  • случаи, где требуется баланс между скоростью и безопасностью

SHA-512

Особенности алгоритма

  • Самый мощный в линейке SHA-2
  • 512-битный хеш
  • Использует 64-битные вычисления
  • Высокая устойчивость к атакам

Пример использования

const hash = CryptoJS.SHA512("Hello, world!");
console.log(hash.toString());

Результат:

8710339dcb6814d0d9e8c0b2c8e6b5d8e6d7b4c9d4c8e2f1a6b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5

Работа с большими данными (пошаговое хеширование)

const sha512 = CryptoJS.algo.SHA512.create();

sha512.update("Part 1");
sha512.update("Part 2");

const hash = sha512.finalize();

console.log(hash.toString());

Применение SHA-512

  • хранение паролей (в сочетании с солью)
  • криптографические протоколы
  • блокчейн-технологии
  • проверка целостности больших файлов

Сравнение алгоритмов

Алгоритм Длина хеша Скорость Уровень безопасности
SHA-224 224 бит высокая высокий
SHA-384 384 бит средняя очень высокий
SHA-512 512 бит ниже максимальный

Важные детали реализации в CryptoJS

1. Возвращаемый тип

Все функции возвращают объект типа WordArray, а не строку.

const hash = CryptoJS.SHA512("data");
console.log(typeof hash); // object

Для получения строки необходимо вызвать:

hash.toString();

2. Кодировка входных данных

По умолчанию строки интерпретируются как UTF-8:

CryptoJS.SHA256("текст");

Для явного указания:

const data = CryptoJS.enc.Utf8.parse("текст");
CryptoJS.SHA512(data);

3. Консистентность результатов

Хеш-функции детерминированы:

CryptoJS.SHA512("abc") === CryptoJS.SHA512("abc"); // всегда одинаково

4. Чувствительность к изменениям

Даже минимальное изменение входных данных полностью меняет результат:

CryptoJS.SHA512("abc");
CryptoJS.SHA512("abcd");

Хеши будут радикально отличаться (эффект лавины).


Комбинирование с HMAC

Все алгоритмы можно использовать с HMAC:

const hmac = CryptoJS.HmacSHA512("message", "secret-key");
console.log(hmac.toString());

Аналогично:

CryptoJS.HmacSHA224(...)
CryptoJS.HmacSHA384(...)

Рекомендации по выбору

  • SHA-224 — при ограничениях по размеру
  • SHA-384 — универсальный безопасный вариант
  • SHA-512 — максимальная криптостойкость

Ограничения и предостережения

  • Не использовать для хранения паролей без:

    • соли (salt)
    • многократного хеширования (PBKDF2, bcrypt и т.д.)
  • Не применять как средство шифрования (это не шифр)

  • Учитывать производительность при работе с большими объёмами данных


Связь с другими алгоритмами CryptoJS

  • SHA-224 → производная SHA-256
  • SHA-384 → производная SHA-512
  • SHA-512 → базовый алгоритм для 64-битной ветки

Итоговое понимание структуры

  • SHA-224 и SHA-384 — укороченные версии более длинных алгоритмов
  • SHA-512 — наиболее криптостойкий, но более затратный
  • CryptoJS предоставляет простой API для всех трёх, сохраняя единый стиль работы