хэш функция пример

5.4.1. Алгоритмы шифрования
Основная задача криптографии — обеспечение секретности — реализуется при помощи алгоритмов шифрования. Эти алгоритмы, по определению, являются обратимыми, т. к. в противном случае восстановить зашифрованные данные будет не всегда возможно.
Любой алгоритм шифрования, называемый также шифром, представляет собой две связанных математических функции, используемых для прямого и обратного преобразования информации (зашифрования и расшифрования). В некоторых алгоритмах зашифрование и расшифрование могут выполняться одной и той же функцией.
Раньше защита, обеспечиваемая шифром, часто основывалась на секретности самого алгоритма шифрования. Криптографические алгоритмы, требующие сохранения в тайне последовательности преобразования данных, называются ограниченными и в настоящее время практически не находят применения — использование такого алгоритма большим количеством участников информационного обмена затрудняет обеспечение его секретности. А если один из членов рабочей группы, защищавшей внутреннюю информацию ограниченным алгоритмом, решает покинуть группу, то всем оставшимся участникам придется, во избежание возможной утечки информации, переходить на использование другого алгоритма.
Еще одна проблема, связанная с применением ограниченных алгоритмов, заключается в том, что каждая группа пользователей должна применять свой уникальный, никому больше не известный алгоритм. Следовательно, алгоритм должен бьпь разработан внутри этой группы. А для разработки хорошего алгоритма шифрования необходимы весьма глубокие познания в криптографии, которые есть далеко не у каждого человека.

В современных шифрах применяют другой подход, определяемый принципом Керкхоффса (Kerckhoffs). Согласно этому принципу в криптосистеме используется сменный элемент, называемый ключом, и секретность шифра обеспечивается секретностью ключа шифрования, а не секретностью алгоритма. Таким образом, открытое опубликование всех деталей реализации криптографического алгоритма не должно снижать надежность шифра, если ключ шифрования сохраняется в секрете. Кроме того, смена ключа выполняется гораздо проще, чем смена алгоритма, особенно если шифрование реализовано аппаратно.
Хороший алгоритм шифрования имеет следующие статистические характеристики:
- отсутствие статистической зависимости между открытым текстом и шифр-текстом;
- шифртекст по статистическим характеристикам не отличим от истинно случайной последовательности;
- изменение любого бита в ключе шифрования при неизменном открытом тексте приводит к изменению примерно 50% бит шифртекста (для симметричных алгоритмов);
- изменение любого бита в блоке открытого текста при неизменном ключе шифрования приводит к изменению примерно 50% бит шифртекста (для блочных алгоритмов). 5.4.2. Криптографические хэш-функции
Криптографические хэш-функции призваны преобразовать входную последовательность произвольного размера в выходное значение фиксированной длины. Термин "хэш-функция" используется также для обозначения функции отображения при доступе к хэш-таблицам — структурам данных, используемых во многих алгоритмах. У таких функций много свойств, делающих их схожими с криптографическими хэш-функциями, но это разные вещи, и ни в коем случае не стоит путать хэш-функции для хэш-таблиц с криптографическими хэш-функциями. В этой книге рассказывается только о криптографических хэш-функциях.

Криптографические хэш-функции применяются в криптографии повсеместно: в протоколах аутентификации, цифровой подписи, в генераторах псевдослучайных последовательностей и т. д.
Хорошая хэш-функция равномерно и случайно отображает множество всех возможных входных сообщений во множество результирующих хэшей.
Криптографическая хэш-функция должны быть однонаправленной. То есть, зная значения хэша, злоумышленник не должен иметь эффективной возможности найти исходное сообщение. Более того, не должно быть эффективного способа найти любое сообщение, вычисление хэш-функции от которого даст требуемое значение хэша (хотя таких сообщений бесконечно много, т. к. количество разных выходных значений определяется размером хэша, а множество входных сообщений безгранично).
Также хорошая криптографическая хэш-функция не должна позволять злоумышленнику подобрать два сообщения, для которых значения хэшей будут совпадать. 5.4.3. Криптографические генераторы псевдослучайных чисел
Случайные числа требуются в криптографии очень часто. Симметричный ключ шифрования должен выбираться случайным образом. При генерации ключей для асимметричной криптосистемы необходимо иметь достаточно большой объем случайных данных. Корректная реализация асимметричных криптоалгоритмов, например RSA, требует добавлять к каждой порции открытого текста несколько случайных байт.
Однако в компьютере, в общем случае, нет хорошего источника случайности, способного выдавать значительные объемы истинно случайных данных. Поэтому в криптографии находят широкое применение генераторы псевдослучайных чисел.
Псевдослучайные данные совсем не то же самое, что истинно случайные. Генератор псевдослучайных чисел использует детерминированный алгоритм и выдает последовательность значений, зависящую от начального значения (seed value), загруженного в генератор. Зная начальное значение, легко повторить последовательность, выдаваемую генератором.
Большинство языков программирования содержат функции для генерации псевдослучайных чисел. Но эти функции в подавляющем большинстве не удовлетворяют жестким требованиям, которые предъявляет криптография к генераторам псевдослучайных чисел:
последовательность, выдаваемая алгоритмом генерации псевдослучайных чисел, должна иметь как можно больший период;
зная любой фрагмент последовательности, выдаваемой генератором, злоумышленник не должен иметь эффективной возможности найти начальное значение, загруженное в генератор;
зная любой фрагмент последовательности, выдаваемой генератором, злоумышленник не должен иметь возможности получить достоверную информацию о предьщущих или последующих элементах последовательности.
Такие функции генерации псевдослучайных чисел, как, например, rand из стандартной библиотеки языка С, не удовлетворяют ни одному из перечисленных требований. Поэтому не стоит пользоваться для защиты информации генераторами, встроенными в языки программирования, если достоверно не известна их криптографическая стойкость.

кэш функция селезенки

хеш функция

повторюсь. хэш -- это любая НЕОБРАТИМАЯ функция. даже операция MOD(x) (или возведение в квадрат) является хэшем, ибо необратимо меняет данные

Читать

что такое кэш dns и нужно ли его чистить

2.1 Хеш-функции, основанные на делении. 2.2 Мультипликативная схема хеширования. 2.3 Хеширование строк переменной длины.