Как можно проверить без закрытого ключа (NBitcoin)
Я использую пакет Ngetcoin nuget. Я пытаюсь создать закрытый и открытый ключ (адрес). И после этого я пытаюсь подписать какое-то сообщение и затем проверить эту подпись с ключом публикации. Но NBitcoin, для проверки, используя объект BitcoinSecret, который имеет объект закрытого ключа. Итак, зачем проверять NBitcoin, используя этот объект? И как я могу проверить подпись без закрытого ключа, просто используя адрес (pubKey), подпись и сообщение? Спасибо
static void Main(string[] args)
{
Key Key = new Key(); //Create private key
//We can take private key
var privateKey = Key.GetBitcoinSecret(Network.Main);
//Get the public key, and derive the address on the Main network
BitcoinAddress address = privateKey.PubKey.GetAddress(Network.Main);
For the sign to data , create secret object.
BitcoinSecret secret = new BitcoinSecret(Key, Network.Main);
string message = $"I am Nicolas";
Console.WriteLine("Message:" + message + "\n");
sign message with private key.
string signature = secret.PrivateKey.SignMessage(message);
Console.WriteLine("Signature:" + signature + "\n");
/* Now I dont understand this code. For the verify , I know that we need
to signature message , message and pub or adres value.\n But in this code using
again private secret object which has got private key. How we can verify
signature messaga with pub or address and message (dont include private key)*/
if (secret.PubKey.VerifyMessage(message, signature))
{
Console.WriteLine("thats okey");
}
Console.Read();
}
1 ответ
Открытый ключ не может существовать без закрытого ключа, так как открытый ключ получен из закрытого ключа с использованием однонаправленной функции. Если вы хотите использовать открытый ключ без закрытого ключа, то сгенерируйте его из закрытого ключа, как вы это делали
var pubKey = privateKey.PubKey;
хранить открытый ключ в каком-то месте, к которому у проверяющего есть доступ
File.WriteAllBytes("some/public/location/MyPubKey.key", pubKey.ToBytes());
пусть проверяющий прочитает открытый ключ, даже не зная секретного ключа
var pubKeyForVerification = File.ReadAllBytes("some/public/location/MyPubKey.key");
Это все, что нужно сделать. Хранить открытый ключ безопасно где угодно, потому что практически невозможно извлечь из него закрытый ключ.