Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Quantum-Algorithm-for-Elliptic-Curve-Discrete-Logarithms-with-Space-Efficient-Point-Addition — Фреймворк оценки ресурсов на основе Qiskit для пространственно-эффективных квантовых схем модульного инвертирования и аффинного сложения точек, используемых в алгоритмах дискретного логарифмирования на эллиптических кривых. | Kitploit
Инструменты/GitHubGitHub/zerowang030221/quantum-algorithm-for-elliptic-curve-discrete-logarithms-with-space-efficient-point-addition
Статический анализАнализ КодаКриптографияАнализ Бинарных ФайловСтатьи и ИсследованияОбучение и Образование
GitHubzerowang030221/quantum-algorithm-for-elliptic-curve-discrete-logarithms-with-space-efficient-point-addition

Quantum-Algorithm-for-Elliptic-Curve-Discrete-Logarithms-with-Space-Efficient-Point-Addition

Фреймворк оценки ресурсов на основе Qiskit для пространственно-эффективных квантовых схем модульного инвертирования и аффинного сложения точек, используемых в алгоритмах дискретного логарифмирования на эллиптических кривых.

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий
14312 дней назадЕщё не проверено

Квантовый алгоритм дискретного логарифмирования на эллиптических кривых с эффективным по пространству сложением точек

Этот репозиторий содержит код на Qiskit для оценки ресурсов схем эффективного по пространству квантового модулярного обращения и аффинного сложения точек, используемых в контексте дискретного логарифмирования на эллиптических кривых.

Текущая кодовая база сосредоточена на трёх рабочих процессах:

  1. рекурсивный подсчёт схемы модулярного обращения по частям с контрольными точками;
  2. опциональная локальная NCT-шаблонная оптимизация схемы;
  3. ресурсная оценка скомпилированной обёрнутой схемы аффинного сложения точек по блокам.

Структура репозитория

root@kitploit:~
.
├── README.md
│
├── eea_model/: оригинальная классическая эталонная реализация EEA, используемая для прототипирования алгоритма и проверки корректности.
│
├── run_eea_s835_fastdual_recursive_chunks_checkpoint.py
├── run_eea_s835_fastdual_recursive_chunks_checkpoint_nctopt.py
├── count_s835_fastdual_wrapped_point_addition_blocks_compiled.py
│
├── eea_circuit.py
├── eea_circuit_s835_fastdual.py
├── eea_circuit_s835_lowaux.py
├── eea_circuit_updated.py
├── under1000_eea_shared_s835_fastdual_wrapped.py
├── under1000_modular_arithmetic_base.py
│
├── point_addition_fig14_s835_fastdual_wrapped_quadratic.py
├── quadratic_fig15_inplace_s835_fastdual_wrapped.py
├── quadratic_gidney_arithmetic.py
├── quadratic_lazy_instruction.py
├── quadratic_modular_arithmetic.py
├── quadratic_squ_minus.py
│
├── ccx_recursive_block_counter.py
├── nct_template_segment_optimizer.py
│
├── test_eea_strict_main.py
└── test_point_addition_strict_main.py

Основные скрипты запуска

  • run_eea_s835_fastdual_recursive_chunks_checkpoint.py
    Подсчитывает шаги EEA Algorithm-3 рекурсивно, с контрольными точками по частям.

  • run_eea_s835_fastdual_recursive_chunks_checkpoint_nctopt.py
    Тот же рабочий процесс подсчёта EEA, но с локальной NCT-шаблонной оптимизацией.

  • count_s835_fastdual_wrapped_point_addition_blocks_compiled.py
    Подсчитывает обёрнутую схему сложения точек путём рекурсивного подсчёта переиспользуемых скомпилированных подблоков и сборки повторяющихся арифметических компонентов с точной кратностью.

Файлы EEA

  • eea_circuit_s835_fastdual.py: Основная реализация производственной схемы EEA.
  • eea_circuit_s835_lowaux.py: Вспомогательные процедуры с низким количеством вспомогательных кубитов, используемые основной реализацией.
  • eea_circuit_updated.py: Общие строительные блоки EEA и утилиты рекурсивного подсчёта ресурсов.
  • eea_circuit.py: Обёртка для обратной совместимости для тестов.

Файлы сложения точек и арифметики

  • point_addition_fig14_s835_fastdual_wrapped_quadratic.py: строит обёрнутую схему аффинного сложения точек, соответствующую расписанию Fig.14.
  • quadratic_fig15_inplace_s835_fastdual_wrapped.py: строит структуру Fig.15 для деления и умножения на месте с EEA, умножением, измерением, сбросом и фазовой коррекцией с прямым управлением.
  • quadratic_modular_arithmetic.py: инструкции модульного сложения/вычитания, умножения, обратного умножения, удвоения и деления пополам, используемые счётчиком сложения точек.
  • quadratic_gidney_arithmetic.py: примитивы арифметики в стиле Гидни и помощники для измерения и прямого управления, используемые слоем квадратичной модульной арифметики.
  • quadratic_squ_minus.py: блок square-minus, используемый в расписании аффинного сложения точек.
  • under1000_eea_shared_s835_fastdual_wrapped.py: общая обёртка EEA и помощник, используемые схемой сложения точек.
  • under1000_modular_arithmetic_base.py: небольшие общие утилиты модульной арифметики.

Утилиты подсчёта и оптимизации

  • ccx_recursive_block_counter.py: рекурсивный счётчик для схем Qiskit с политиками для MCX-расширения и SWAP-расширения.
  • nct_template_segment_optimizer.py: локальный оптимизатор на основе шаблонов для сегментов {X, CX, CCX}.

Требования

Рекомендуемое окружение:

  • Python 3.10+
  • Qiskit

Установите основную зависимость с помощью:

root@kitploit:~
python -m pip install --upgrade pip
python -m pip install qiskit

Быстрый старт

Запустите набор тестов:

root@kitploit:~
python test_eea_strict_main.py
python test_point_addition_strict_main.py

Для более быстрой проверки сложения точек (smoke test):

root@kitploit:~
python test_point_addition_strict_main.py --skip-n256 --skip-report

1. Рекурсивный подсчёт частей EEA

Стандартная точка входа для подсчёта EEA:

root@kitploit:~
python run_eea_s835_fastdual_recursive_chunks_checkpoint.py \
  --n 192 \
  --chunk-size 25 \
  --measurement-uncompute \
  --resume \
  --workdir eea_s835_fastdual_chunks25 \
  --out eea_s835_fastdual_algorithm3_recursive_chunks_n192_measurement.json

Важные аргументы:

  • --n: разрядность.
  • --T-max: необязательное переопределение количества шагов Algorithm-3; по умолчанию используется значение из eea.get_n_config(n).
  • --chunk-size: количество шагов Algorithm-3, подсчитываемых за одну контрольную часть.
  • --aux-size: необязательное переопределение пула вспомогательных кубитов; если опущено, размер вспомогательной разметки вычисляется автоматически.
  • --measurement-uncompute: включает отмену вычислений на основе измерений в подсчитываемых блоках EEA.
  • --resume: повторно использует существующие непустые JSON-файлы частей в --workdir.
  • --workdir: каталог для файлов контрольных точек каждой части.
  • --out: накопительный JSON-сводка, записываемая после каждой части.

Скрипт создаёт файлы для каждой части, например:

root@kitploit:~
eea_s835_fastdual_chunks25/eea_s835_fastdual_n192_T0001_0025.json

и накопительный выходной JSON, содержащий такие поля, как:

root@kitploit:~
mode
n
T_max
num_qubits
len_width
shift_width
aux_size
measurement_based
ops
chunks
elapsed_s_so_far

2. Подсчёт EEA с NCT-шаблонной оптимизацией

Точка входа для оптимизированного подсчёта:

root@kitploit:~
python run_eea_s835_fastdual_recursive_chunks_checkpoint_nctopt.py \
  --n 128 \
  --chunk-size 25 \
  --measurement-uncompute \
  --templates small-nct \
  --rounds 1 \
  --max-nct-segment-gates 40 \
  --segment-timeout-s 10 \
  --timeout-mode auto \
  --resume \
  --workdir eea_s835_fastdual_chunks_nctopt_failopen_r1_128_seg40_to10 \
  --out eea_s835_fastdual_algorithm3_recursive_chunks_n128_measurement_nctopt_failopen_r1_seg40_to10.json

Этот рабочий процесс пытается выполнить локальную шаблонную оптимизацию сегментов {X, CX, CCX}. Он спроектирован как ограниченный счётчик с отказоустойчивостью: если оптимизация шага завершается по таймауту или вызывает исключение, этот шаг подсчитывается точно без шаблонных раундов и затем сохраняется в контрольной точке, так что итоговые подсчитанные значения остаются полными.

Полезные аргументы в дополнение к стандартным аргументам EEA:

  • --templates {small-nct,all-nct}: выбор библиотеки шаблонов.
  • --rounds: количество раундов шаблонной оптимизации.
  • --max-nct-segment-gates: максимальный размер обратимого сегмента, отправляемого на шаблонную оптимизацию.
  • --max-nct-segment-qubits: максимальное количество кубитов в сегменте.
  • --segment-timeout-s: таймаут для оптимизации отдельного сегмента.
  • --step-timeout-s: таймаут для всего шага Algorithm-3 перед откатом к неизменённому подсчёту.
  • --fallback-step-timeout-s: таймаут для точного запасного подсчёта.
  • --force: пересчитывать, даже если контрольные точки шагов/частей уже существуют.
  • --ignore-policy-mismatch: повторно использовать старые контрольные точки, даже если политика оптимизации отличается; в основном для отладки.

Оптимизированный рабочий процесс записывает контрольные точки на уровне шагов в:

root@kitploit:~
<workdir>/steps/

и сводки на уровне частей в:

root@kitploit:~
<workdir>/

3. Подсчёт обёрнутого сложения точек по скомпилированным блокам

Счётчик сложения точек зависит от JSON-файла EEA Algorithm-3, полученного одним из описанных выше рабочих процессов EEA. Значение --n счётчика сложения точек должно совпадать с полем n в JSON EEA.

Пример для n=64:

root@kitploit:~
python run_eea_s835_fastdual_recursive_chunks_checkpoint.py \
  --n 64 \
  --chunk-size 25 \
  --measurement-uncompute \
  --resume \
  --workdir eea_s835_fastdual_chunks25_n64 \
  --out eea_s835_fastdual_algorithm3_recursive_chunks_n64_measurement.json

Затем выполните:

root@kitploit:~
python count_s835_fastdual_wrapped_point_addition_blocks_compiled.py \
  --n 64 \
  --eea-steps-json eea_s835_fastdual_algorithm3_recursive_chunks_n64_measurement.json \
  --out point_addition_s835_fastdual_wrapped_blocks_compiled_counts_n64.json

Пример для оптимизированного вывода EEA n=128:

root@kitploit:~
python count_s835_fastdual_wrapped_point_addition_blocks_compiled.py \
  --n 128 \
  --eea-steps-json eea_s835_fastdual_algorithm3_recursive_chunks_n128_measurement_nctopt_failopen_r1_seg40_to10.json \
  --out point_addition_s835_fastdual_wrapped_blocks_compiled_counts_n128.json

Важные аргументы:

  • --n: разрядность.
  • --p: модуль; по умолчанию используется простое число secp256k1.
  • --s-qubits: необязательное переопределение размера общего арифметического регистра EEA.
  • --point-constant {secp256k1-generator,zero,custom}: выбор константы точки для обновления постоянной координаты Fig.14.
  • --x2, --y2: пользовательские координаты точки; обязательны при использовании --point-constant custom.
  • --eea-steps-json: JSON-файл, содержащий рекурсивные подсчёты EEA Algorithm-3.
  • --allow-eea-n-mismatch: переопределение только для отладки, позволяющее различать n в JSON EEA и запрошенное --n.
  • --mcx-policy {clean-vchain,keep}: политика расширения MCX для рекурсивного подсчёта.

Отчёт о выводе включает:

root@kitploit:~
counting_mode
n
p
point_constant_kind
qiskit_width_report
eea_meta
block_summaries
raw_block_counters
key_ccx
validation
elapsed_s

Счётчик сложения точек строит переиспользуемые схемы Qiskit, рекурсивно подсчитывает их в базисе {CCX, CX, X}, а затем собирает более крупные повторяющиеся блоки, такие как умножение, обратное умножение, деление на месте, умножение на месте, square-minus и общий блок сложения точек Fig.14.


Тесты

Этот репозиторий включает два простых драйвера тестов на Python. Они намеренно написаны без pytest, Aer или полной симуляции векторов состояний. Тесты рекурсивно раскрывают определения Qiskit, где это уместно, и моделируют состояния вычислительного базиса для тоффоли-сетевых блоков.

Строгие тесты EEA

Тесты EEA находятся в:

root@kitploit:~
test_eea_strict_main.py

Запустите стандартный набор EEA с помощью:

root@kitploit:~
python test_eea_strict_main.py

Стандартный набор проверяет:

  • что реализация не является ярлыком для конечной точки с малым n;
  • наличие расписания блочных пунктирных линий Algorithm-3;
  • формулы активного окна для нескольких малых разрядностей;
  • блоки унарной итерации, предварительного/пост-сдвига, обновления фазы, управляемого обмена по местоположению и обновления длины;
  • конечные точки Algorithm-3 для простых чисел по умолчанию 3, 5, 7, 11, 13, 17, с использованием как точного подсчёта шагов, так и фиксированного T_max;
  • полную обёртку Algorithm-1 для малых простых чисел по умолчанию 3, 5, 7.

Полезные варианты:

root@kitploit:~
# Только быстрые структурные и блочные тесты.
python test_eea_strict_main.py --skip-endpoint --skip-alg1

# Включить более тяжёлый эталонный тест PDF/Table-4 p=37, x=13.
python test_eea_strict_main.py --table4

# Тестировать все значения x для простых чисел больше 13.
python test_eea_strict_main.py --primes 3 5 7 11 13 17 --mid-all-x --verbose

Строгие тесты сложения точек

Тесты сложения точек находятся в:

root@kitploit:~
test_point_addition_strict_main.py

Запустите стандартный набор сложения точек с помощью:

root@kitploit:~
python test_point_addition_strict_main.py

Стандартный набор сложения точек проверяет:

  • размещение регистров обёрнутого сложения точек;
  • идентичность ширины n=256: 835 = 1 + 3*256 + 66;
  • порядок операций верхнего уровня Fig.14/Fig.15;
  • явную структуру динамической схемы, включающую операции H, measure, reset, классически управляемый Z и swap;
  • сборку скомпилированных арифметических подблоков для малого модуля;
  • малый интегрированный отчёт счётчика сложения точек с использованием синтетического JSON Algorithm-3, чтобы путь отчёта был протестирован без выполнения большого подсчёта EEA.

Матрица регрессии для больших простых чисел охватывает репрезентативные пары разрядности поля n и простого модуля p в диапазоне от 12-битных до 512-битных простых полей. Тестируемые экземпляры включают, например, n=16, p=65521, n=32, p=4294967291, простое число secp256k1 при n=256 и репрезентативные простые числа при n=128, 160, 192, 224, 384, 512.

Для каждой пары (n,p) тесты включают граничные, симметричные, случайные и относительно длинные трассы EEA. Полная компилированная арифметическая сборка выполняется только для выбранных экземпляров средней ширины, в то время как более крупные пары (n,p) используются для проверки построения схемы, размещения регистров, расписания и путей рекурсивного подсчёта ресурсов.

Полезные варианты:

root@kitploit:~
# Пропустить малый интегрированный отчёт и проверять только построение/расписание/сборку.
python test_point_addition_strict_main.py --skip-report

# Быстрый smoke-тест, который также пропускает проверку построения для n=256.
python test_point_addition_strict_main.py --skip-n256 --skip-report

# Использовать другое малое простое число/ширину для проверки компилированных блоков.
python test_point_addition_strict_main.py --n 5 --p 17

Если Qiskit не установлен, test_point_addition_strict_main.py печатает сообщение о пропуске и завершается успешно. Строгий тест EEA требует Qiskit, поскольку он строит блочные гейты EEA/PDF.


Воспроизведение основных статистик

В нашей статье сообщаются численные результаты оценки ресурсов для:

root@kitploit:~
n = 64, 128, 160, 192, 224, 256, 384, 512

Типичный рабочий процесс:

  1. запустите счётчик EEA Algorithm-3 для заданного n;
  2. опционально запустите NCT-оптимизированную версию для того же n;
  3. передайте полученный JSON EEA счётчику обёрнутого сложения точек;
  4. соберите поля key_ccx, block_summaries и qiskit_width_report из выходного отчёта.

Для больших разрядностей используйте --resume и сохраняйте каталоги --workdir, так как контрольные точки частей и шагов предназначены для поддержки прерванных длинных запусков.

Цитирование

Если вы используете эту кодовую базу в своём исследовании, пожалуйста, цитируйте:

root@kitploit:~
@misc{luo2026quantumalgorithmellipticcurve,
      title={Quantum Algorithm for Elliptic Curve Discrete Logarithms with Space-Efficient Point Addition}, 
      author={Han Luo and Ziyi Yang and Jingquan Luo and Ziruo Wang and Yuexin Su and Xiaoming Sun and Lvzhou Li and Tongyang Li},
      year={2026},
      eprint={2607.13816},
      archivePrefix={arXiv},
      primaryClass={quant-ph},
      url={https://arxiv.org/abs/2607.13816}, 
}
Скачать инструмент
  • --validate-full-mul: для небольших n рекурсивно подсчитывает полные определения умножения/возведения в квадрат и сравнивает их с собранными блочными подсчётами.
  • --out: путь к выходному JSON.