Приватные ключи
Ключ траты 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, просто записанный словами. Генерация:
- взять 32 случайных байта (или больше — для равномерности);
- прочитать их как число little-endian;
- привести по модулю
l(sc_reduce32).
Ключ траты нужен для двух вещей: вычислить приватный ключ одноразового выхода (чтобы подписать трату) и вычислить key image.
Ключ просмотра
Приватный ключ просмотра можно было бы сделать независимым случайным числом, но стандартные кошельки выводят его из ключа траты:
Благодаря этому одной сид-фразы достаточно, чтобы восстановить оба ключа. Ключ просмотра используется при сканировании блокчейна: для каждой транзакции кошелёк вычисляет общий секрет 8·a·R и проверяет, не ему ли адресован выход (подробно — в одноразовых адресах).
Публичные ключи
Это две точки кривой, по 32 байта. Они не секретны: из них состоит ваш адрес.
Кто что может
| Есть у вас | Можно | Нельзя |
|---|---|---|
A, B (адрес) | отправлять деньги этому кошельку | видеть что-либо |
a, B (view-only) | находить входящие выходы и их суммы | тратить; надёжно видеть траты |
a, b | всё | — |
С переходом на Carrot иерархия ключей станет глубже: появятся отдельные ключи «видеть входящие», «видеть всё», «генерировать key image». Но для существующих кошельков ключи a и b продолжат работать.