公钥如何validation签名?

试图更好地解决公钥/私钥如何工作的问题。 我了解,发件人可以使用他/她的私钥向文档添加数字签名,以获得文档的哈希值,但我不明白的是如何使用公钥来validation签名。 我的理解是公钥encryption,私钥解密…谁能帮我理解?

您对“公钥encryption,私钥解密”的理解是正确的…用于数据/消息encryption。 对于数字签名来说,情况恰恰相反。 用数字签名,你试图certificate你签名的文件来自你。 要做到这一点,你需要使用只有你有的东西:你的私钥。

最简单描述中的数字签名是随后用签名者的私钥encryption的数据(文件,消息等)的散列(SHA1,MD5等)。 因为那是只有签名者拥有(或者应该有)那个信任来自的地方。 每个人都(或应该有)访问签名者的公钥。 因此,为了validation数字签名,接收方(1)计算相同数据(文件,消息等)的散列,(2)使用发送方的PUBLIC密钥解密数字签名,以及(3)比较2个散列值。 如果他们匹配,签名被认为是有效的。 如果它们不匹配,则意味着使用不同的密钥对其签名,或者数据已被改变(有意或无意)。

希望有所帮助!

正如atn的答案所指出的那样 ,按键是相反的。

公钥encryption,私钥解密(encryption):

openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out message.ssl openssl rsautl -decrypt -inkey private.pem -in message.ssl -out message.txt 

私钥encryption,公钥解密(签名):

 openssl rsautl -sign -inkey private.pem -in message.txt -out message.ssl openssl rsautl -inkey public.pem -pubin -in message.ssl -out message.txt 

以下是使用openssltesting整个stream程的示例脚本。

 #!/bin/sh # Create message to be encrypted echo "Creating message file" echo "---------------------" echo "My secret message" > message.txt echo "done\n" # Create asymmetric keypair echo "Creating asymmetric key pair" echo "----------------------------" openssl genrsa -out private.pem 1024 openssl rsa -in private.pem -out public.pem -pubout echo "done\n" # Encrypt with public & decrypt with private echo "Public key encrypts and private key decrypts" echo "--------------------------------------------" openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out message_enc_pub.ssl openssl rsautl -decrypt -inkey private.pem -in message_enc_pub.ssl -out message_pub.txt xxd message_enc_pub.ssl # Print the binary contents of the encrypted message cat message_pub.txt # Print the decrypted message echo "done\n" # Encrypt with private & decrypt with public echo "Private key encrypts and public key decrypts" echo "--------------------------------------------" openssl rsautl -sign -inkey private.pem -in message.txt -out message_enc_priv.ssl openssl rsautl -inkey public.pem -pubin -in message_enc_priv.ssl -out message_priv.txt xxd message_enc_priv.ssl cat message_priv.txt echo "done\n" 

该脚本输出以下内容:

 Creating message file --------------------- done Creating asymmetric key pair ---------------------------- Generating RSA private key, 1024 bit long modulus ...........++++++ ....++++++ e is 65537 (0x10001) writing RSA key done Public key encrypts and private key decrypts -------------------------------------------- 00000000: 31c0 f70d 7ed2 088d 9675 801c fb9b 4f95 1...~....u....O. 00000010: c936 8cd0 0cc4 9159 33c4 9625 d752 5b77 .6.....Y3..%.R[w 00000020: 5bfc 988d 19fe d790 b633 191f 50cf 1bf7 [........3..P... 00000030: 34c0 7788 efa2 4967 848f 99e2 a442 91b9 4.w...Ig.....B.. 00000040: 5fc7 6c79 40ea d0bc 6cd4 3c9a 488e 9913 _.ly@...l.<.H... 00000050: 387f f7d6 b8e6 5eba 0771 371c c4f0 8c7f 8.....^..q7..... 00000060: 8c87 39a9 0c4c 22ab 13ed c117 c718 92e6 ..9..L"......... 00000070: 3d5b 8534 7187 cc2d 2f94 0743 1fcb d890 =[.4q..-/..C.... My secret message done Private key encrypts and public key decrypts -------------------------------------------- 00000000: 6955 cdd0 66e4 3696 76e1 a328 ac67 4ca3 iU..f.6.v..(.gL. 00000010: d6bb 5896 b6fe 68f1 55f1 437a 831c fee9 ..X...hUCz.... 00000020: 133a a7e9 005b 3fc5 88f7 5210 cdbb 2cba .:...[?...R...,. 00000030: 29f1 d52d 3131 a88b 78e5 333e 90cf 3531 )..-11..x.3>..51 00000040: 08c3 3df8 b76e 41f2 a84a c7fb 0c5b c3b2 ..=..nA..J...[.. 00000050: 9d3b ed4a b6ad 89bc 9ebc 9154 da48 6f2d .;.J.......T.Ho- 00000060: 5d8e b686 635f b6a4 8774 a621 5558 7172 ]...c_...t.!UXqr 00000070: fbd3 0c35 df0f 6a16 aa84 f5da 5d5e 5336 ...5..j.....]^S6 My secret message done