Оптимизированный алгоритм отслеживания сетевых пакетов (предотвращение повторной атаки) - PullRequest
2 голосов
/ 30 ноября 2010

Я использую сетевой сервер, который обрабатывает пакеты udp.Я хочу избежать атак повторного воспроизведения, когда злоумышленник может скопировать пакеты udp и воспроизвести их позже.Я играю с идеей, что могу хэшировать пакет и хранить это значение в хеш-таблице.Затем я могу выполнять один и тот же процесс при каждом получении пакета, а затем искать его в хэш-таблице.Если он уже существует, мы отклоняем пакет, однако, если мы никогда не видели его (запись не существует), мы сохраняем его для будущего использования.

Теперь, какой алгоритм хеширования подойдет для этого?Нужно ли мне что-то кроме хэш-таблицы?Поскольку получено много пакетов udp, я хочу, чтобы это работало в O (1) !!!!!!;-), возможно ли это?

Очевидно, что чем дольше я «запоминаю» хэши, тем больше памяти (состояния) мне нужно будет выделить, может ли хеш-таблица динамически расти и уменьшаться со временем?1006 * Я, может быть, далеко отсюда, мне может вообще не понадобиться хеш-таблица!я открыт для идей !!

Ответы [ 2 ]

3 голосов
/ 30 ноября 2010

У вас есть контроль над содержимым пакета?Если это так, добавьте хеш к содержимому и используйте его, который перемещает усилие хеширования отправителю.Вы также можете указать срок действия, чтобы а) вы знали, что можете отказаться от любой записи пакета после этого времени, и б) пакет, сохраненный злоумышленником, станет бесполезным после этого времени.Возможно, вы захотите каким-то образом зашифровать отметку времени, чтобы злоумышленник не мог просто обновить отметку времени.

Другие методы можно найти в Википедии

1 голос
/ 30 ноября 2010

Использование хеш-таблицы для пакетов может быть дорогостоящим, потому что вам придется перефразировать вашу хеш-таблицу, которая равна O (n).

В этой ситуации вам следует согласовать общий секрет между сервером и каждым клиентом. Этот секретный ключ K затем используется для создания кода аутентификации сообщения . Проверяемое Сообщение должно быть данными, которые вы передаете в UDP-пакете вместе с отметкой времени. Идентификаторы последовательностей неблагоприятны, поскольку нет никакой гарантии, что пакет UDP будет доставлен вообще, и возможно, что пакеты поступят не по порядку.

Следует отметить, что эта атака невозможна при использовании TCP из-за трехстороннего рукопожатия и идентификаторов последовательности. В этом случае безопасность, обеспечиваемая TCP, может фактически быть легче, чем предлагаемая система безопасности.

...