From: Sergey Matveev Date: Tue, 10 May 2016 08:48:22 +0000 (+0300) Subject: Релиз GoVPN 5.8 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=27478bbfe9cd717b8f5274c973abacad22870e6b;p=stargrave-blog.git Релиз 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-ов происходят в фоне заранее. ---