PKI на ENS. Часть 2. Proof-of-Concept
Небольшие правки в первой части и программа для связки пары ключей для подписи и домена (имени).
1. Исправление первой части
Я предожил использовать резолвинг имени на хеш для проверки принадлежности ключей домену. Но в данном случае несколько юзеров могут настроить резолвинг своих имен на хеш нашего публичного ключа. Это решается обратным резолвингом, т.е. ip адрес на домен как в DNS. Будет связка один хеш — одно имя. Но если несколько имен могут резолвится на один хеш, то что тогда возвращать? В ENS есть понятия резолвинга имени на хеш и владением имени — т.е. тот адрес, который решает на какой хеш резолвится домен. Алиса может быть владельцем домена example.eth, но получим мы адрес Боба при вводе example.eth в кошельке при переводе (потому что так решила Алиса и она может это изменить).
У Алисы есть primary name. Primary name ссылается только на адрес, который влаеет этим доменом и именно это имя будет возвращено при обратном резолвинге.
2. Proof-of-Concept
В качестве примера написал небольшую программу для подписи и проверки сигнатуры.
На главной — описание того, что делает эта программа и 2 кнопки — sign (подпись) и check (проверка подписи).
Sign — несколько полей ввода, Private Key or Mnemonic — приватный ключ для шифрования хеша файла, т.е. подписи. File path — путь до файла, который подписывваем, Signature — в это поле выводится сама подпись (или сигнатура).
Check — также несколько полей ввода, URL Ethereum node — адрес ноды, можно указать публичную ноду Ethereum (через запрашивается имя через обратный резолвинг), Domain — домен, подпись которого хотим проверить (будет сравниваться запрашиваемый домен с тем, который указали). File path — путь до файла, подпись которого проверяем. Signature — сама подпись. Возможно стоило бы добавить вывод домена, который подписал этот файл, если не известно имя подписавшего (думаю добавлю позже).
3. Заключение
Можете проверить подписи txt файлов с сообщениями one и two. Подписи файлов:
aa2172e851c1a0fa3a8fe32ca804df52bc1d0d124fe4a88cbbc195b84105b4bf7543f0758c4acbafa74915100ab4bb229ad4c3e662cf08fa68e3dda0bfb9486c00
ba6a7d07f05a026664d27ec60864cc192c71f3b9aa30df059c8b0f670d2d64ca27498e79347f21dc5fcc79ae838794bd417906514d94887e3931d9d3fb0a16f200
Домен, который подписал — signature-escrow-test.eth. Публичную ноду ethereum может предоставить infura.