- •Сетевые электронные ключи
- •Электронный ключ Guardant Sign Net
- •Электронный ключ Guardant Time Net
- •Принцип сетевой защиты
- •Для чего нужны электронные usb-ключи и смарт-карты eToken?
- •Преимущества eToken
- •Принцип работы
- •Формальное описание
- •Структура сертификата
- •Российские стандарты
- •Виды хеш-функций
- •Мультипликативная схема хеширования
- •Хеширование строк переменной длины
- •Идеальное хеширование
- •Описание
- •Универсальное хеширование
- •Описание
- •Технические преимущества ViPNet custom
- •Коммерческие преимущества ViPNet custom
Российские стандарты
В России действуют свои криптографические стандарты. Использование их совместно с сертификатами описано в RFC4491: Using GOST with PKIX.
Хеширование (иногда «хэширование», англ. hashing) — преобразование по детерминированному алгоритму входного массива данных произвольной длины в выходную битовую строку фиксированной длины. Такие преобразования также называются хеш-функциями или функциями свёртки, а их результаты называют хешем, хеш-кодом или сводкой сообщения (англ. message digest). Если у двух строк хеш-коды разные, строки гарантированно различаются, если одинаковые — строки, вероятно, совпадают.
Хеширование применяется для построения ассоциативных массивов, поиска дубликатов в сериях наборов данных, построения достаточно уникальных идентификаторов для наборов данных, контрольное суммирование с целью обнаружения случайных или намеренных ошибок при хранении или передаче, для хранения паролей в системах защиты (в этом случае доступ к области памяти, где находятся пароли, не позволяет восстановить сам пароль), при выработке электронной подписи (на практике часто подписывается не само сообщение, а его хеш-образ).
В общем случае однозначного соответствия между исходными данными и хеш-кодом нет в силу того, что количество значений хеш-функций меньше, чем вариантов входного массива; существует множество массивов с разным содержимым, но дающих одинаковые хеш-коды — так называемые коллизии. Вероятность возникновения коллизий играет немаловажную роль в оценке качества хеш-функций.
Существует множество алгоритмов хеширования с различными свойствами (разрядность, вычислительная сложность, криптостойкость и т. п.). Выбор той или иной хеш-функции определяется спецификой решаемой задачи. Простейшими примерами хеш-функций могут служить контрольная сумма или CRC.
Виды хеш-функций
Хорошая хеш-функция должна удовлетворять двум свойствам:
Быстро вычисляться;
Минимизировать количество коллизий
Предположим, для
определённости, что количество ключей
,
а хеш-функция
имеет
не более
различных
значений:
В качестве примера
«плохой» хеш-функции можно привести
функцию с
,
которая десятизначному натуральном
числу
сопоставляет
три цифры выбранные из середины
двадцатизначного квадрата числа
.
Казалось бы значения хеш-кодов должны
равномерно распределиться между «000»
и «999», но для реальных данных такой
метод подходит лишь в том случае, если
ключи не имеют большого количества
нулей слева или справа.[3]
Однако существует несколько более простых и надежных методов, на которых базируются многие хеш-функции.
Хеш-функции основанные на делении
Первый метод заключается в том, что мы используем в качестве хеша остаток от деления на , где это количество всех возможных хешей:
При этом очевидно, что при чётном значение функции будет чётным, при чётном , и нечётным — при нечётном, что может привести к значительному смещению данных в файлах. Также не следует использовать в качестве степень основания счисления компьютера, так как хеш-код будет зависеть только от нескольких цифр числа , расположенных справа, что приведет к большому количеству коллизий. На практике обычно выбирают простое — в большинстве случаев этот выбор вполне удовлетворителен.
Ещё следует сказать
о методе хеширования, основанном на
делении на полином по модулю два. В
данном методе
также
должна являться степенью двойки, а
бинарные ключи (
)
представляются в виде полиномов. В этом
случае в качестве хеш-кода берутся
значения коэффциентов полинома,
полученного как остаток от деления
на
заранее выбранный полином
степени
:
При правильном
выборе
такой
способ гарантирует отсутствие коллизий
между почти одинаковыми ключами.[3]
