В клиенте реализован функционал дополнительной (так называемой двухфакторной, 2fa) авторизации, основанный стандартном функционале подписи приватным ключом некоего сообщения.
Основной идеей создания такого механизма служит безотказность метода и безопасность с точки зрения нераспространения приватных ключей и их передачи от сервера клиенту с возможной его компрометацией или потерей, а также возможность в любой момент изменения идентификатора клиентом без какого-либо участия в этом сервера.
Фактически данный механизм позволяет пользователю в любой момент времени задать, а при необходимости и изменить, свою подпись не компрометируя и не передавая приватный ключ по сети, храня его только и исключительно у себя, при этом передавая серверу, фактически, публичные данные.
Механизм дополнительной авторизации основан на указании авторизующей стороне (серверу) своего адреса, имеющегося в клиенте, и последующего подтверждения через подпись условного сообщения, выдаваемого сервером. В данном случае сообщением может служить только хэш транзакции, которая принята сетью и добавлена в основную цепочку блоков, что и проверяется клиентом перед подписью. Это сделано для того, чтобы исключить возможность подстановки сайтами условно рандомных строк, с помощью которых существует возможность компрометации (получения путём обратного вычисления) приватного ключа.
Работа функционала на примере вызова RPC-функций подписи сообщений:
- проверка транзакции:
- подпись хэша транзакции:
- проверка подписи сервером:
не существующая
$ novacoind getrawtransaction 269b219e8815e309b75c932c6e429d16796f8fa7472e086fd34052f319efa069
error: {"code":-5,"message":"No information available about transaction"}
существующая
$ novacoind gettransaction 269b219e8815e309b75c932c6e429d16796f8fa7427e086fd34052f319efa069
{
"txid" : "269b219e8815e309b75c932c6e429d16796f8fa7427e086fd34052f319efa069",
"version" : 1,
"time" : 1441595574,
"locktime" : 0,
"vin" : [
{
"txid" : "44459fd00f180fdce3a96929dcb6ddeb185238d63cb05d7441e760f900f222d4",
"vout" : 1,
"scriptSig" : {
"asm" : "3045022100842ac9652056f2d86527ede24df2b6b013b6f15e89c4e216f58c6474b31d542302203db0c3d993b99ff779e84177fb09cdf28c70654fdb1512515a2c1a8212ac06eb01",
"hex" : "483045022100842ac9652056f2d86527ede24df2b6b013b6f15e89c4e216f58c6474b31d542302203db0c3d993b99ff779e84177fb09cdf28c70654fdb1512515a2c1a8212ac06eb01"
},
"sequence" : 4294967295
},
{
"txid" : "44459fd00f180fdce3a96929dcb6ddeb185238d63cb05d7441e760f900f222d4",
"vout" : 2,
"scriptSig" : {
"asm" : "3045022100f6985b4d1b0c7fce79868ce143b652f97da41909d8366379485bef90ff6a4dd8022076b2d588129d5b22d6a6a5564846f41f4fa7efa4c3d33340248c3df29c11c7f101",
"hex" : "483045022100f6985b4d1b0c7fce79868ce143b652f97da41909d8366379485bef90ff6a4dd8022076b2d588129d5b22d6a6a5564846f41f4fa7efa4c3d33340248c3df29c11c7f101"
},
"sequence" : 4294967295
}
],
"vout" : [
{
"value" : 119.48498500,
"n" : 0,
"scriptPubKey" : {
"asm" : "OP_DUP OP_HASH160 92f2668ff8dfa6b8dcae52b4c2a85b1414c18568 OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "76a91492f2668ff8dfa6b8dcae52b4c2a85b1414c1856888ac",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"4T6ovAhjK9hfumEto1SMYmmkFoKaY423n9"
]
}
}
],
"blockhash" : "eb3473d383ea3c6288717b1726f6ce1457e671888f5e78ba151f508c41b58950",
"confirmations" : 2258
}
при этом в разный момент времени формируются разные строки подписи
$ novacoind signmessage 4VNWeTwn8ksdVLBAfadUvqYE6kcBrrZNR1 269b219e8815e309b75c932c6e429d16796f8fa7427e086fd34052f319efa069
IOyoppPWD1+IA6pa6vN61mnEB0Dk4gzxZZ6RpIJ28FlmG0akLDa+kt5Z/Ho4hhtMXm+izCRi7l10GO5hYx2iJxM=
$ novacoind signmessage 4VNWeTwn8ksdVLBAfadUvqYE6kcBrrZNR1 269b219e8815e309b75c932c6e429d16796f8fa7427e086fd34052f319efa069
H011yM9wo5tBYBTmyFwa2a7CmI8UeQ6N6MckO2a1alJ+E2bkPUEqTKFKqqrGxWKVQw8+9u/jgCBr+YJoaW+3aKg=
$ novacoind verifymessage 4VNWeTwn8ksdVLBAfadUvqYE6kcBrrZNR1 IOyoppPWD1+IA6pa6vN61mnEB0Dk4gzxZZ6RpIJ28FlmG0akLDa+kt5Z/Ho4hhtMXm+izCRi7l10GO5hYx2iJxM= 269b219e8815e309b75c932c6e429d16796f8fa7427e086fd34052f319efa069
true
$ novacoind verifymessage 4VNWeTwn8ksdVLBAfadUvqYE6kcBrrZNR1 H011yM9wo5tBYBTmyFwa2a7CmI8UeQ6N6MckO2a1alJ+E2bkPUEqTKFKqqrGxWKVQw8+9u/jgCBr+YJoaW+3aKg= 269b219e8815e309b75c932c6e429d16796f8fa7427e086fd34052f319efa069
true
$ novacoind verifymessage 4VNWeTwn8ksdVLBAfadUvqYE6kcBrrZNR1 H011yM9wo5tBYBTmyFwa2a7CmI8UeQ6N6MckO2a2alJ+E2bkPUEqTKFKqqrGxWKVQw8+9u/jgCBr+YJoaW+3aKg= 269b219e8815e309b75c932c6e429d16796f8fa7427e086fd34052f319efa069
false