|
|
| Строка 1: |
Строка 1: |
| − | {{тестируйте ниже}}
| |
| − | {{Песочница}}
| |
| − | = SHA-256 =
| |
| − | '''SHA-256''' (Secure Hash Algorithm 256-bit) — криптографическая [[хэш-функция]], входящая в семейство [[SHA-2]]. Преобразует входные данные произвольной длины в фиксированный 256-битный хэш. Широко используется в технологиях [[Интернет|Интернета]]: [[Цифровая подпись|цифровые подписи]], [[Блокчейн|блокчейн]] ([[Биткойн]]), [[TLS]]-сертификаты.
| |
| | | | |
| − | __TOC__
| |
| − |
| |
| − | == Принцип работы ==
| |
| − | Алгоритм выполняет следующие шаги:
| |
| − | # Добавление бита «1» к сообщению.
| |
| − | # Добавление нулей до длины, кратной 512 битам.
| |
| − | # Добавление 64-битного представления исходной длины.
| |
| − | # Разбиение на 512-битные блоки.
| |
| − | # Итеративная обработка каждого блока с использованием нелинейных функций и констант.
| |
| − |
| |
| − | Математически, каждый блок обрабатывается по формуле:
| |
| − | <math>H_{i} = H_{i-1} + \Sigma_{0}(a) + Maj(a,b,c) + \Sigma_{1}(e) + Ch(e,f,g) + K_{t} + W_{t}</math>
| |
| − | где <math>H_{i}</math> — текущее состояние хэша, <math>K_{t}</math> — константы, <math>W_{t}</math> — расширенное сообщение.
| |
| − |
| |
| − | == Пример хэширования ==
| |
| − | Хэш-значение для пустой строки:
| |
| − | <pre>
| |
| − | SHA-256("") =
| |
| − | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
| |
| − | </pre>
| |
| − |
| |
| − | === Реализация на Python ===
| |
| − | <syntaxhighlight lang="python">
| |
| − | import hashlib
| |
| − |
| |
| − | def sha256_hash(data: str) -> str:
| |
| − | """Возвращает SHA-256 хэш строки в шестнадцатеричном формате."""
| |
| − | return hashlib.sha256(data.encode()).hexdigest()
| |
| − |
| |
| − | # Пример использования
| |
| − | if __name__ == "__main__":
| |
| − | message = "Сети и телекоммуникации"
| |
| − | print(f"Хэш сообщения '{message}':")
| |
| − | print(sha256_hash(message))
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | == Аналоги и безопасность ==
| |
| − | SHA-256 считается устойчивой к [[Коллизия (криптография)|коллизиям]]. Для более высоких требований безопасности рекомендуется [[SHA-3]]. Процесс хэширования можно схематично представить как **сжатие** входных данных произвольной длины в фиксированный 256-битный «отпечаток»:
| |
| − |
| |
| − | <math>H: \{0,1\}^* \to \{0,1\}^{256}</math>
| |
| − |
| |
| − | где <math>\{0,1\}^*</math> — множество всех битовых строк, а <math>\{0,1\}^{256}</math> — множество 256-битных хэшей.
| |
| − |
| |
| − | Количество возможных уникальных хэшей равно:
| |
| − | <math>N = 2^{256} \approx 1.16 \times 10^{77}</math>
| |
| − |
| |
| − | При этом каждый бит хэша зависит от каждого бита входных данных, что обеспечивает свойство [[лавинный эффект (криптография)|лавинного эффекта]].
| |
| − |
| |
| − | == Примечания ==
| |
| − | {{примечания}}
| |
| − | * {{книга | автор = Кнут Д. | заглавие = Искусство программирования | том = 2 | год = 2007 | страницы = 456-460}}
| |
| − | * {{статья | автор = NIST | заглавие = FIPS PUB 180-4 | год = 2015 | url = https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf}}
| |
| − | * Алгоритм используется в [[HTTPS]] для обеспечения целостности данных.
| |
| − |
| |
| − | [[Категория:Криптография]]
| |
| − | [[Категория:Сетевые протоколы]]
| |