Алгоритмы хэширования
Алгоритмы хэширования
Криптографическими методами можно обеспечить не только конфиденциальность, но и проконтролировать целостность передаваемых или хранимых данных. Контроль целостности в основном осуществляется путем расчета некоторой "контрольной суммы" данных. На сегодняшний день известно множество алгоритмов, рассчитывающих контрольные суммы передаваемых данных. Проблема простых алгоритмов вычисления контрольной суммы состоит в том, что достаточно легко подобрать несколько массивов данных, имеющих одинаковую контрольную сумму. Криптографически стойкие контрольные суммы вычисляются как результат применения к исходному тексту так называемой хэш-функции. Под этим термином понимаются функции, отображающие сообщения произвольной длины (иногда длина сообщения ограничена, но достаточно велика) в значения фиксированной длины [212]. Последние часто называют хэш-кодами, или дайджестами, сообщений. Хэш-функции - это необходимый элемент ряда криптографических схем.
Главными свойствами "хорошей" в криптографическом смысле хэш-функции являются свойство необратимости, свойство стойкости к коллизиям и свойство рассеивания. Необратимость означает, что вычисление обратной функции (то есть восстановление значения аргумента по известному значению функции) оказывается невозможно теоретически или (в крайнем случае) невозможно вычислительно. Свойство стойкости к коллизиям хэш-функции H выражается в невозможности найти два разных сообщения T1 и T2 с одинаковым результатом преобразования H(T1) = H(T2). Хэш-код может быть повторно получен для того же сообщения любым пользователем, но практически невозможно создать разные сообщения для получения одного и того же хэш-кода сообщения. Значение хэш-функции всегда имеет фиксированную длину, а на длину исходного текста не накладывается никаких ограничений. Свойство рассеивания требует, чтобы минимальные изменения текста, подлежащего хэшированию, вызывали максимальные изменения в значении хэш-функции [37].
Хэш-код сообщения может использоваться для обеспечения целостности. Отправитель посылает сообщение вместе с контрольным значением - хэш-кодом, и если сообщение было изменено, контрольное значение также будет другим. Получатель может вновь вычислить хэш-код сообщения, чтобы убедиться, что данные не были случайно изменены. Однако это не защищает получателя от действий злоумышленника, который может перехватить и заменить сообщение отправителя и хэш-код.
Хэш-функция может использоваться для создания так называемого кода аутентификации сообщения на основе вычисления хэша HMAC (Hash Message Authentication Checksum). Если отправитель посылает сообщение и его HMAC получателю, то последний может повторно вычислить HMAC, чтобы проверить, не были ли данные случайно изменены при передаче. Сторонний наблюдатель может перехватить сообщение отправителя и заменить его на новое, но, не зная секретного ключа, не имеет возможности рассчитать соответствующий HMAC. Если получатель доверяет отправителю, то принимает HMAC как подтверждение подлинности его сообщения.
Обычно коды HMAC используются только для быстрой проверки того, что содержимое не было изменено при передаче. Для создания уникальной, подлежащей проверке подписи необходим другой способ - он заключается в шифровании хэш-кода сообщения при помощи секретного ключа лица, поставившего подпись. В этом случае хэш-функция используется в схемах электронной цифровой подписи (ЭЦП). Поскольку применяемые на практике схемы электронной подписи не приспособлены для подписания сообщений произвольной длины, а процедура разбиения сообщения на блоки и генерации подписи для каждого блока по отдельности крайне неэффективна, - схему подписи применяют к хэш-коду сообщения. Очевидно, что наличие эффективных методов поиска коллизий для хэш-функции подрывает стойкость протокола электронной подписи [212]. Хэш-функции используются также в некоторых протоколах аутентификации для снижения их коммуникационной сложности, то есть для уменьшения длин пересылаемых сообщений, а также в некоторых других криптографических протоколах.
Существует множество алгоритмов, реализующих хэш-функции. К ним относятся алгоритмы вычисления хэш-кодов, созданные Роном Ривестом (MD2, MD5), SHA и его вариант SHA1, российский алгоритм, описываемый стандартом ГОСТ Р 34.11-94 [15].
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Алгоритмы
Алгоритмы Алгоритм — это последовательность действий, возможно, с одним входом или более и, в конечном счете, с одним результатом или выходом. Например, подсчет количества людей в комнате представляет собой алгоритм, для которого люди, находящиеся в комнате, являются
STL: алгоритмы
STL: алгоритмы Предпочитайте алгоритмы циклам. — Бьярн Страуструп (Bjarne Stroustrup), [Stroustrup00] §18.12 Алгоритмы представляют собой циклы — только они лучше циклов. Алгоритмы — это "шаблоны" циклов, с добавлением дополнительной семантики по сравнению с простыми for и do. Конечно, начав
Алгоритмы
Алгоритмы В начале главы 1 я упоминал о том, что львиная доля репутации STL связана с контейнерами, и это вполне объяснимо. Контейнеры обладают массой достоинств и упрощают повседневную работу бесчисленных программистов С++. Но и алгоритмы STL тоже по-своему замечательны и в
АЛГОРИТМЫ
АЛГОРИТМЫ Все алгоритмы отделены от деталей реализации структур данных и используют в качестве параметров типы итераторов. Поэтому они могут работать с определяемыми пользователем структурами данных, когда эти структуры данных имеют типы итераторов, удовлетворяющие
6.6.3. Обобщенные алгоритмы
6.6.3. Обобщенные алгоритмы Операции, описанные в предыдущих разделах, составляют набор, поддерживаемый непосредственно контейнерами vector и deque. Согласитесь, что это весьма небогатый интерфейс и ему явно не хватает базовых операций find(), sort(), merge() и т.д. Планировалось
12. Обобщенные алгоритмы
12. Обобщенные алгоритмы В нашу реализацию класса Array (см. главу 2) мы включили функции-члены для поддержки операций min(), max() и sort(). Однако в стандартном классе vector эти, на первый взгляд фундаментальные, операции отсутствуют. Для нахождения минимального или максимального
12.5. Обобщенные алгоритмы
12.5. Обобщенные алгоритмы Первые два аргумента любого обобщенного алгоритма (разумеется, есть исключения, которые только подтверждают правило) – это пара итераторов, обычно называемых first и last, ограничивающих диапазон элементов внутри контейнера или встроенного массива,
12.5.1. Алгоритмы поиска
12.5.1. Алгоритмы поиска Тринадцать алгоритмов поиска предоставляют различные способы нахождения определенного значения в контейнере. Три алгоритма equal_range(), lower_bound() и upper_bound() выполняют ту или иную форму двоичного поиска. Они показывают, в какое место контейнера можно
12.5.4. Алгоритмы перестановки
12.5.4. Алгоритмы перестановки Рассмотрим последовательность из трех символов: {a,b,c}. Для нее существует шесть различных перестановок: abc, acb, bac, bca, cab и cba, лексикографически упорядоченных на основе оператора “меньше”. Таким образом, abc – это первая перестановка, потому что
12.5.5. Численные алгоритмы
12.5.5. Численные алгоритмы Следующие четыре алгоритма реализуют численные операции с контейнером. Для их использования необходимо включить заголовочный файл numeric.accumulate(), partial_sum(), inner_product(),
12.5.7. Алгоритмы сравнения
12.5.7. Алгоритмы сравнения Семь алгоритмов дают разные способы сравнения одного контейнера с другим (алгоритмы min() и max() сравнивают два элемента). Алгоритм lexicographical_compare() выполняет лексикографическое (словарное) упорядочение (см. также обсуждение перестановок и
Симметричные алгоритмы PGP
Симметричные алгоритмы PGP PGP располагает набором различных алгоритмов с тайным ключом, шифрующих само сообщение. Под алгоритмами с тайным ключом мы подразумеваем симметричные блочные шифры, использующие один и тот же ключ как для зашифрования, так и для расшифрования.
Симметричные алгоритмы
Симметричные алгоритмы Использование симметричных криптографических алгоритмов предполагает наличие взаимного доверия сторон, участвующих в обмене электронными документами или сообщениями, так как для шифрования и расшифрования применяется известный им один и тот
Асимметричные алгоритмы
Асимметричные алгоритмы Асимметричная криптография, также известная как криптография с открытыми ключами, использует класс алгоритмов, в которых применяется пара ключей: открытый ключ и секретный (личный) ключ, известный только его владельцу. В отличие от секретного