Как работает технология конфиденциальных транзакций?
Технология реализует новые форматы адреса и транзакции. Формат транзакции состоит из scriptPubKey, схемы обязательства Педерсена и случайного кода ECDH (эллиптической кривой Диффи-Хелмана).
ScriptPubKey содержит адрес конфиденциальной транзакции (Confidential Transaction Address — CTA) и математическое условие, согласно которому биткоин можно потратить только в том случае, если право собственности закрытого ключа адреса подтверждено подписью.
Адрес конфиденциальной транзакции – это хеш ослепляющего ключа плюс обычный биткоин-адрес.
Функция ослепляющего ключа – скрывать в публичном реестре адрес биткоина и сумму транзакции. Кроме того, доступ к ослепляющему ключу дает возможность видеть адрес биткоина и сумму в конфиденциальной транзакции.
Схема обязательства Педерсена – это хеш всего выхода биткоина плюс ослепляющий ключ.
Код ECDH – это ключ, позволяющий раскрыть всю конфиденциальную транзакцию. Он используется для передачи зашифрованных данных получателю транзакции, который узнает выход биткоин-транзакции и ослепляющий фактор конфиденциальной транзакции.
Пример работы конфиденциальных транзакций.
На кошельке Алисы два биткоина, один из которых она хочет отправить Бобу.
Получив адрес Боба, Алиса создает ослепляющий ключ и объединяет их единым хешем. Так возникает конфиденциальный адрес. Хотя он записывается в публичном реестре, никто, кроме Алисы и Боба, не знает, что адрес конфиденциальной транзакции связан с адресом Боба.
Пример конфиденциального адреса:
CTEwQjyErENrxo8dSQ6pq5atss7Ym9S7P6GGK4PiGAgQRgoh1iPUkLQ168Kqptfnwmpxr2Bf7ipQsagi
Затем Алиса создает конфиденциальную транзакцию. Используя тот же самый ослепляющий ключ и выход одного биткоина, она создает обязательство Педерсена. Благодаря этому сумма, которую Алиса посылает Бобу, скрывается, но оба они могут видеть ее, поскольку у обоих есть публичный ослепляющий ключ. У Алисы он есть, поскольку она создала ослепляющий ключ, а Боб может вывести его с помощью закрытого ключа своего биткоин-адреса.
Затем Алиса создает scriptPubKey с адресом конфиденциальной транзакции, который она создала с биткоин-адресом Боба, с математическим условием, согласно которому можно потратить один биткоин, если Боб сумеет подтвердить подписью владение закрытым ключом адреса.
Затем транзакция записывается в публичном реестре.