Skip to content

Latest commit

 

History

History
45 lines (23 loc) · 6.79 KB

DESCRIPTION.md

File metadata and controls

45 lines (23 loc) · 6.79 KB

Описание

Концепт

Проект представляет собой базовую KYC систему для безопасного подтверждения личных данных пользователя. Как пример, это может быть банковская или blockchain система, финансовые биржи, сайты с ограничением по возрасту. Такая система состоит из двух основных и нескольких вспомогательных компонентов. Система позволяет хранить личные данные пользователей на стороне доверенного провайдера (например, государственное учреждение или частная компания, предоставляющая решения для хранения цифровых версий документов) и проходить процедуру верификации личных данных без предоставления этих данных 3-им лицам (стороне, запрашивающей подтверждение данных, или посредникам). Такое решение возможно благодаря использованию алгоритмов Zero Knowledge Proofs, что позволяет провести проверки на стороне провайдера и с высокой надежностью доказать стороне, запрашивающей проверку, что вычисления были проведены корректно

Основные компоненты

Прувер

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

Верификатор

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

Вспомогательные компоненты

Диспатчер

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

Хранилище данных

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

Пользовательский клиент

В данной реализации выполнен в качестве CLI-инструмента, посылающего диспатчеру запросы на верификацию. В реальном использовании может быть произвольным инструментом, способным отправить grpc запрос на сервис диспатчера и получить от него ответ

Детали реализации

В качестве протокола для ZKP используется halo2, являющийся алгоритмом семейства SNARK, но отличающийся от остальных представителей тем, что не требует создания trusted setup и связанных с этим сложностей (необходимость проводить распределенную процедуру создания ключей, уязвимость безопасности при создании ключей, etc)

Криптографический бэкэнд (реализация вычислительной схемы halo2, прувера и верификатора) выполнен в качестве Rust библиотеки с интерфейсом для Python

Более высокоуровневые сервисы, обеспечивающие работу системы и взаимодействие её компонентов, реализованы на Python, для взаимодействия модулей используется протокол grpc

Хранилищем данных выступает SQL база данных на Clickhouse

Все сервисы и база данных работаю в docker контейнерах и разворачиваются с помощью docker compose

Схема взаимодействия компонентов

Схема взаимодействия