Добавлена реализация двухфакторной авторизации (2fa)

В клиенте реализован функционал дополнительной (так называемой двухфакторной, 2fa) авторизации, основанный стандартном функционале подписи приватным ключом некоего сообщения.

Основной идеей создания такого механизма служит безотказность метода и безопасность с точки зрения нераспространения приватных ключей и их передачи от сервера клиенту с возможной его компрометацией или потерей, а также возможность в любой момент изменения идентификатора клиентом без какого-либо участия в этом сервера.

Фактически данный механизм позволяет пользователю в любой момент времени задать, а при необходимости и изменить, свою подпись не компрометируя и не передавая приватный ключ по сети, храня его только и исключительно у себя, при этом передавая серверу, фактически, публичные данные.

Механизм дополнительной авторизации основан на указании авторизующей стороне (серверу) своего адреса, имеющегося в клиенте, и последующего подтверждения через подпись условного сообщения, выдаваемого сервером. В данном случае сообщением может служить только хэш транзакции, которая принята сетью и добавлена в основную цепочку блоков, что и проверяется клиентом перед подписью. Это сделано для того, чтобы исключить возможность подстановки сайтами условно рандомных строк, с помощью которых существует возможность компрометации (получения путём обратного вычисления) приватного ключа.

Работа функционала на примере вызова RPC-функций подписи сообщений:

  1. проверка транзакции:
  2. не существующая
    $ 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
    }
    
  3. подпись хэша транзакции:
  4. при этом в разный момент времени формируются разные строки подписи

    
    $ novacoind signmessage 4VNWeTwn8ksdVLBAfadUvqYE6kcBrrZNR1 269b219e8815e309b75c932c6e429d16796f8fa7427e086fd34052f319efa069
    IOyoppPWD1+IA6pa6vN61mnEB0Dk4gzxZZ6RpIJ28FlmG0akLDa+kt5Z/Ho4hhtMXm+izCRi7l10GO5hYx2iJxM=
    
    $ novacoind signmessage 4VNWeTwn8ksdVLBAfadUvqYE6kcBrrZNR1 269b219e8815e309b75c932c6e429d16796f8fa7427e086fd34052f319efa069
    H011yM9wo5tBYBTmyFwa2a7CmI8UeQ6N6MckO2a1alJ+E2bkPUEqTKFKqqrGxWKVQw8+9u/jgCBr+YJoaW+3aKg=
    
  5. проверка подписи сервером:
  6. 
    $ 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
    

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *