На этой странице:

Класс HashAlgorithm

Класс HashAlgorithm обладает публичным свойством Hash, которое представляет собой байтовый массив, содержащий в себе вычисленный хеш. Публичное свойство HashSize содержит значение размера хеша в битах. Наиболее важный публичный метод класса HashAlgorithm - метод Сот- puteHash, возвращающий значение хеша в виде байтового массива, вычисленное для заданных во входном параметре - байтовом массиве - входных данных. В следующем коде иллюстрируется применение класса HashAlgorithm на примере конкретного производного класса, инкапсулирующего алгоритм SHA-1. Предполагается, что входные данные уже существуют в форме байтового массива message By te Array.

HashAlgorithm shal = new SHAlCryptoServiceProvider(); byte[] shalHash = shal.ComputeHash(messageByteArray);

Классы MD5 и SHA

Класс MD5 инкапсулирует алгоритм MD5, который производит 128-бито- вый хеш из входных данных произвольного размера. Алгоритм «дайджеста сообщения» MD5 определен стандартом RFC 13211. Этот алгоритм первоначально предназначался для приложений цифровой подписи, в которых хеш (то есть дайджест сообщения) шифруется секретным ключом RSA. MD5 является расширением алгоритма MD4 (опубликованного Ри- вестом в 1990), при этом, работая немного медленнее, он обеспечивает более высокий уровень безопасности.

Класс SHA1 инкапсулирует алгоритм SHA-1. Алгоритм SHA-1 может обрабатывать входные данные размером не более 264 бит, производя при этом хеш размером 160 бит. Этот дайджест сообщения можно использовать в алгоритме DSA[1] [2], как мы увидим чуть ниже. Алгоритм SHA-1 был принят в качестве стандарта NIST под названием SHS (Secure Hash Standard - стандарт безопасного хеша), который опубликован в документе FIPS PUB 180-1[3]. Интересно отметить, в документе FIPS PUB 180-1 утверждается, что алгоритм SHA-1 основан на принципах, сходных с принципами алгоритма дайджеста сообщения MD4. Таким образом, две наиболее широко используемых хеш-функции, MD5 и SHA-1, тесно связаны друг с другом.

Классы SHA256, SHA384 и SHA512 инкапсулируют набор родственных хеш-алгоритмов, которые производят хеши размером 256, 384 и 512 бит. Эти новые алгоритмы, определенные документом FIPS PUB 180-21 в 2002 году, ведут свое происхождение от SHA-1. Они были созданы, поскольку со времени первоначальной публикации SHA-1 в 1993 году возникли опасения, что размер хеша в 160 бит не обеспечивает высоконадежной защиты на длительную перспективу. В то время как атака методом «грубой силы» на «-битовый симметричный алгоритм измеряется рабочим фактором, пропорциональным 2", такая же атака на «-битовый криптографический хеш, измеряется рабочим фактором, пропорциональным 2п/2. Причина кроется в том, что атака «по дню рождения»[4] [5] (birthday attack) на хеш считается успешной, если найдены всего два варианта входных данных, дающих одинаковые хеши. Следовательно, рабочий фактор атаки на 160-битовый алгоритм SHA-1 пропорционален, практически, всего лишь 280. Это достаточно большое число, и такая атака, вероятно, недоступна почти для всех современных противников, но для критически важных случаев и в расчете на длительный период этот уровень безопасности, вероятно, уже недостаточен.

Интересно отметить, что новый стандарт симметричного шифрования AES, известный также под названием Rijndael, предусматривает три варианта, отличающихся длиной ключа: AES-128, AES-192 и AES-256. Вы можете заметить, что размеры хеша в алгоритме SHA (256, 384 и 512) в точности равны удвоенным длинам ключей в AES (128, 192, 256). Поскольку хеш уязвим для атаки методом «грубой силы» с рабочим фактором, равным половине рабочего фактора для атаки на симметричный шифр, такие размеры хеша точно уравнивают стойкость шифра и хеша. Это обстоятельство очень важно в случае, когда речь идет о криптографическом протоколе, использующим симметричный шифр и хеш одновременно. Стойкость протокола определяется стойкостью его самого слабого звена. Например, если вы используете очень сильный симметричный алгоритм в сочетании со слабым хешем (или наоборот), противник сможет атаковать ту часть протокола, которая обладает наименьшей стойкостью. Фактически, вы напрасно потратили процессорное время и другие ресурсы на реализацию самого сильного звена. И напротив, если вы сочетаете в протоколе алгоритмы равной стойкости, то без лишних затрат получаете точно рассчитанный уровень безопасности.

  • [1] Подробней см. http://www.faqs.org/rfcs/rfcl321 .html.
  • [2] Алгоритм DSA основывается на задаче дискретных логарифмов, первоначально предложенной Шнорром (Schnorr) и ЭльГамалем (ElGamal).
  • [3] Подробней см. http://www.csre.nist.gov/pubtications/fips/fipsl801.pdf.
  • [4] Подробней см. hUp://www.csrc.nist.gov/publications/fips/fipsl80-2.pdf. Документ FIPS180-2, который, кроме версий 256, 384 и 512, описывает также алгоритм SIIA-1, заменяет документ 180-1.
  • [5] Выражение «атака по дню рождения» описывает метод «грубого» поиска коллизий дляхеш-функции. Выражение это происходит из сценария в теории вероятности, который называют «Проблемой дня рождения». Сценарий относится к вычислению вероятности того, что вслучайной группе людей найдется два человека с одинаковыми днями рождения. Хотя, интуитивно, такая вероятность кажется достаточно низкой, на самом деле минимальный размергруппы, в которой эта вероятность будет равна 50%, составляет всего 23 человека.
 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >