В конфиденциальной транзакции, предложенной Максвеллом, вместо суммы транзакции мы используем обязательства педерсена, чтобы скрыть сумму и добавить к транзакции доказательство диапазона, чтобы предотвратить переполнение. Простое обязательство с одним входом и одним выходом C1 и C2 выглядит следующим образом: (для простоты игнорируйте комиссию)
C1 = C2 => BF1*G + a*H = BF2*G + a*H
где в этом примере BF1 = BF2
очевидно, поскольку он имеет только один вход и выход.
Как отправитель отправляет сумму и ослепляющий фактор получателю? Получатель может проверить правильность суммы! Я заметил, что Максвелл сказал, что они используют ECDH. Я предполагаю, что для ECDH нет дополнительного канала связи. Тогда как отправитель получает открытый ключ получателя? и должен ли отправитель раскрывать в ECDH как фактор ослепления, так и сумму?
В Elements Alpha выходные «суммы» состоят из 3 частей данных:
Последнее и есть решение. Каждый адрес конфиденциальной транзакции содержит открытый ключ ECDH получателя ( слепой ключ ) в дополнение к обычным данным P2PKH или P2SH.
При отправке транзакции CT отправитель выбирает эфемерный закрытый ключ ECDH и комбинирует его с ослепляющим ключом для получения ослепляющего начального числа . Это начальное число используется в качестве основы для генератора случайных чисел для создания доказательства диапазона. Публичная версия эфемерного ключа затем записывается в 3-м поле суммы.
Когда получатель видит этот эфемерный открытый ключ ECDH, он комбинирует его со своим закрытым ослепляющим ключом, чтобы получить то же начальное число, которое использовал отправитель. Используя это же начальное число, он может «отмотать» доказательство диапазона и расшифровать секретную информацию, которая использовалась при его создании: значение и коэффициент ослепления. На самом деле в доказательстве диапазона есть место для еще 2 килобайт данных, видимых только получателю (или любому, у кого есть секретный ослепляющий ключ).
абейкверди
Марч
Питер Уилле
Питер Уилле