Skip to content

feat: опциональные ML-DSA65 post-quantum ключи Reality #34

Description

@nozikov

Зачем

Сейчас Reality использует X25519 (классический ECDH). Это надёжно сегодня, но уязвимо к harvest-now-decrypt-later атаке: пробер записывает зашифрованный трафик и расшифровывает его лет через 5-10, когда появятся достаточно мощные квантовые компьютеры (CRQC). Особенно актуально для пользователей в авторитарных режимах — записанный трафик может всплыть позже.

XRAY с какой-то версии (надо проверить) поддерживает ML-DSA65 — post-quantum signature scheme, стандартизированная NIST в 2024. Команда xray mldsa65 генерирует пары Seed/Verify, которые подставляются в Reality realitySettings.

Профит спорный (РКН пока нет CRQC), но это бесплатный hardening — ключ генерится разово, runtime-overhead нулевой.

Подсмотрено в xVRVx/autoXRAY:

key_mldsa65=\$(xray mldsa65)
seed_mldsa65=\$(echo \"\$key_mldsa65\" | awk -F': ' '/Seed/ {print \$2}')
verify_mldsa65=\$(echo \"\$key_mldsa65\" | awk -F': ' '/Verify/ {print \$2}')

Что сделать

research (BLOCKER до начала работы)

  1. Проверить, что xray mldsa65 есть в текущей stable-версии xray-core, которую устанавливает наш installer.
  2. Прочитать актуальные xray-docs про схему — куда подставлять Seed/Verify в realitySettings (Seed = privateKey-аналог, Verify = publicKey-аналог + клиентский publicKey/pbk).
  3. Проверить, что популярные клиенты (Happ, v2rayN, v2rayTun, Shadowrocket) уже умеют ML-DSA65. Это критично — если клиент не понимает, подключение провалится.

реализация (если research OK)

scripts/lib/reality.shgenerate_reality_keypair():

generate_reality_keypair() {
    if [[ \"\$REALITY_PQ\" == \"Y\" ]]; then
        local out=\$(xray mldsa65)
        REALITY_PRIVATE_KEY=\$(echo \"\$out\" | awk -F': ' '/Seed/ {print \$2}')
        REALITY_PUBLIC_KEY=\$(echo \"\$out\" | awk -F': ' '/Verify/ {print \$2}')
    else
        local out=\$(xray x25519)
        # ... как сейчас ...
    fi
}

В setup-exit добавить prompt: «Использовать post-quantum ключи (ML-DSA65)? [N]».

update-скрипты

update-exit.sh / update-relay.sh должны сохранять существующий тип ключа (детектить по длине Seed/Verify vs X25519). Не трогать у тех, у кого X25519, не пытаться upgrade'ить — это сломает существующих клиентов.

Готово, когда

  • Research-блок: подтверждено, что N% клиентов поддерживают ML-DSA65
  • Опциональный setup-flag работает; defaults на X25519
  • E2E на тестовом сервере с поддерживающим клиентом
  • Update-скрипты не ломают X25519-серверы

Риск-скрин

Если клиенты не поддерживают ML-DSA65 на момент v1.10.0 — issue парковать в v1.11.0 / v1.12.0, дождаться экосистемы. Не делать default'ом, пока не пройдёт год после релиза в xray.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestideaСырая идея, не факт что делаем

    Projects

    Status
    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions