Представьте себе следующий сценарий:
В данной криптовалюте конфиденциальность должна быть максимально высокой.
Для этого для каждой входящей транзакции создается новая учетная запись с новым адресом (адрес является открытым ключом пары закрытый/открытый ключ). Однако пользователи не всегда находятся в сети, чтобы создавать новые учетные записи с новыми адресами, как только кто-то хочет отправить им деньги. Поэтому все пользователи должны иметь возможность создавать новые учетные записи с новыми адресами для других пользователей, когда они хотят отправить кому-то деньги. Разумеется, только получатель должен иметь возможность тратить деньги, переведенные на счета, созданные для него другими людьми.
Все это должно быть основано на ЕСС, то есть расширение ЭЦДСА Алгоритм, так сказать.
Но, как только что было описано в примере с криптовалютой, только тому человеку, для которого был сгенерирован открытый ключ, разрешено подписывать сообщения для этого открытого ключа или расшифровывать данные, которые были зашифрованы этим открытым ключом.
Поскольку безопасность используемого криптографического алгоритма имеет решающее значение для криптовалюты, только НИСТ и SECG будут использоваться предварительно созданные и стандартизированные параметры кривой, которые, как известно, безопасны и эффективны.
Единственные технические изменения, которые следует учитывать, заключаются в следующем.:
Примечание: Поскольку адрес учетной записи будет соответствующим открытым ключом пары ключей, термины «адрес» и «открытый ключ» в дальнейшем будут использоваться взаимозаменяемо.
Параметры из алгоритма ECDSA:
- $д$ = случайно сгенерированный закрытый ключ
- $G$ = базовая точка эллиптической кривой
Изменения:
- Доступный интервал для закрытых ключей уменьшен с $[1, n - 1]$ к $[1, \frac{n}{2} - 1]$
- Как и в случае с генерацией открытого ключа, точка $P$ рассчитывается следующим образом: $P = d \times G$. Эта точка $P$ формирует так называемый ключ генерации делегированного адреса (ключ DAG).
- Чтобы сгенерировать адрес (открытый ключ) для другого человека, используется случайный так называемый ключ рандомизации адреса (ключ AR) ($я$) с тем же интервалом, что и у закрытого ключа ($[1, \frac{n}{2} - 1]$) должен быть сгенерирован
- Для генерации адреса для произвольного человека ключ DAG ($P$) этого человека добавляется умножением ключа AR ($я$) и базовая точка ($G$): $Q = P + i \times G$. С $P$ является $d \раз G$, должно выполняться следующее: $Q = P + i \times G = (d + i) \times G$. Эта точка $Q$ формирует новый адрес лица, чей ключ DAG использовался для расчета.
Пример:
- Алиса создает случайно сгенерированный закрытый ключ ($д$).
- Алиса использует свой закрытый ключ для создания ключа DAG ($P$)
- Алиса делает ключ DAG общедоступным
- Боб хочет сгенерировать адрес (открытый ключ) для Алисы и для этого получает от Алисы ключ DAG.
- Боб создает случайно сгенерированный ключ AR.
- Боб создает новый адрес для Алисы, используя ключ DAG Алисы и ключ AR, сгенерированный на предыдущем шаге.
- Боб отправляет сумму на вновь созданный адрес
- Боб отправляет ключ AR Алисе
- Только Алиса может отправлять деньги с этого адреса, потому что только она может создавать действительные подписи для вновь созданного адреса (открытого ключа). Для этого ей просто нужно вычислить приватный ключ к этому адресу следующим образом: $ д + я $ (добавление ее закрытого ключа $д$ и ключ АР $я$ созданный Бобом).
Вопросы:
Возможно ли вообще теоретически делегировать генерацию открытого ключа?
Если да, возможно ли такое изменение стандартного алгоритма ECDSA? Другими словами, создавать открытые ключи для других людей, не зная и не раскрывая закрытый ключ к этому открытому ключу?
Или есть лучший подход к решению этой проблемы?