Технический › Ключи и адреса

Приватные ключи

Ключ траты b, ключ просмотра a и их публичные половинки B и A

Коротко

Кошелёк Monero — это пара скаляров: b (private spend key) и a = Hs(b) (private view key). Их публичные версии: B = b·G и A = a·G. Адрес — это просто B и A, записанные вместе.

Ключ траты

Приватный ключ траты b — случайный скаляр по модулю l. В классическом формате сид-фраза из 25 слов — это и есть b, просто записанный словами. Генерация:

  1. взять 32 случайных байта (или больше — для равномерности);
  2. прочитать их как число little-endian;
  3. привести по модулю l (sc_reduce32).

Ключ траты нужен для двух вещей: вычислить приватный ключ одноразового выхода (чтобы подписать трату) и вычислить key image.

Ключ просмотра

Приватный ключ просмотра можно было бы сделать независимым случайным числом, но стандартные кошельки выводят его из ключа траты:

a = Hs(b) = Keccak256(b) mod l

Благодаря этому одной сид-фразы достаточно, чтобы восстановить оба ключа. Ключ просмотра используется при сканировании блокчейна: для каждой транзакции кошелёк вычисляет общий секрет 8·a·R и проверяет, не ему ли адресован выход (подробно — в одноразовых адресах).

Публичные ключи

B = b·G      A = a·G

Это две точки кривой, по 32 байта. Они не секретны: из них состоит ваш адрес.

bprivate spend aprivate view Bpublic spend Apublic view Hs ·G ·G

Кто что может

Есть у васМожноНельзя
A, B (адрес)отправлять деньги этому кошелькувидеть что-либо
a, B (view-only)находить входящие выходы и их суммытратить; надёжно видеть траты
a, bвсё—
Что изменится с Carrot

С переходом на Carrot иерархия ключей станет глубже: появятся отдельные ключи «видеть входящие», «видеть всё», «генерировать key image». Но для существующих кошельков ключи a и b продолжат работать.