[О блоге]
[наверх]
[пред]
[2016-05-10 11:48:22+03:00]
[27478bbfe9cd717b8f5274c973abacad22870e6b]
Релиз GoVPN 5.8
Сделал очередной минорный релиз GoVPN. Добавлена возможность
логгирования в syslog и теперь от XTEA алгоритма полностью избавился. Он
использовался для обфускации nonce передаваемого. Для безопасности,
конфиденциальности это не нужно -- его можно передавать хоть в открытом
виде, но его рандомизация нужна чтобы трафик полностью выглядел как шум,
для "борьбы" с DPI.
Nonce это 64-бит счётчик. XTEA это 64-бит блочный шифр, PRP который
как-раз просто преобразует значение одного пространства в другое. А так
как это PRP, то можно сделать и обратное преобразование. Чем это
напрягает? Тем что функция шифрования, как таковая, остаётся и в
encryptionless режиме.
Заменил этот PRP на MAC, точнее BLAKE2b-MAC (BLAKE2 и так уже в коде
есть). Проблема в том, что это односторонняя функция, как и хэш, это PRF
у которого нет обратного преобразования. Для TCP режима это не проблема.
Nonce там используется фактически для того чтобы "отделять" границы
пакетов между собой и мы всегда и так знаем какой должен быть следующий
nonce и поэтому обратное преобразование излишне -- достаточно просто
сравнить что пришло с тем что ожидаем. А вот в UDP режиме, когда пакеты
могут меняться местами, мы уже не знаем его значение. Я решил просто в
памяти хранить некоторое количество предвычисленных ожидаемых значений
MAC.
Как и прежде, имеем некие bucket-ы, однако до этого в них добавлялись
встреченные nonce-ы и проверялось что их больше не видно. Было 2 bucket,
где когда они заполнялись, то один уничтожался и все nonce-ы раньше него
уже априори считаются невалидными (то есть нельзя задерживать пакеты
надолго, имеется некое допустимое окно). Теперь bucket-ы заранее
полностью заполняются и встреченные nonce удаляются из них. Имеется три
bucket и когда начинаются удаления nonce-ов из "последнего", то один
удаляется, один добавляется. Вычисления MAC-ов происходят в фоне заранее.
[оставить комментарий]