Назовите ключевые свойства криптографических хеш-функций и приведите примеры их использования в бэкенде.

Ответ

Криптографическая хеш-функция — это математический алгоритм, который преобразует произвольный массив данных в строку фиксированной длины (хеш).

Ключевые свойства:


  1. Детерминированность (Determinism): Один и тот же ввод всегда даёт один и тот же хеш.



  2. Необратимость (Pre-image resistance): По известному хешу практически невозможно восстановить исходные данные. Это свойство критически важно для хранения паролей.



  3. Стойкость к коллизиям (Collision resistance): Практически невозможно найти два разных набора входных данных, которые бы давали одинаковый хеш. Это важно для проверки целостности данных.



  4. Лавинный эффект (Avalanche effect): Минимальное изменение во входных данных (например, одного бита) приводит к кардинальному, непредсказуемому изменению хеша.



  5. Высокая скорость вычисления: Хеш должен вычисляться быстро для любого объёма данных.


Примеры использования в бэкенде:

  • Хранение паролей: В базе данных хранятся не сами пароли, а их хеши (часто с "солью" — случайной строкой, уникальной для каждого пользователя).
  • Проверка целостности данных: Для проверки того, что файл или сообщение не были изменены при передаче, можно сравнить хеш оригинала с хешем полученных данных.
  • Ключи в структурах данных: Хеш-функции (не обязательно криптографические) лежат в основе map в Go для быстрого доступа к элементам.
  • Кэширование: Хеш от URL-адреса и параметров запроса может использоваться в качестве ключа для кэширования ответа.
  • Цифровые подписи: Хеш документа подписывается приватным ключом для подтверждения авторства и неизменности.

Пример хеширования в Go (SHA-256):

package main

import (
    "crypto/sha256"
    "fmt"
)

func main() {
    data := []byte("hello, backend!")

    // Вычисляем хеш
    hash := sha256.Sum256(data)

    // Выводим хеш в виде шестнадцатеричной строки
    fmt.Printf("%xn", hash)
}