Cointime

Download App
iOS & Android

Xinhuo Technology представляет самую быструю и безопасную в отрасли пороговую подпись 2-n ECDSA

Validated Project

*Примечание редактора: эта технология была опубликована на Международной конференции IEEE 2023 года по параллельной и распределенной обработке с приложениями, большим данным и облачным вычислениям, устойчивым вычислениям и коммуникациям, социальным вычислениям и сетям (ISPA/BDCloud/SocialCom/SustainCom). DOI: 10.1109/ISPA-BDCloud-SocialCom-SustainCom59178.2023.00092*

# Введение

Li17 — самая быстрая и безопасная в отрасли подпись 2-2 ECDSA. CGGMP20 — самая безопасная и относительно быстрая пороговая подпись tn ECDSA в отрасли. В сфере хранения цифровых активов широко используются 2-3 пороговые подписи ECDSA. В этом случае сигнатуру Li17 2-2 нельзя использовать напрямую, и ее необходимо соответствующим образом изменить. В частности, вносятся следующие изменения: Алиса и Боб запускают протокол децентрализованной генерации ключей для генерации фрагментов закрытого ключа $a$ и $b$ соответственно, затем дважды запускают протокол обновления децентрализованного ключа для генерации $(a ', b')$; и $(a'', b'')$; Алиса конфиденциально отправляет $a'$ Кэрол, а Боб конфиденциально отправляет $b''$ Кэрол. Таким образом, Алиса и Боб используют сегментирование закрытого ключа $(a,b)$, Алиса и Кэрол используют сегментирование закрытого ключа $(a'', b'')$, а Боб и Кэрол используют сегментирование закрытого ключа $(a',b ')$, можно добиться подписи. Однако описанный выше процесс напрямую отправляет фрагменты секретного ключа. Если фрагменты секретного ключа утекли, ответственность не может быть отслежена, и нагрузка на хранилище увеличивается! С другой стороны, пороговая подпись CGGMP20 tn требует использования $t=2,n=3$. Однако сложность протокола CGGMP20 относительно высока, поэтому убить курицу большим ножом невозможно!

В этой статье, стоящей на плечах гигантов Li17, предлагается быстрая и безопасная пороговая подпись 2-n ECDSA. Протокол наследует безопасность и скорость подписей Li17 2-2.

В частности, в протоколе децентрализованной генерации ключей и протоколе обновления ключей порог строится на основе интерполяционного полинома Лагранжа для достижения пороговой подписи 2-n. Кроме того, на этапе предварительного подписания предварительно рассчитывается случайное сообщение; на этапе онлайн-подписи необходимо подписать только разницу между сообщением и случайным сообщением, тем самым повышая скорость этапа онлайн-подписи. Таким образом, пороговая подпись 2-n ECDSA в этой статье так же безопасна, как и протокол подписи Li17 2-2, а скорость подписи выше.

# 2-n пороговая подпись ECDSA

Инициализация: генератором группы эллиптических кривых $\mathbb{G}$ является $G$, а порядок — $\tilde{q}$.

## Протокол 1: децентрализованная генерация ключей

**Шаг 1:** Каждый пользователь $i$ генерирует свою пару ключей Пайе $({{N}_{i}},{{p}_{i}},{{q}_{i}} )$ .

Выберите случайное число ${{u}_{i}}\in [0, \tilde{q}-1]$ и вычислите точки эллиптической кривой следующим образом:

$${{U}_{i}}:={{u}_{i}}\cdot G.$$

Затем вычислите обещание и откройте обещание:

$$(KG{{C}_{i}},KG{{D}_{i}}):=\mathsf{Com}({{U}_{i}}).$$

Обязательство по широковещанию $KG{{C}_{i}}$ и открытый ключ Paillier ${{N}_{i}}$, сохранение случайного числа ${{u}_{i}}$, закрытый ключ Paillier ${ {p}_{i}},{{q}_{i}}$ и открытое обязательство $KGD_i$.

Обязательство по широковещанию $KG{{C}_{i}}$ и открытый ключ Paillier ${{N}_{i}}$, сохранение случайного числа ${{u}_{i}}$, закрытый ключ Paillier ${ {p}_{i}},{{q}_{i}}$ и открытое обязательство $KGD_i$.

**Шаг 2:** При получении обязательства $KG{{C}_{j}},j\ne i$ и открытого ключа Paillier ${{N}_{j}},j\ne i от других пользователей После $ пользователь $i$ передает свое открытое обязательство $KG{{D}_{i}}$ другим пользователям.

**Шаг 3:** Каждый пользователь $i$ проверяет правильность всех открытых обязательств, полученных от других пользователей.

Если он действителен, совместный открытый ключ рассчитывается следующим образом:

$$PK:=\sum\limits_{i=1}^{n}{U_i}.$$

Постройте **избыточность Лагранжа**: выберите случайное число $a_i\in [0,\tilde{q}-1]$ и постройте полином первого порядка:

$${{p}_{i}}(x)={{u}_{i}}+x\cdot a_i.$$

Сохраните ${{p}_{i}}(i)$ и тайно отправьте ${{p}_{i}}(j)$ другому пользователю $j$.

Вычислите **кортеж Фельдмана**:

$${{A}_{i}}:={{a}_{i}}\cdot G$$

Трансляция $A_i$.

**Шаг 4:** Каждый пользователь $i$ получает ${{p}_{j}}(i)$ и $\{{{A}_{j}}\},j, отправленные другими пользователями =1 ,...,n $, проверьте согласованность **кортежа Фельдмана**:

$${{p}_{j}}(i)\cdot G={{U}_{j}}+i\cdot {{A}_{j}}.$$

Рассчитайте фрагменты закрытого ключа и сегменты открытого ключа следующим образом:

$$\begin{выровнено}

& {{x}_{i}}:=\sum\limits_{j=1}^{n}{{{p}_{j}}(i)}\,\bmod \,\tilde{q} =sk+\sum\limits_{j=1}^{n}{(j\cdot {{a}_{j}})}\,\bmod \,\tilde{q}, \\

& {{X}_{i}}:={{x}_{i}}\cdot G. \\

\end{aligned}$$

Затем используйте zk-Schnorr, чтобы доказать, что он знает фрагмент секретного ключа ${{x}_{i}}$, и zk-Paillier-Blum, чтобы доказать, что ${{N}_{i}}$ является Пайе -Модуль Блюма.

Зашифруйте ${{x}_{i}}$, используя открытый ключ Paillier ${{N}_{i}}$

$${{c}_{key,i}}:=\mathsf{Enc}_{{{N}_{i}}}({{x}_{i}})$$

zk доказательство дальности действия

$$zk\left\{ {{x_i},{r_i}\left| \begin{array}{l}

{{c}_{key,i}} ={{(1+{{N}_{i}})}^{{{x}_{i}}}}r_{i}^{{{N }_{i}}}\bmod N_{i}^{2}, \\

{{X}_{i}} ={{x}_{i}}\cdot G, \\

{{x}_{i}} \in {{\mathbb{Z}}_{\tilde{q}}}

{{X}_{i}} ={{x}_{i}}\cdot G, \\

{{x}_{i}} \in {{\mathbb{Z}}_{\tilde{q}}}

\end{array} \right.} \right\}$$

Передача фрагмента открытого ключа $X_i$, зашифрованного текста $c_{key,i}$ и трёх zk-доказательств.

**Шаг 5:** Когда каждый пользователь $i$ получает фрагменты открытого ключа других пользователей ${{X}_{j}},j\ne i$ и доказательство zk, проверьте три доказательства zk. Кроме того, каждый пользователь проверяет согласованность интерполяции Лагранжа следующим образом:

$$PK=\lambda _{i,j}\cdot X_i +\lambda _{j,i}\cdot X_j,$$

Среди них $\lambda_{i,j}$ и $\lambda_{j,i}$ — соответствующие коэффициенты интерполяции Лагранжа.

После завершения выполнения протокола децентрализованной генерации ключей каждый пользователь $i$ получит фрагмент закрытого ключа $x_i$, фрагмент открытого ключа $X_i$, совместный открытый ключ $PK$ и $n-1$ зашифрованный текст $ c_{key_j}, j \neq i$.

## Протокол 2: децентрализованное обновление ключей

**Шаг 1:** Каждый пользователь $i,i=1,...,n$ выбирает случайное число $a_i'\in [0,\tilde{q}-1]$ и строит **полином Лагранжа * *:

$$p_i'(x)=x\cdot a_i'.$$

Обратите внимание, что постоянный член равен 0. Сохраните ${{p}_{i}}'(i)$ и тайно отправьте ${{p}_{i}}'(j)$ каждому пользователю $j$. Затем вычислите **кортеж Фельдмана**.

$$A_i':=a_i'\cdot G$$

Трансляция $A_i'$.

**Шаг 2:** Каждый пользователь $i$ получает $p_j'(i)$ и $\{A_j'\},j=1,...,n$ от других пользователей и проверяет элемент **Feldman. Согласованность группы**:

$$p_j'(i)\cdot G=i\cdot A_j'.$$

Рассчитайте новый фрагмент закрытого ключа и новый фрагмент открытого ключа следующим образом:

$$\begin{выровнено}

& x_i':=x_i+a_j', \\

& X_i':=x_i'\cdot G. \\

\end{aligned}$$

Затем zk-Шнорр доказывает, что знает $x_i'$.

Зашифруйте $x_i'$, используя открытый ключ Paillier ${{N}_{i}}$

$$c_{key,i}':=\mathsf{Enc}_{{{N}_{i}}}(x_i')$$

доказательство диапазона zk:

$$zk\left\{ {x_i',r_i'\left| \begin{array}{l}

c_{key,i}' = {(1 + {N_i})^{x_i'}}{(r_i')^{{N_i}}}\bmod N_i^2\\

X_i' = x_i' \cdot G\\

c_{key,i}' = {(1 + {N_i})^{x_i'}}{(r_i')^{{N_i}}}\bmod N_i^2\\

X_i' = x_i' \cdot G\\

x_i' \in {\mathbb{Z}_{\tilde q}}

\end{array} \right.} \right\}$$

Передача нового фрагмента открытого ключа $X_i'$, зашифрованного текста $c_{key,i}'$ и двух zk-доказательств.

**Шаг 3:** Каждый пользователь $i$ получает фрагменты открытого ключа других пользователей $X_j',j\ne i$ и два zk-доказательства и проверяет достоверность двух zk-доказательств. Дополнительно каждый пользователь может проверить корректность интерполяции Лагранжа:

$$PK=\lambda _{i,j}\cdot X_i' +\lambda _{j,i}\cdot X_j',$$

Среди них ${{\lambda }_{i,j}}$ и ${{\lambda }_{j,i}}$ — соответствующие коэффициенты интерполяции Лагранжа.

После завершения протокола обновления децентрализованного ключа каждый пользователь $i$ получает новый фрагмент закрытого ключа $x_i'$, новый фрагмент открытого ключа $X_i'$ и $n -1$ новый зашифрованный текст $c_{key_j}',j \neq я$.

## Соглашение 3: Предварительно подписанное соглашение

**Шаг 1:** Пользователь $i$ выбирает случайное число ${{k}_{i}}\in [0,\tilde{q}-1]$, рассчитываемое следующим образом:

$${{R}_{i}}:={{k}_{i}}\cdot G.$$

zk-Шнорр доказывает, что знает случайное число ${{k}_{i}}$:

$$proo{{f}_{i}}:=zk\left\{ {{k}_{i}}\left| {{R}_{i}}={{k}_{i}} \cdot G \right \right\}.$$

Для ${{R}_{i}}$ и $proo{{f}_{i}}$ рассчитайте обязательство и откройте обязательство

$$\left[ KG{{C}_{i}},KG{{D}_{i}} \right]:=\mathsf{Com}({{R}_{i}},proo{{ f}_{i}}).$$

Отправьте обязательство $KG{{C}_{i}}$ пользователю $j$.

**Шаг 2:** Получив обязательство $KG{{C}_{i}}$, пользователь $j$ выбирает случайное число ${{k}_{j}}\in [0,\tilde { q}-1]$, вычислить

$${{R}_{j}}:={{k}_{j}}\cdot G$$

zk-Шнорр доказывает, что знает случайные числа

$$proo{{f}_{j}}:=zk\left\{ {{k}_{j}}\left| {{R}_{j}}={{k}_{j}} \cdot G \right \right\}.$$

Затем отправьте $({{R}_{j}},proo{{f}_{j}})$ пользователю $i$.

**Шаг 3:** После получения $({{R}_{j}},proo{{f}_{j}})$ пользователь $i$ проверяет согласованность обязательства. Если противоречиво, отклонить; в противном случае фиксация $KG{{D}_{i}}$ будет открыта и отправлена ​​пользователю $j$.

**Шаг 4:** После получения $({{R}_{i}},proo{{f}_{i}})$ пользователь $j$ проверяет согласованность обещания. Если противоречиво, отбраковывайте, в противном случае рассчитывайте следующим образом:

$$\begin{выровнено}

R&:={{k}_{j}}\cdot {{R}_{i}}, \\

$$\begin{выровнено}

R&:={{k}_{j}}\cdot {{R}_{i}}, \\

r&:={{R}_{[x]}}\bmod \tilde{q},

\end{aligned}$$

где ${{R}_{[x]}}$ представляет собой координату $x$ точки $R$.

Выберите случайное сообщение ${{m}_{0}}\in [0,\tilde{q}-1]$ и случайное число $\rho \in [0, {{\tilde{q}}^{ 2}}-1]$, вычислить

$${{c}_{0}}:=\mathsf{Enc}_{{{N}_{i}}}(k_{j}^{-1}\cdot {{m}_{0} }\bmod \tilde{q}+\rho \cdot \tilde{q}).$$

Затем рассчитайте следующим образом

$$\begin{выровнено}

& {{c}_{1}}:=\left( ({{\lambda }_{i,j}}\odot {{c}_{key,i}})\oplus \mathsf{Enc}_ {{{N}_{i}}}({{\lambda }_{j,i}}{{x}_{j}}) \right)\odot (k_{j}^{-1}r ), \\

& {{c}_{2}}:={{c}_{0}}\oplus {{c}_{1}} \\.

\end{aligned}$$

Наконец, ${{c}_{2}}$ отправляется пользователю $i$ и сохраняется $({{m}_{0}},r)$.

**Шаг 5:** После получения ${{c}_{2}}$ пользователь $i$ использует свой закрытый ключ Paillier для расшифровки следующим образом.

$${{s}_{0}}:=\mathsf{Dec}_{{{p}_{i}},{{q}_{i}}}({{c}_{2}} ).$$

Затем рассчитайте следующим образом

$$\begin{выровнено}

& {{s}_{1}}:=k_{i}^{-1}\cdot {{s}_{0}}\bmod \tilde{q}, \\

& R':={{k}_{i}}\cdot {{R}_{j}},\\

& r':=R_{[x]}'\bmod \tilde{q}.

\end{aligned}$$

Сохраните ${{s}_{1}}$ и $r'$.

*Анализ 1:*

потому что

$${{k}_{j}}\cdot {{R}_{i}}={{k}_{i}}{{k}_{j}}\cdot G={{k}_ {i}}\cdot {{R}_{j}}$$

Следовательно, $R=R'$, следовательно, $r=r'$.

С другой стороны, выражение для ${{c}_{1}}$ имеет вид:

$$\begin{выровнено}

{{c}_{1}} & =\left( ({{\lambda }_{i,j}}\odot {{c}_{key,i}})\oplus \mathsf{Enc}_{ {{N}_{i}}}({{\lambda }_{j,i}}{{x}_{j}}) \right)\odot (k_{j}^{-1}r) \\

{{c}_{1}} & =\left( ({{\lambda }_{i,j}}\odot {{c}_{key,i}})\oplus \mathsf{Enc}_{ {{N}_{i}}}({{\lambda }_{j,i}}{{x}_{j}}) \right)\odot (k_{j}^{-1}r) \\

& =\left( \mathsf{Enc}_{{{N}_{i}}}({{\lambda }_{i,j}}{{x}_{i}})\oplus \mathsf{ Enc}_{{{N}_{i}}}({{\lambda }_{j,i}}{{x}_{j}}) \right)\odot (k_{j}^{- 1}р) \\

& =\mathsf{Enc}_{{{N}_{i}}}({{\lambda }_{i,j}}{{x}_{i}}+{{\lambda }_{j ,i}}{{x}_{j}})\odot (k_{j}^{-1}r) \\

& =\mathsf{Enc}_{{{N}_{i}}}(x)\odot (k_{j}^{-1}r) \\

& =\mathsf{Enc}_{{{N}_{i}}}(k_{j}^{-1}rx \\.

\end{aligned}$$

Выражение ${{c}_{2}}$:

$$\begin{выровнено}

{{c}_{2}} & ={{c}_{0}}\oplus {{c}_{1}} \\

& =\mathsf{Enc}_{{{N}_{i}}}(k_{j}^{-1}{{m}_{0}}\bmod \tilde{q}+\rho \tilde {q})\oplus \mathsf{Enc}_{{{N}_{i}}}(k_{j}^{-1}rx) \\

& =\mathsf{Enc}_{{{N}_{i}}}(k_{j}^{-1}{{m}_{0}}\bmod \tilde{q}+\rho \tilde {q}+k_{j}^{-1}rx).

\end{aligned}$$

Следовательно, выражение для ${{s}_{0}}$ имеет вид:

$${{s}_{0}}=k_{j}^{-1}{{m}_{0}}\bmod \tilde{q}+\rho \tilde{q}+k_{j} ^{-1}rx.$$

Выражение ${{s}_{1}}$:

$$\begin{выровнено}

{{s}_{1}} & =k_{i}^{-1}{{s}_{0}}\bmod \tilde{q} \\

& =k_{i}^{-1}k_{j}^{-1}{{m}_{0}}\bmod \tilde{q}+k_{i}^{-1}k_{j} ^{-1}rx\bmod \tilde{q} \\

& ={{k}^{-1}}{{m}_{0}}+{{k}^{-1}}rx\bmod \tilde{q} \\.

\end{aligned}$$

*Анализ 2:* Если необходимо достичь активного и безопасного порогового подписания, участники должны обновлять свои фрагменты закрытого ключа после каждой подписи. Протокол обновления ключа требует двух раундов взаимодействия, а протокол предварительного подписания — 4 раунда. Для повышения эффективности эти два протокола могут быть интегрированы. В частности, интерактивные данные протокола предварительного подписания и протокола обновления децентрализованного ключа могут передаваться одновременно. Этот подход исключает два отдельных раунда взаимодействия для протокола децентрализованного обновления ключей и упрощает такие процессы, как аутентификация пользователей, повышая эффективность.

## Протокол 4: Онлайн-подпись

**Шаг 1:** Для сообщения $msg$ пользователь $j$ вычисляет

## Протокол 4: Онлайн-подпись

**Шаг 1:** Для сообщения $msg$ пользователь $j$ вычисляет

$$\tilde{m}:=(\mathsf{Hash}(msg)-{{m}_{0}})\bmod \tilde{q}.$$

затем вычислить

$${{c}_{3}}:=\mathsf{Enc}_{{{N}_{i}}}(k_{j}^{-1}\tilde{m}\bmod \tilde{ д}).$$

Отправьте ${{c}_{3}}$ пользователю $i$.

**Шаг 2:** Получив ${{c}_{3}}$, пользователь $i$ использует свой закрытый ключ для расшифровки.

$${{s}_{2}}:=\mathsf{Dec}_{{{p}_{i}},{{q}_{i}}}({{c}_{3}} ).$$

Затем рассчитайте его следующим образом:

$$\begin{выровнено}

& {{s}_{3}}:=(k_{i}^{-1}{{s}_{2}})\bmod \tilde{q}, \\

& {{s}_{4}}:=({{s}_{1}}+{{s}_{3}})\bmod \tilde{q} \\.

\end{aligned}$$

Пусть $s=\min \{{{s}_{4}},\tilde{q}-{{s}_{4}}\}$. Для сообщения $msg$, если $(r, s)$ — действительная подпись, принять ее, в противном случае — отклонить;

*Анализ 1:* Выражения ${{s}_{2}}$ и ${{s}_{3}}$ соответственно

$$\begin{выровнено}

& {{s}_{2}}=k_{j}^{-1}\tilde{m}\bmod \tilde{q}, \\

& {{s}_{3}}=k_{i}^{-1}k_{j}^{-1}\tilde{m}\bmod \tilde{q}={{k}^{-1 }}\tilde{m}\bmod \tilde{q} \\.

\end{aligned}$$

Выражение ${{s}_{4}}$ равно

$$\begin{выровнено}

{{s}_{4}} & =({{s}_{1}}+{{s}_{3}})\bmod \tilde{q} \\

& ={{k}^{-1}}{{m}_{0}}+{{k}^{-1}}rx+{{k}^{-1}}\tilde{m}\bmod \tilde{q} \\

& ={{k}^{-1}}(\tilde{m}+{{m}_{0}})+{{k}^{-1}}rx \\

& ={{k}^{-1}}(\mathsf{Hash}(msg)+rx) .\\

\end{aligned}$$

Следовательно, $(r, s)$ является допустимой подписью для сообщения $msg$.

*Анализ 2:*

\end{aligned}$$

Следовательно, $(r, s)$ является допустимой подписью для сообщения $msg$.

*Анализ 2:*

(1) Симметрия эллиптической кривой придает пластичность сигнатуре ECDSA. Если $(r, s)$ — действительная подпись, то $(r, \tilde{q}-s)$ также действительна. Таким образом, протокол пороговой подписи 2-n страдает гибкостью, т. е. как $(r, s)$, так и $(r, \tilde{q}-s)$ являются действительными подписями. Чтобы предотвратить эту проблему, используйте $s = \min\{s, \tilde{q}-s\}$ для стандартизации значения $s$ и устранения пластичности (2) Чтобы предотвратить атаки BitForge, если подпись; не удалось, то внедрите протокол децентрализованного обновления ключей.

**Рекомендации**

1. Линделл Ю. Быстрое безопасное двустороннее подписание ECDSA[C] // Достижения в криптологии – CRYPTO 2017: 37-я ежегодная международная конференция по криптологии, Санта-Барбара, Калифорния, США, 20–24 августа 2017 г., Материалы, Часть II 37. Springer International Publishing, 2017: 613-644.

2. Канетти Р., Дженнаро Р., Голдфедер С. и др. Неинтерактивный, упреждающий, пороговый ECDSA UC с идентифицируемыми прерываниями [C] // Материалы конференции ACM SIGSAC 2020 года по компьютерной и коммуникационной безопасности. 2020: 1769-1787.

3. Макрияннис Н., Йомтов О.: Практические атаки с извлечением ключей в ведущих кошельках MPC [J]. Архив криптологии ePrint, 2023.

О СИНОХОПЕ

SINOHOPE Technology Holdings Co., Ltd. (именуемая «SINOHOPE», биржевой код: 1611.HK) специализируется на хранении цифровых активов и предоставляет различные решения по хранению, которые помогают каждому предприятию использовать цифровые активы безопасно и удобно. Основной продукт компании, самостоятельная платформа MPC SINOHOPE, использует технологию MPC-CMP для поддержки распределенного управления пользователями сегментами закрытых ключей и совместных подписей, устраняя точечные риски, связанные с закрытыми ключами, и эффективно повышая прозрачность и простоту использования.

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

Сайт компании: www.sinohope.com.

Консультация инвестора: [email protected]

Для запросов СМИ: [email protected]

Комментарий

Все комментарии

Рекомендуем к прочтению