Обзор
NTCP2 (предложение 111) не отклоняет подключения с различными ID сетей на этапе запроса сессии. В настоящее время подключение должно быть отклонено на этапе подтверждения сессии, когда Боб проверяет RI Алисы.
Аналогично, SSU не отклоняет подключения с различными ID сетей на этапе запроса сессии. Подключение должно в настоящее время быть отклонено после этапа подтверждения сессии, когда Боб проверяет RI Алисы.
Это предложение изменяет этап запроса сессии для обоих транспортов, чтобы включать ID сети, и делает это обратно совместимым образом.
Мотивация
Подключения с неверной сети должны быть отклонены, и пир должен быть занесен в черный список как можно быстрее.
Цели
Предотвратить перекрестное заражение тестовых сетей и разветвленных сетей
Добавить ID сети в рукопожатие NTCP2 и SSU
Для NTCP2, получатель (входящее подключение) должен быть способен определить, что ID сети отличается, чтобы он мог занести IP пира в черный список.
Для SSU, получатель (входящее подключение) не может занести в черный список на этапе запроса сессии, потому что входящий IP может быть подделан. Достаточно изменить криптографию рукопожатия.
Предотвратить повторное засевание из неверной сети
Должно быть обратно совместимо
Не являющиеся целями
- NTCP 1 больше не используется, поэтому он не будет изменен.
Дизайн
Для NTCP2, XOR-е значение просто приведет к провалу шифрования, и получатель не будет иметь достаточно информации, чтобы занести источник в черный список, поэтому этот подход не предпочтителен.
Для SSU, мы будем добавлять XOR ID сети где-то в запросе сессии. Поскольку это должно быть обратно совместимо, мы добавим XOR (id - 2), так что это будет бездействие для текущего значения ID сети 2.
Спецификация
Документация
Добавьте следующую спецификацию для допустимых значений ID сети:
| Использование | Номер NetID |
|---|---|
| Зарезервировано | 0 |
| Зарезервировано | 1 |
| Текущая сеть (по умолчанию) | 2 |
| Зарезервировано для будущих сетей | 3 - 15 |
| Форки и тестовые сети | 16 - 254 |
| Зарезервировано | 255 |
Конфигурация Java I2P для изменения значения по умолчанию — “router.networkID=nnn”. Документируйте это лучше и поощряйте форки и тестовые сети добавлять эту настройку в их конфигурацию. Поощряйте другие реализации внедрять и документировать эту опцию.
NTCP2
Используйте первый зарезервированный байт опций (байт 0) в сообщении запроса сессии для хранения ID сети, в настоящее время 2. Он содержит ID сети. Если ненулевой, получатель должен проверить его с младшим значимым байтом локального ID сети. Если они не совпадают, получатель должен немедленно разорвать соединение и занести IP источника в черный список.
SSU
Для SSU добавьте XOR ((netid - 2) « 8) в расчет HMAC-MD5.
Существующий:
HMAC-MD5(encryptedPayload + IV + (payloadLength ^ protocolVersion), macKey)
'+' означает добавление, а '^' означает исключающее «или».
payloadLength — 2-байтное целое без знака
protocolVersion — 1 байт 0x00
Новый:
HMAC-MD5(encryptedPayload + IV + (payloadLength ^ protocolVersion ^ ((netid - 2) << 8)), macKey)
'+' означает добавление, '^' означает исключающее «или», '<<' означает сдвиг влево.
payloadLength — два байта unsigned integer, big endian
protocolVersion — два байта 0x0000, big endian
netid — два байта unsigned integer, big endian, допустимые значения 2-254
Повторное засевание
Добавьте параметр ?netid=nnn к загрузке файла повторного засева su3. Обновите программное обеспечение для повторного засева, чтобы оно проверяло netid. Если он присутствует и не равен “2”, запрос должен быть отклонен с кодом ошибки, например, 403. Добавьте опцию конфигурации в программное обеспечение для повторного засева, чтобы альтернативный netid мог быть настроен для тестовых или разветвленных сетей.
Примечания
Мы не можем заставить тестовые сети и форки изменить ID сети. Лучшее, что мы можем сделать, — это документация и общение. Если мы обнаружим перекрестное заражение с другими сетями, мы должны попытаться связаться с разработчиками или операторами, чтобы объяснить важность изменения ID сети.
Вопросы
Миграция
Это обратно совместимо для текущего значения ID сети 2. Если кто-либо запускает сети (тестовые или иные) с другим значением ID сети, это изменение будет обратно несовместимым. Однако нам не известно, что кто-либо делает это. Если это только тестовая сеть, это не проблема, просто обновите все маршрутизаторы одновременно.