From 27478bbfe9cd717b8f5274c973abacad22870e6b Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Tue, 10 May 2016 11:48:22 +0300 Subject: [PATCH] =?utf8?q?=D0=A0=D0=B5=D0=BB=D0=B8=D0=B7=20GoVPN=205.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Сделал очередной минорный релиз 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-ов происходят в фоне заранее. -- 2.50.0