Hashlib

Содержание:

What is SHA-512?

The above SHA-512 generator allows you to easily compute hashes / checksums, but what are they exactly and how are they used? SHA-256 is a part of a family of one-way cryptographic functions called SHA-2 (Secure Hash Algorithm 2). It was developed in 2001 by the United States National Security Agency (NSA) in response for the need of stronger cryptography to replase the existing SHA-1 standard.

Hashing functions are cryptographic functions that can take an input of basically any set of characters, or a file of any type, and produce as output a hash of a much shorter length. Key property of the hash is that it is collision resistant, meaning that nobody should be able to reverse the process and find two different inputs that result in the same computed hash. This property of hash functions is key in identification and validation of connections, files, identity, etc.

Below are some examples of SHA512 hashes from different strings, which are appreciably longer than MD5 or SHA-256 hashes for the same content and are spread over several lines for the purpose of presentation.

SHA-512 examples
Input Computed hash
The quick brown fox jumps over the lazy dog 07e547d9586f6a73f73fbac0435ed769
51218fb7d0c8d788a309d785436bbb64
2e93a252a954f23912547d1e8a3b5ed6
e1bfd7097821233fa0538f3db854fee6
The quick brown fox jumps over tha lazy dog aa471ccd4bb25f6420fba10a036cf73b
da59847b7cb926dee76887acf6ec31d1
2ec7d29e8a2a89518252a32ca0daecd2
b7689568b2ed28a0a717628d8ad6d4dc
123456789 d9e6762dd1c8eaf6d61b3c6192fc408d
4d6d5f1176d0c29169bc24e71c3f274a
d27fcd5811b313d681f7e55ec02d73d4
99c95455b6b5bb503acf574fba8ffe85
qwerty 0dd3e512642c97ca3f747f9a76e374fb
da73f9292823c0313be9d78add7cdd8f
72235af0c553dd26797e78e1854edee0
ae002f8aba074b066dfce1af114e32f8
sha512 generator 9f7c77251d4d5bd7ff4a2cc2d235e34a
03b39156b2245d780b7bf383a33d64eb
5a1f125321c1ffd972e665e7cdd0e333
b54aa1de664aee2f22072ed9e7103ff4

The above table was produced using our SHA-512 generator. As can be seen, the output is of fixed length of 512 bits.

The IETF has produced two documents that describe how to compute the message digest: RFC 4634: «US Secure Hash Algorithms (SHA and HMAC-SHA)», released in 2006 and replaced in 2011 by RFC 6234 «US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)».

Атаки на хеши

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

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

Вычислительная сложность криптостойкого хеша равна заявленной эффективной длине последовательности бит минус 1. Таким образом, когда неизвестны его недостатки, 128-битный хеш будет иметь сложность вычисления 2^127. Как только кто-то найдёт математический алгоритм, который позволит взломать хеш за время меньшее, чем эффективная длина бит минус 1, такой хеш будет считаться ослабленным. Как правило, все общепринятые хеши становятся слабее со временем. Когда эффективная длина бит сокращается, хеш становится менее защищённым и менее ценным. Когда считается, что хеш может быть взломан за разумный период времени и с не столь значительными вычислительными ресурсами (стоимостью от сотен тысяч до миллионов долларов), то хеш считается «взломанным» и не должен больше использоваться. Взломанные хеши используются вредоносными программами и злоумышленниками для создания якобы законного программного обеспечения с цифровой подписью. Хороший пример такого ПО — Flame malware program. В общем, слабые хеши могут сыграть свою роль и не должны использоваться.

Overview

The SHA (Secure Hash Algorithm) is one of the popular cryptographic hash functions. A cryptographic hash can be used to make a signature for a text or a data file. In this tutorial, let’s have a look how we can perform SHA-256 and SHA3-256 hashing operations using various Java libraries.

The SHA-256 algorithm generates an almost-unique, fixed-size 256-bit (32-byte) hash. This is a one-way function, so the result cannot be decrypted back to the original value.

Currently, SHA-2 hashing is widely used as it is being considered as the most secure hashing algorithm in the cryptographic arena.

SHA-3 is the latest secure hashing standard after SHA-2. Compared to SHA-2, SHA-3 provides a different approach to generate a unique one-way hash, and it can be much faster on some hardware implementations. Similar to SHA-256, SHA3-256 is the 256-bit fixed-length algorithm in SHA-3.

NIST released SHA-3 in 2015, so there are not quite as many SHA-3 libraries as SHA-2 for the time being. It’s not until JDK 9 that SHA-3 algorithms were available in the built-in default providers.

Now, let’s start with SHA-256.

2. MessageDigest Class in Java

Java provides inbuilt MessageDigest class for SHA-256 hashing:

However, here we have to use a custom byte to hex converter to get the hashed value in hexadecimal:

3. Guava Library

The Google Guava library also provides a utility class for hashing.

First, let’s define the dependency:

Now, here’s how we can use Guava to hash a String:

4. Apache Commons Codecs

Similarly, we can also use Apache Commons Codecs as well:

Here’s the utility class – called DigestUtils – that supports SHA-256 hashing:

5. Bouncy Castle Library

5.2. Hashing Using the Bouncy Castle Library

The Bouncy Castle API provides a utility class for converting hex data to bytes and back again.

However, it is required to populate a digest using the built-in Java API first:

6. SHA3-256

Now let’s continue with SHA3-256. SHA3-256 hashing in Java is nothing quite different from SHA-256.

6.2. Apache Commons Codecs

Apache Commons Codecs provides a convenient DigestUtils wrapper for the MessageDigest class. This library began to support SHA3-256 since version 1.11 and it  as well:

6.3. Keccak-256

Keccak-256 is another popular SHA3-256 hashing algorithm. Currently, it serves as an alternative to the standard SHA3-256. Keccak-256 delivers the same security level as the standard SHA3-256, and it differs from SHA3-256 only on the padding rule. It has been used in several blockchain projects, such as Monoro.

Again, we need to import the Bouncy Castle Library to use Keccak-256 hashing:

We can also make use of the Bouncy Castle API to do the hashing:

7. Conclusion

In this quick article, we had a look at few ways of implementing SHA-256 and SHA3-256 hashing in Java, using both built-in and third-party libraries.

The source code of the examples above can be found on the GitHub project.

Implementaciones

Implementaciones en lenguajes comunes

Las funciones hash SHA se pueden encontrar en muchos de los lenguajes de programación modernos, como por ejemplo C, C++, C#, Go,​ Javascript, Java,​ Python,​ PHP,​ Perl,​ y Ruby.​

Otras implementaciones

Bouncy Castle
La biblioteca Bouncy Castle es una biblioteca gratuita escrita en Java y en C# que contiene implementaciones de los algoritmos SHA-1, SHA-224, SHA-256, SHA-384 y SHA-512, así como de otros algoritmos como Whirlpool, Tiger, RIPEMD, GOST-3411, MD2, MD4 y MD5.
cryptlib
Biblioteca con herramientas de seguridad software, siendo esta multiplataforma y de código abierto.
Crypto++
Biblioteca en C++ con esquemas criptográficos e implementaciones de los algoritmos SHA-1, SHA-224, SHA-256, SHA-384 y SHA-512. Es de código abierto y con una licencia muy permisiva.
jsSHA
Biblioteca escrita en JavaScript para realizar cálculos del tratamiento del SHA en la parte del cliente. Se puede utilizar en varios navegadores webs. jsSHA trabaja con la hipótesis de que JavaScript no es nativamente soportado para realizar operaciones de 64 bits tal como son requeridas en SHA-384 y SHA-512.
libsparkcrypto
Implementación formalmente verificada que es usada ampliamente en algoritmos simétricos criptográficos en el lenguaje de programación y herramientas del SPARK. Completa la falta de errores en tiempo de ejecución como violaciones de rango, divisiones por cero y desbordamiento numérico.
LibTomCrypt
Conjunto de herramientas portables de criptografía para ISO C. Todas ellas de dominio público.
Libgcrypt
Biblioteca de propósito general para la criptografía basada en código de GNU Privacy Guard.
md5deep
Conjunto de programas para realizar un tratamiento en mensajes empleando MD5, SHA-1, SHA-256, Tiger, o Whirlpool con un número de arbitrario de ficheros. Suele ser empleada en seguridad informática, administración de sistemas y comunidades de computación forense para ejecutar gran número de ficheros a través de diversos algoritmos criptográficos. Es similar al sha1sum de GNU Core Utilities y al md5sum.
OpenSSL
La ampliamente usada biblioteca OpenSSL incluye implementaciones de los algoritmos de SHA-1, SHA-224, SHA-256, SHA-384 y SHA-512. Todas ellas son libres y de código abierto.
La pequeña biblioteca PolarSSL y incluye implementaciones de código abierto de los algoritmos de SHA-1, SHA-224, SHA-256, SHA-384 y SHA-512.
sphlib
Bliblioteca libre y de código abierto que implementa varias funciones hash, incluyendo SHA-1 y SHA-2, ambas portables (pero optimizadas) a C y a Java.
VHDL
Colección de implementaciones hardware de funciones hash (incluyendo SHA-1 y SHA-2) portable (pero optimizada) a VHDL. Es libre y de código abierto.

Примеры

Ниже приведены примеры хешей SHA-2. Для всех сообщений подразумевается использование кодировки ASCII.

SHA-224("The quick brown fox jumps over the lazy dog") 
 = 730E109B D7A8A32B 1CB9D9A0 9AA2325D 2430587D DBC0C38B AD911525
SHA-256("The quick brown fox jumps over the lazy dog") 
 = D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592
SHA-384("The quick brown fox jumps over the lazy dog") 
 = CA737F10 14A48F4C 0B6DD43C B177B0AF D9E51693 67544C49 4011E331 7DBF9A50
   9CB1E5DC 1E85A941 BBEE3D7F 2AFBC9B1
SHA-512("The quick brown fox jumps over the lazy dog") 
 = 07E547D9 586F6A73 F73FBAC0 435ED769 51218FB7 D0C8D788 A309D785 436BBB64
   2E93A252 A954F239 12547D1E 8A3B5ED6 E1BFD709 7821233F A0538F3D B854FEE6
SHA-512/256("The quick brown fox jumps over the lazy dog") 
 = DD9D67B3 71519C33 9ED8DBD2 5AF90E97 6A1EEEFD 4AD3D889 005E532F C5BEF04D
SHA-512/224("The quick brown fox jumps over the lazy dog") 
 = 944CD284 7FB54558 D4775DB0 485A5000 3111C8E5 DAA63FE7 22C6AA37

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

SHA-256("The quick brown fox jumps over the lazy cog") 
 = E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE

Алгоритм

Хеш-функции семейства SHA-3 построены на основе конструкции криптографической губки, в которой данные сначала «впитываются» в губку, при котором исходное сообщение M{\displaystyle M} подвергается многораундовым перестановкам f{\displaystyle f}, затем результат Z{\displaystyle Z} «отжимается» из губки. На этапе «впитывания» блоки сообщения суммируются по модулю 2 с подмножеством состояния, которое затем преобразуется с помощью функции перестановки f{\displaystyle f}. На этапе «отжимания» выходные блоки считываются из одного и того же подмножества состояния, изменённого функцией перестановок f{\displaystyle f}. Размер части состояния, который записывается и считывается, называется «скоростью» (англ. rate) и обозначается r{\displaystyle r}, а размер части, которая нетронута вводом / выводом, называется «емкостью» (англ. capacity) и обозначается c{\displaystyle c}.

Алгоритм получения значения хеш-функции можно разделить на несколько этапов:

  • Исходное сообщение M{\displaystyle M} дополняется до строки P{\displaystyle P} длины, кратной r{\displaystyle r}, с помощью функции дополнения (pad-функции).
  • Строка P{\displaystyle P} делится на n{\displaystyle n} блоков длины r{\displaystyle r}: P,P1,…,Pn−1{\displaystyle P_{0},P_{1},…,P_{n-1}}
  • «Впитывание»: каждый блок Pi{\displaystyle P_{i}} дополняется нулями до строки длины b{\displaystyle b} бит и суммируется по модулю 2 со строкой состояния S{\displaystyle S}, где S{\displaystyle S} — строка длины b{\displaystyle b} бит (b{\displaystyle b} = r{\displaystyle r} + c{\displaystyle c}). Перед началом работы функции все элементы S{\displaystyle S} равны нулю. Для каждого следующего блока состояние — строка, полученная применением функции перестановок f{\displaystyle f} к результату предыдущего шага.
  • «Отжимание»: пока длина Z{\displaystyle Z} меньше d{\displaystyle d} (d{\displaystyle d} — количество бит в результате хеш-функции), к Z{\displaystyle Z} добавляется r{\displaystyle r} первых бит состояния S{\displaystyle S}, после каждого прибавления к S{\displaystyle S} применяется функция перестановок f{\displaystyle f}. Затем Z{\displaystyle Z} обрезается до длины d{\displaystyle d} бит
  • Строка Z{\displaystyle Z} длины d{\displaystyle d} бит возвращается в качестве результата

Благодаря тому, что состояние содержит c{\displaystyle c} дополнительных бит, алгоритм устойчив к атаке удлинением сообщения, к которой восприимчивы алгоритмы SHA-1 и SHA-2.

В SHA-3 состояние S{\displaystyle S} — это массив 5 × 5 слов длиной w{\displaystyle w} = 64 бита, всего 5 × 5 × 64 = 1600 бит. Также в Keccak могут использоваться длины w{\displaystyle w}, равные меньшим степеням 2 (от w{\displaystyle w} = 1 до w{\displaystyle w} = 32).

Comparación de funciones SHA

En la tabla de abajo, estado interno significa «suma hash interna» después de cada compresión de un bloque de datos.

Algoritmo y variante Tamaño de salida (bits). Tamaño del estado interno (bits). Tamaño del bloque (bits). Tamaño máximo del mensaje (bits). Longitud de la palabra (bits). Iteraciones Operaciones Colisiones encontradas Ejemplo de rendimiento (MiB/s)​
MD5 (como referencia) 128 128 512 264 — 1 32 64 +, and, or, xor, rot  Si 335
SHA-0 160 160 512 264 — 1 32 80 +, and, or, xor, rot  Si
SHA-1 160 160 512 264 — 1 32 80 +, and, or, xor, rot  Si 192
SHA-2 SHA-224 SHA-256 224256 256 512 264 — 1 32 64 +, and, or, xor, shr, rot Ninguna 139
SHA-384 SHA-512 SHA-512/224 SHA-512/256 384 512 224 256 512 1024 2128 — 1 64 80 +, and, or, xor, shr, rot Ninguna 154
SHA-3 224/256/384/512 1600(5×5 array de palabras de 64-bit) 1152/1088/832/576 Ilimitado 64 24 and, xor, not, rot Ninguna

Los datos de rendimientos descritos anteriormente fueron realizados con una implementación de un único hilo (hebra) de un AMD Opteron 8354 a 2.2 GHz bajo un Linux x64, y sólo sirven para una ruda comparación general. Para un mayor detalle de las mediciones de rendimiento en arquitecturas de procesadores modernos se facilita la siguiente tabla.

Arquitectura CPU Frecuencia Algoritmo Tamaño palabra (bits). Ciclo/Byte x86 MiB/s x86 Ciclo/Byte x86-64 MiB/s x86-64
Intel Ivy Bridge 3.5 GHz SHA-256 32-bit 16.80 199 13.05 256
SHA-512 64-bit 43.66 76 8.48 394
AMD Piledriver 3.8 GHz SHA-256 32-bit 22.87 158 18.47 196
SHA-512 64-bit 88.36 41 12.43 292

Los resultados de rendimiento etiquetados como ‘x86’ fueron obtenidos usando un código de 32 bits en procesadores de 64 bits, mientras que los etiquetados como ‘x86-64’ son códigos de 64 bits. Mientras que SHA-256 está diseñado para operaciones de 32 bits, se beneficia computacionalmente del código optimizado para procesadores de 64 bits. Las implementaciones de 32 bits para SHA-512 son significativamente más lentas que sus equivalente en 64 bits. Las variaciones de ambos algoritmos con diferente tamaños de salida tienen un rendimiento similar, ya que las funciones de expansión y compresión del mensaje son idénticas, y únicamente varia los valores iniciales y los tamaños de salida. Las mejores implementaciones del MD5 y SHA-1 consiguen un rendimiento entre 4,5 y 6 ciclos por byte en procesadores modernos.

Los ensayos fueron llevado a cabo por la Universidad de Illinois en Chicago en su sistema hydra8 ejecutado en un Intel Xeon E3-1275 V2 a una frecuencia de reloj de 3,5 GHz, y en su sistema hydra9 ejecutada en un AMD A10-5800K con una frecuencia de 3,8 GHz.​ Las velocidades referenciadas como ciclos por bytes son la mediana del rendimiento de un algoritmo tratando con un mensaje de 4096 bytes usando el software de «benchmarking» criptográfico SUPERCOP.​ El rendimiento MiB/s se extrapolan de la velocidad del reloj de una CPU de un solo núcleo, rendimiento que varía en el mundo real debido a numerosos factores.

Модели перехода ИОК

Ниже перечислены сценарии для внедрения SHA-2 в компоненты ИОК (для этих примеров используется двухуровневая ИОК — автономная корневая система, онлайн центры сертификации), каждый из которых может быть либо новым компонентом, либо перенесённым:

Два ИОК дерева, один полностью SHA-1, другой полностью SHA-2.

Остальные сценарии предполагают одно дерево ИОК:

  • Всё дерево ИОК, от корня до конечных точек, — SHA-1.
  • Всё дерево ИОК, от корня до конечных точек, — SHA-2.
  • Корень — SHA-1, выдающие ЦС — SHA-2, сертификаты конечных точек — SHA-2.
  • Корень — SHA-1, выдающие ЦС — SHA-2, сертификаты конечных точек — SHA-1.
  • Корень — SHA-1, выдающие ЦС — SHA-2 и SHA-1, сертификаты конечных точек — SHA-2 и SHA-1.
  • Корень — SHA-2, выдающие ЦС — SHA-1, сертификаты конечных точек — SHA-1.
  • Корень — SHA-2, выдающие ЦС — SHA-2, сертификаты конечных точек — SHA-1.
  • Корень — SHA-2, выдающие ЦС — SHA-2 и SHA-1, сертификаты конечных точек — SHA-2 и SHA-1.

Также возможно существование выдающего центра сертификации, который переключается между SHA-1 и SHA-2 по необходимости, но это с большой вероятностью вызовет путаницу в службах ИОК (и не особо рекомендуется). Если возможно, для облегчения перехода можно запустить параллельные ИОК, один — с SHA-1, другой — с SHA-2, а потом переводить используемые устройства после того, как позволит тестирование.

Примечание: собственный сертификат ЦС корневого ЦС не нужно переносить на SHA-2, даже если он всё ещё использует SHA-1. Все программы проверки устаревших SHA-1 заботятся обо всём после собственного сертификата корневого ЦС (и будут заботиться, по крайней мере, в обозримом будущем). Тем не менее, имеет смысл переместить всё, включая собственный сертификат ЦС корневого ЦС на SHA-2, чтобы можно было сказать, что вся ИОК — SHA-2, и избежать дальнейших изменений, связанных с SHA-1, в обозримом будущем.

Публичные ЦС уже перешли с SHA-1 на SHA-2 для любых сертификатов со сроком жизни, заканчивающимся после 1 января 2017, поэтому вы должны сосредоточить свои усилия на серверах и приложениях с ещё не перешедшими на SHA-2 публичными цифровыми сертификатами. После решения этой проблемы можно начать смотреть на внутренние ИОК и доверенные стороны. Переход с SHA-1 на SHA-2 технически не сложен, но это массовое логистическое изменение с множеством последствий, которое требует продолжительного тестирования.

Вряд ли большинство поставщиков знают точную дату смерти SHA-1 (т. е. дату, когда его использование в приложении или устройстве будет приводить к «фатальным» ошибкам), но скорее всего это произойдёт раньше, чем вы ожидаете, так как всё больше пользователей переходит на SHA-2. Поэтому вам действительно стоит совершить переход уже сейчас.

Криптоанализ

Криптоанализ хеш-функций направлен на исследование уязвимости для различного вида атак.
Основные из них:

  • нахождение коллизий — ситуация, когда двум различным исходным сообщениям соответствует одно и то же хеш-значение.
  • нахождение прообраза — исходного сообщения — по его хешу.

При решении методом «грубой силы»:

  • первая задача требует в среднем 2160/2 = 280 операций, если использовать атаку Дней рождения.
  • вторая требует 2160 операций.

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

В январе 2005 года Винсент Рэймен и Elisabeth Oswald опубликовали сообщение об атаке на усечённую версию SHA-1 (53 раунда вместо 80), которая позволяет находить коллизии меньше, чем за 280 операций.

В феврале 2005 года Сяоюнь Ван, Ицюнь Лиза Инь и Хунбо Юй (Xiaoyun Wang, Yiqun Lisa Yin, Hongbo Yu) представили атаку на полноценный SHA-1, которая требует менее 269 операций.

О методе авторы пишут:

Также они заявляют:

Статья с описанием алгоритма была опубликована в августе 2005 года на конференции CRYPTO.

В этой же статье авторы опубликовали атаку на усечённый SHA-1 (58 раундов), которая позволяет находить коллизии за 233 операций.

В августе 2005 года на CRYPTO 2005 эти же специалисты представили улучшенную версию атаки на полноценный SHA-1, с вычислительной сложностью в 263 операций.
В декабре 2007 года детали этого улучшения были проверены Мартином Кохраном.

Кристоф де Каньер и Кристиан Рехберг позже представили усовершенствованную версию атаки на SHA-1, за что были удостоены награды за лучшую статью на конференции ASIACRYPT . Ими была представлена двух-блоковая коллизия на 64-раундовый алгоритм с вычислительной сложностью около 235 операций.

Существует масштабный исследовательский проект, стартовавший в технологическом университете австрийского города Грац, который : «… использует компьютеры, соединенные через Интернет, для проведения исследований в области криптоанализа. Вы можете поучаствовать в проекте загрузив и запустив бесплатную программу на своем компьютере.»

Хотя теоретически SHA-1 считается взломанным (количество вычислительных операций сокращено в 280-63 = 131 072 раза), на практике подобный взлом неосуществим, так как займёт пять миллиардов лет.

Бурт Калински, глава исследовательского отдела в «лаборатории RSA» предсказывает, что первая атака по нахождению прообраза будет успешно осуществлена в ближайшие 5—10 лет.

Ввиду того, что теоретические атаки на SHA-1 оказались успешными, NIST планирует полностью отказаться от использования SHA-1 в цифровых подписях.

Из-за блочной и итеративной структуры алгоритмов, а также отсутствия специальной обработки в конце хеширования, все хеш-функции семейства SHA уязвимы для атак удлинением сообщения и коллизиям при частичном хешировании сообщения. Эти атаки позволяют подделывать сообщения, подписанные только хешем — SHA(message||key){\displaystyle SHA(message||key)} или SHA(key||message){\displaystyle SHA(key||message)} — путём удлинения сообщения и пересчёту хеша без знания значения ключа. Простейшим исправлением, позволяющим защититься от этих атак, является двойное хеширование — SHAd(message)=SHA(SHA(b||message)){\displaystyle SHA_{d}(message)=SHA(SHA(0^{b}||message))} (b{\displaystyle 0^{b}} — блок нулей той же длины, что и блок хеш-функции).

2 ноября 2007 года NIST анонсировало конкурс по разработке нового алгоритма SHA-3, который продлился до 2012 года.

SHAppening

8 октября 2015 Marc Stevens, Pierre Karpman, и Thomas Peyrin опубликовали атаку на функцию сжатия алгоритма SHA 1, которая требует всего 257 вычислений.

Реальный взлом: SHAttered (нахождение коллизий)

23 февраля 2017 года специалисты из и CWI объявили о практическом взломе алгоритма, опубликовав 2 PDF-файла с одинаковой контрольной суммой SHA-1. Это потребовало перебора 9×1018{\displaystyle 9\times 10^{18}} вариантов, что заняло бы 110 лет на 1 GPU.

Хеширование сообщений произвольной длины

Основой функции сжатия алгоритма является функция f, выполняющая перемешивание внутреннего состояния алгоритма. Состояние (обозначим его A) представляется в виде массива 5×5, элементами которого являются 64-битные слова, инициализированные нулевыми битами (то есть, размер состояния составляет 1600 битов). Функция f выполняет 24 раунда, в каждом из которых производятся следующие действия:

 C = A ⊕{\displaystyle \oplus } A ⊕{\displaystyle \oplus } A ⊕{\displaystyle \oplus } A ⊕{\displaystyle \oplus } A, x = 0…4;
 D = C ⊕{\displaystyle \oplus } (С >>> 1), x = 0…4;
 A = A ⊕{\displaystyle \oplus } D, x = 0…4, y = 0…4;
 B = A >>> r, x = 0…4, y = 0…4;
 A = B ⊕{\displaystyle \oplus } (~B & B), x = 0…4, y = 0…4, 

Где:

B — временный массив, аналогичный по структуре массиву состояния;
C и D — временные массивы, содержащие по пять 64-битных слов;
r — массив, определяющий величину циклического сдвига для каждого слова состояния;
~x — поразрядное дополнение к x;
и операции с индексами массива выполняются по модулю 5.

Кроме приведенных выше операций, в каждом раунде также выполняется наложение операцией XOR раундовой константы на слово A.

Перед выполнением функции сжимания накладывается операция XOR фрагментов исходного сообщения с фрагментами исходного состояния. Результат обрабатывается функцией f. Данное наложение в совокупности с функцией сжимания, выполняемые для каждого блока входных данных, представляют собой «впитывающую» (absorbing) фазу криптографической губки.

Стоит отметить, что функция f использует только операции, стойкие к атакам, использующим утечки данных по побочным каналам.

Результирующее хеш-значение вычисляется в процессе выполнения «выжимающей» (squeezing) фазы криптографической губки, основу которой также составляет описанная выше функция f. Возможные размеры хеш-значений — 224, 256, 384 и 512 бит.

Aplicaciones

Las funciones hash SHA-2 están implementadas en una gran variedad de aplicaciones y protocolos de seguridad, como por ejemplo: TLS y SSL, PGP, SSH, S/MIME, Bitcoin, y IPsec.

La moneda criptográfica Bitcoin depende en gran medida en un doble uso del SHA-256. El SHA-256 es usado para identificar los paquetes software de Debian GNU/Linux​ y en el estándar de mensaje firmado DKIM; SHA-512 es parte del sistema para identificar los vídeos guardados en el Tribunal Penal Internacional para Ruanda.​ SHA-256 y SHA-512 fueron propuestos para ser usados en DNSSEC.​ Los proveedores de Unix y Linux están adoptando SHA-2 de 256 y 512 bits para aplicarlo en las contraseñas de seguridad.​

SHA-1 y SHA-2 son algoritmos hash de seguridad requeridos por ley en ciertas aplicaciones del  gobierno de Estados Unidos, junto con el uso de otros algoritmos y protocolos criptográficos, para la protección de información clasificada y sensible. FIPS PUB 180-1 también alentó la adopción y uso del SHA-1 por parte de organizaciones privadas y comerciales. El gobierno está dejando de utilizar SHA-1, tal como expone el U.S. National Institute of Standards and Technology, «Las agencias federales deberían dejar de usar el SHA-1 para… aplicaciones que necesiten resistencia de colisión tan pronto como sea posible, y deberán usar familias de funciones hash SHA-2 para estas aplicaciones después de 2010″ (énfasis en el original).​
La directiva de NIST de que las agencias del gobierno estadounidense deban dejar de usar el SHA-1 después de 2010​ y la finalización del SHA-3​ deberían acelerar la migración del SHA-1.

Las funciones SHA-2 no son tan ampliamente usadas como SHA-1, a pesar de su mejora en seguridad. Las razones pueden incluir una falta de soporte del SHA-2 en sistemas que ejecutan Windows XP SP2 o anteriores,​ o por una falta de urgencia percibida mientras no se haya descubierto aún colisiones en el SHA-1.

Применение и сертификация

См. также

SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256 и SHA-512/224 законом США допускаются к использованию в некоторых правительственных приложениях, включая использование в рамках других криптографических алгоритмов и протоколов, для защиты информации, не имеющей грифа секретности. Стандарт также допускает использование SHA-2 частными и коммерческими организациями.

Хеш-функции SHA-2 используются для проверки целостности данных и в различных криптографических схемах. На 2008 год семейство хеш-функций SHA-2 не имеет такого широкого распространения, как MD5 и SHA-1, несмотря на обнаруженные у последних недостатки.

Некоторые примеры применения SHA-2 указаны в таблице:

Область применения Детали
S/MIME SHA-224, SHA-256, SHA-384 или SHA-512 дайджесты сообщений
OpenLDAP SHA-256, SHA-384 или SHA-512 хеши паролей
DNSSEC SHA-256 дайджесты DNSKEY в протоколе DNSSEC
X.509 SHA-224, SHA-256, SHA-384 и SHA-512 используются для создания электронной цифровой подписи сертификата
PGP SHA-256, SHA-384, SHA-512 используются для создания электронной цифровой подписи
IPSec Некоторые реализации поддерживают SHA-256 в протоколах ESP и IKE
DSA Семейство SHA-2 используется для создания электронной цифровой подписи
SHACAL-2 Блочный алгоритм шифрования SHACAL-2 построен на основе хеш-функции SHA-256
Bitcoin Эмиссия криптовалюты Bitcoin осуществляется посредством поиска строк, SHA-256-хеш которых имеет заданную структуру

Как показали исследования, алгоритмы SHA-2 работают в 2—3 раза медленнее других популярных хеш-алгоритмов MD5, SHA-1, Tiger и RIPEMD-160.

Сертификация

Реализации SHA-2, как и всех Федеральных стандартов обработки информации, могут быть сертифицированы для использования в некоторых приложениях на территории США. Сертификация происходит в рамках процедуры , которая проводится Национальным институтом стандартов и технологий США совместно с канадским Бюро безопасности связи.

На 5 ноября 2008 года было сертифицировано более 250 реализаций SHA-2, четыре из которых могли оперировать сообщениями с длиной в битах, не кратной восьми.

Сертифицировано FIPS PUB 180-4, CRYPTREC и NESSIE.

Примеры

Ниже приведены примеры хешей SHA-2. Для всех сообщений подразумевается использование кодировки ASCII.

SHA-224("The quick brown fox jumps over the lazy dog") 
 = 730E109B D7A8A32B 1CB9D9A0 9AA2325D 2430587D DBC0C38B AD911525
SHA-256("The quick brown fox jumps over the lazy dog") 
 = D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592
SHA-384("The quick brown fox jumps over the lazy dog") 
 = CA737F10 14A48F4C 0B6DD43C B177B0AF D9E51693 67544C49 4011E331 7DBF9A50
   9CB1E5DC 1E85A941 BBEE3D7F 2AFBC9B1
SHA-512("The quick brown fox jumps over the lazy dog") 
 = 07E547D9 586F6A73 F73FBAC0 435ED769 51218FB7 D0C8D788 A309D785 436BBB64
   2E93A252 A954F239 12547D1E 8A3B5ED6 E1BFD709 7821233F A0538F3D B854FEE6
SHA-512/256("The quick brown fox jumps over the lazy dog") 
 = DD9D67B3 71519C33 9ED8DBD2 5AF90E97 6A1EEEFD 4AD3D889 005E532F C5BEF04D
SHA-512/224("The quick brown fox jumps over the lazy dog") 
 = 944CD284 7FB54558 D4775DB0 485A5000 3111C8E5 DAA63FE7 22C6AA37

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

SHA-256("The quick brown fox jumps over the lazy cog") 
 = E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *