Содержание
200x
Максимальное ускорение относительно CPU
90%
Вклад NTT в задержку
32-bit
Использование целочисленного конвейера
1. Введение
Zero-Knowledge Proofs (ZKPs) представляют собой революционный криптографический протокол, который позволяет одной стороне (Доказывающему) продемонстрировать знание секретного ввода, не раскрывая никакой информации о самом секрете. Эта возможность обеспечила преобразующие приложения в приватных криптовалютах, верифицируемом аутсорсинге вычислений и решениях для масштабирования блокчейнов. Основной проблемой внедрения ZKP является значительная вычислительная нагрузка, необходимая для генерации доказательства, которая может занимать несколько минут на современных CPU для сложных вычислений.
GPU стали основной платформой для ускорения ZKP благодаря природе параллельной обработки данных в основных вычислительных ядрах. Как показано на Рисунке 1, ZKP с ускорением на GPU демонстрируют до 200-кратного ускорения по сравнению с реализациями на CPU. Однако, несмотря на эти впечатляющие достижения, в литературе заметно отсутствует систематическая характеристика узких мест производительности и ограничений масштабируемости на современных архитектурах GPU.
2. Предпосылки и связанные работы
2.1 Основы Zero-Knowledge Proofs
Zero-Knowledge Proofs работают по принципу, что Доказывающий может убедить Проверяющего в знании свидетеля $w$ для публичной функции $f$ и ввода $x$ такого, что $f(x,w) = y$, не раскрывая никакой информации о $w$. Протокол Groth16, который лежит в основе данного исследования, предоставляет сжатые доказательства и время проверки менее миллисекунды, что делает его особенно подходящим для реальных приложений.
2.2 Ускорение на GPU в криптографии
Предыдущие работы по ускорению криптографических примитивов на GPU продемонстрировали значительное улучшение производительности. Исследования, такие как [19,30,31,42], показали, что параллельная архитектура GPU хорошо подходит для криптографических операций, особенно тех, которые связаны с крупномасштабными математическими вычислениями. Однако эти усилия в основном были сосредоточены на отдельных ядрах, а не на производительности системы в целом.
3. Методология и экспериментальная установка
3.1 Фреймворк ZKProphet
ZKProphet предоставляет комплексный аналитический фреймворк для оценки производительности ZKP на GPU. Фреймворк систематически оценивает основные вычислительные ядра, включая Multi-Scalar Multiplication (MSM) и Number-Theoretic Transform (NTT), которые вместе составляют более 95% вычислительной нагрузки при генерации ZKP.
3.2 Конфигурации бенчмарков
Наша экспериментальная установка использует современные архитектуры GPU из поколений NVIDIA Ampere и Ada Lovelace. Мы оцениваем производительность при различном количестве ограничений, которые представляют сложность доказываемого вычисления. Бенчмарки включают как синтетические рабочие нагрузки, так и реальные приложения ZKP из областей криптовалют и блокчейнов.
4. Результаты анализа производительности
4.1 Детализация производительности ядер
Наш анализ выявляет критическое смещение узких мест производительности. В то время как предыдущие исследования были сосредоточены на оптимизации операций MSM, мы обнаружили, что при современных оптимизированных реализациях MSM, операции NTT теперь составляют до 90% задержки генерации доказательства. Это представляет собой значительный сдвиг парадигмы, требующий нового внимания к оптимизации NTT.
Рисунок 1: Ускорение Доказывающего в зависимости от количества ограничений
Экспериментальные результаты демонстрируют, что реализации на GPU обеспечивают существенное ускорение по сравнению с базовыми уровнями CPU, при этом производительность масштабируется приблизительно линейно с количеством ограничений с улучшением до 200x для больших наборов ограничений.
4.2 Анализ масштабируемости
Мы наблюдаем, что вычисления ZKP выполняются исключительно на 32-битных целочисленных конвейерах GPU и демонстрируют ограниченный параллелизм на уровне инструкций из-за присущих зависимостей по данным. Это фундаментально ограничивает масштабируемость производительности на основе доступных целочисленных вычислительных блоков, а не возможностей с плавающей точкой.
5. Детали технической реализации
5.1 Математические основы
Основные математические операции в ZKP основаны на арифметике конечных полей над большими простыми полями. Операция NTT, которая является специализированной формой преобразования Фурье в конечных полях, может быть выражена как:
$$X_k = \sum_{j=0}^{n-1} x_j \cdot \omega^{jk} \mod p$$
где $\omega$ является примитивным $n$-м корнем из единицы по модулю $p$, а $p$ — большое простое число. Обратное NTT определяется аналогично с $\omega^{-1}$.
5.2 Реализация кода
Следующий псевдокод демонстрирует оптимизированную реализацию NTT для архитектур GPU:
__global__ void ntt_kernel(uint32_t *a, uint32_t *roots, int n) {
int tid = threadIdx.x + blockIdx.x * blockDim.x;
int stride = blockDim.x * gridDim.x;
for (int i = tid; i < n/2; i += stride) {
int j = bit_reverse(i, log2(n));
if (i < j) {
swap(a[i], a[j]);
}
}
__syncthreads();
for (int len = 2; len <= n; len <<= 1) {
int half = len >> 1;
for (int i = tid; i < n; i += stride) {
if ((i & (len - 1)) < half) {
uint32_t u = a[i];
uint32_t v = mul_mod(a[i + half], roots[len + (i & (half - 1))]);
a[i] = add_mod(u, v);
a[i + half] = sub_mod(u, v);
}
}
__syncthreads();
}
}
6. Будущие приложения и направления
Оптимизация ZKP на GPU открывает множество возможностей для приложений. В технологии блокчейнов оптимизированные ZKP могут обеспечить более эффективные решения rollup и смарт-контракты с сохранением конфиденциальности. Для верифицируемого машинного обучения, как исследовано в работах типа [32], ZKP с ускорением на GPU могут обеспечить практическую верификацию выводов моделей без раскрытия проприетарных параметров модели.
Будущие направления исследований включают изучение арифметики смешанной точности для лучшего использования тензорных ядер GPU, разработку специализированных подходов совместного проектирования аппаратного и программного обеспечения и создание адаптивных фреймворков оптимизации, которые могут автоматически настраивать параметры ZKP на основе конкретных аппаратных возможностей и требований приложений.
Оригинальный анализ
Исследование ZKProphet представляет собой значительный прогресс в понимании характеристик производительности Zero-Knowledge Proofs на современных архитектурах GPU. В то время как предыдущие исследования, такие как основополагающая работа по zk-SNARKs Ben-Sasson et al. (2014), заложили теоретические основы, а последующие реализации, такие как libsnark и bellman, предоставили практические фреймворки, наблюдался заметный пробел в систематическом анализе производительности по всей вычислительной цепочке.
Идентификация NTT как нового основного узкого места (составляющего до 90% задержки) отмечает критический сдвиг в приоритетах оптимизации. Это открытие согласуется с наблюдениями в других вычислительно интенсивных областях, где начальные оптимизации нацелены на наиболее очевидные узкие места, только чтобы выявить вторичные ограничения, которые становятся доминирующими после первоначальных улучшений. Подобные закономерности наблюдались в криптографических реализациях для блокчейн-систем, где после оптимизации операций на эллиптических кривых ограничивающим фактором стали шаблоны доступа к памяти.
Исключительное использование 32-битных целочисленных конвейеров представляет как проблемы, так и возможности. В отличие от рабочих нагрузок машинного обучения, которые интенсивно используют тензорные ядра и арифметику FP32/FP16, ZKP не могут извлечь выгоду из этих специализированных блоков в текущих архитектурах GPU. Это предполагает потенциал для совместного проектирования аппаратного и программного обеспечения, аналогичного подходу, принятому в архитектуре TPU от Google для нейронных сетей, но специализированного для криптографических операций. Ограниченный параллелизм на уровне инструкций из-за зависимостей по данным дополнительно подчеркивает необходимость алгоритмических инноваций, которые могут раскрыть больше параллелизма.
По сравнению с другими усилиями по криптографическому ускорению, такими как для гомоморфного шифрования (как упомянуто в [9]) или фреймворков верифицируемых вычислений, фокус ZKProphet на сквозной производительности, а не на оптимизации отдельных ядер, предоставляет более практические инсайты для реального развертывания. Ссылка на верифицируемые приложения машинного обучения в [32] предполагает многообещающие междисциплинарные приложения, где ZKP с ускорением на GPU могут обеспечить новые модели доверия в AI-системах.
Ограничения масштабируемости производительности, выявленные в этой работе, имеют значительные последствия для практического развертывания ZKP в производственных системах. Поскольку количество ограничений увеличивается с более сложными вычислениями, линейная зависимость масштабирования предполагает, что текущие архитектуры GPU могут столкнуться с фундаментальными пределами без архитектурных инноваций, специально нацеленных на криптографические рабочие нагрузки.
7. Ссылки
- Groth, J. (2016). "On the Size of Pairing-Based Non-interactive Arguments." EUROCRYPT 2016.
- Ben-Sasson, E., et al. (2014). "Succinct Non-Interactive Zero Knowledge for a von Neumann Architecture." USENIX Security Symposium.
- Parno, B., et al. (2013). "Pinocchio: Nearly Practical Verifiable Computation." IEEE Symposium on Security and Privacy.
- Setty, S., et al. (2013). "Resolving the conflict between generality and plausibility in verified computation." EuroSys.
- Zhang, J., et al. (2020). "vCNN: Verifiable Convolutional Neural Network based on zk-SNARKs." Cryptology ePrint Archive.
- Wahby, R.S., et al. (2018). "Full accounting for verifiable outsourcing." CCS.
- Kosba, A., et al. (2016). "C∅C∅: A Framework for Building Composable Zero-Knowledge Proofs." USENIX Security.
- Xie, T., et al. (2022). "zkCNN: Zero Knowledge Proofs for Convolutional Neural Network Predictions and Accuracy." CCS.