проблемаКак мы можем предотвратить ситуацию, взломанный веб-сервер, и все платежные адреса заменяются теми, нападавшие. Мы хотим, чтобы детерминированные бумажник, и мы не хотят иметь, чтобы дать каждому клиенту всю нашу общественную сеть ключ. Использование SSL / PKI / и т.д. Предполагается, здесь необходимо, так как мы не берем на себя никакие предварительные отношений между продавцом и покупателем, и связь происходит через незащищенный канал (т.е. - Интернет).
РешениеДанное решение обладает следующими свойствами:
(1) сертификат подписи (X.509, GPG, Bitcoin закрытый ключ, что угодно), может находиться в автономном режиме и остаются в автономном режиме навсегда - он никогда не подключен, любыми средствами интернет-компьютера
(1a), сертификат подписи доверять, потому что он несет подпись ЦС
(2) Использование детерминированных кошельков без раскрывая всю цепочку, и без подписания каждого отдельного ключа
(3) Сертификат используется только для подписания корневого открытого ключа детерминированного бумажника, один раза. Все полученные / дочерние ключи могут быть доказаны в рамках этой общественной сети, не раскрывая chaincode.
Рассмотрим детерминированный бумажник таким образом, что у вас есть открытый ключ корня, Публичных (0), и имеют детерминированный способ получения последовательности кодов цепи, ChainCode (I), которые не являются государственными. Затем, если вы используете:
Код:
Публичный (я) = Хеш (ChainCode (я)) * Публичный (0)
InvoiceID = Хеш (ChainCode (я))
InvoiceID = Хеш (ChainCode (я))
Клиент представлены (InvoiceID, сертификат, подписанный Публичных (0), CA подписанный сертификат).
Клиент проверяет сертификат подписан доверенным центром сертификации Затем они проверяют, что Публичный (0) несет подпись этого сертификата. Тогда они подтверждают, что InvoiceID * Публичный (0) действительно совпадают с адресом, им было предложено заплатить. Так как счет-фактура является хэш Chaincode, нет никакого способа для клиента, чтобы произвести любые другие ключи (несмотря на наличие открытого ключа корневого, который будет оставаться неиспользованным, так что можно было бы использовать для этой аутентификации). Конфиденциальность сохраняется.
Простой, простой, и прямо вниз по той же аллее, как детерминированных бумажники, сами. Даже если веб-сервер находится под угрозой, только адреса можно распространять, которые будут приняты заказчиком, было бы те, полученные из Публичных (0). Конечно, он может распространять адреса с использованием произвольных 32-байтовые chaincodes, но, по крайней мере, злоумышленник не будет иметь возможность вставить свой собственный адрес, который удаляет около 98% от мотивации к атаке, чтобы начать с. (А в случае произвольных кодов 32 байт, коммерсантъ нужно только, чтобы получить InvoiceID от клиента, чтобы получить доступ к денежным средствам).
Благодаря roconner для простых в-ретроспективного решения этого.
Обновить: Я хотел бы отметить, что это возможно без каких-либо изменений, если вы используете BIP 32 бумажники. Если вы посмотрите на то, как адрес цепочки работы, вы видите, что идти от Root-->Ребенок:
Код:
I = HMAC_SHA512 (RootChain, RootPubKey || ChildID)
Я 64 байт, а затем разделить на
котировка
ChildMult = Iоставил = I [: 32]
ChildChain = Iправильно = I [32:]
ChildPubKey = ChildMult * RootPubKey
Таким образом, открытый ключ ребенка может быть получен из открытого ключа корневого используя множителя, который не связанные с кодом цепи. Это означает, что вы можете подписать RootPubKey с сертификатом в автономном режиме (но не выдают chaincode!), А затем яоставил может быть использован в качестве "InvoiceID" выше. Она прекрасно вписывается в BIP 32.ChildChain = Iправильно = I [32:]
ChildPubKey = ChildMult * RootPubKey