Какой шифр для шифрования пакетов UDP? - PullRequest
1 голос
/ 06 октября 2010

У меня есть приложение, которое выполняет чувствительную ко времени связь по UDP (например, потоковое видео или игра).Пакеты могут быть утеряны и не требуют повторной передачи.

Какой шифр я должен использовать для шифрования дейтаграмм?

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

Ответы [ 3 ]

2 голосов
/ 06 октября 2010

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

Конечно, для сообщений длиннее, чем один блок, вам нужно увеличить счетчик более одного раза в пакете. Я бы определил, сколько блоков будет иметь самый длинный передаваемый пакет, например, 16 блоков, и использовал бы значения счетчиков 16*n для первого блока в пакете, 16*n+1 для второго и т. Д.

1 голос
/ 07 октября 2010

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

Если ваши UDP-пакеты содержат некоторую информацию о последовательности, вы можете использовать ее в качестве счетчика в режиме CTR или в режиме XEX (или XTS). XEX был разработан для ситуаций шифрования, в которых шифрование данных может потребоваться выполнять в произвольном порядке блоков, как в случае с зашифрованными устройствами с произвольным доступом, такими как жесткие диски, и было бы идеально для такой ситуации, как ваша.

См. http://en.wikipedia.org/wiki/Disk_encryption_theory#XEX

1 голос
/ 06 октября 2010

Вы можете использовать режим CBC, вам просто нужно зашифровать каждый пакет как отдельный поток CBC.Это означает перезапуск CBC каждого пакета со свежим IV.

Между прочим, Blowfish - это всего лишь 64-битный (размер блока) блочный шифр, что в наши дни присуще ему довольно низким пределом безопасности.

...