61

Попытка получить лучшее решение о том, как работают открытые/закрытые ключи. Я понимаю, что отправитель может добавить цифровую подпись к документу, используя свой секретный ключ, чтобы существенно получить хэш документа, но я не понимаю, как можно использовать открытый ключ для проверки подлинности. Мое понимание заключалось в том, что шифрование открытых ключей, закрытие секретных ключей ... может ли кто-нибудь помочь мне понять?Как открытый ключ проверяет подпись?

+0

Хороший вопрос. :) –

ответ

100

Ваше понимание «шифрования открытых ключей, закрытие секретных ключей» является правильным ... для данных/сообщений ENCRYPTION. Для цифровых подписей это наоборот. С цифровой подписью вы пытаетесь доказать, что подписанный вами документ пришел от вас. Для этого вам нужно использовать то, что только у вас есть: ваш секретный ключ.

Цифровая подпись в своем простейшем описании представляет собой хэш (SHA1, MD5 и т. Д.) Данных (файл, сообщение и т. Д.), Которые впоследствии зашифровываются личным ключом подписывающего лица. Так как это то, что только подписавший имеет (или должен иметь) то, откуда приходит доверие. EVERYONE имеет (или должен иметь) доступ к открытому ключу подписывающего лица.

Таким образом, для проверки цифровой подписи, получатель

  1. вычисляет хэш одних и тех же данных (файла, сообщения и т.д.),
  2. Расшифровывает цифровой подписи с использованием открытого ключа отправителя и
  3. Сравнивает два значения хэша.

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

Надеюсь, что это поможет!

+6

Мое понимание было то, что ключи не были симметричными ... то есть объекты, зашифрованные открытым ключом, могут быть дешифрованы закрытым ключом, но это отношение не работает обратное ... более конкретно, я сделал не думать, что объекты, зашифрованные с помощью закрытого ключа, могут быть дешифрованы открытым ключом. Если это действительно так, то это определенно отвечает на мой вопрос. – jcampos8782

+28

Ключи работают обратно друг против друга. Зашифровано что-то своим открытым ключом? Расшифруйте его своим личным ключом. И наоборот, если вы зашифровали что-то своим личным ключом, вы расшифруете его со своей публикой. Такова природа асимметричной криптографии. – Shadowman

+11

Симметричный означает, что один и тот же ключ используется для шифрования/дешифрования.Assymetric означает, что один ключ шифруется, а другой ключ расшифровывается (и что обратное также верно). – gtrig

27

Как указано в atn's answer, ключи работают обратно.

открытый ключ шифрует секретный ключ расшифровывает (шифрование):

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 

Частные зашифровывает, открытый ключ расшифровывает (подпись):

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

Ниже Вы пример скрипта для тестирования всего потока с помощью openssl.

#!/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 [email protected]<.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...h.U.Cz.... 
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 
+2

Отлично! Большое спасибо!!! Поиск этих простых строк 2 дня! Понятно, что! –

+0

Спасибо за добавление скрипта - определенно помогли разобраться. – Pat

-1

Мысль я бы обеспечить дополнительное объяснение для тех, кто ищет что-то более интуитивно показательны.

Большая часть этой путаницы возникает из-за именования «открытых ключей» и «частных ключей» как таковых, потому что, как эти вещи фактически работают, прямо противоречит тому, как понимается «ключ».

Возьмите шифрование, например.Это можно было бы рассматривать как работает следующим образом:

  • Сторон, которые хотят, чтобы иметь возможность читать секретные сообщения друг держать ключевую скрытую (то есть секретный ключ)
  • Сторон, которые хотят быть в состоянии для отправки секретных сообщений все имеют возможность получить разблокированную блокировку (то есть публичную блокировку)
  • Затем отправка секретного сообщения так же просто, как блокировка его разблокированной блокировкой, но после этого разблокировка может быть выполнена только с одной из скрытые ключи.

Это позволяет отправлять секретные сообщения между сторонами, но с интуитивной точки зрения здесь «публичный замок» является более подходящим именем, чем «открытый ключ».

Однако для передачи цифровых подписей в ролях несколько изменились:

  • Партии, которая хочет подписывать сообщения является только один с доступом к разблокированным замкам (т.е. частного замка)
  • Стороны которые хотят проверить подпись, имеют возможность получить ключ (т. е. открытый ключ)
  • Тогда то, что делает подписчик, создает два одинаковых сообщения: тот, который каждый может читать, и один для сопровождения, но который они блокируют с одним из их частных замков.
  • Затем, когда получатель получает сообщение, он может его прочитать, а затем использовать открытый ключ, чтобы разблокировать заблокированное сообщение и сравнить два сообщения. Если сообщения одинаковы, то они знают, что:

    1. Разблокированное сообщение не подделаны во время путешествий и

    2. Сообщения должен быть от человека, который имеет блокировку соответствия для их открытый ключ.

  • И, наконец, вся эта система работает только тогда, когда кто-то, кто хочет проверить подпись подписант имеет авторитетное место, чтобы пойти, чтобы получить соответствующий ключ для замков подписавших. В противном случае любой может сказать: «Эй, вот ключ к закрытой блокировке такого и того же», отправьте вам сообщение, притворяясь им, но заблокируйте его своим закрытым замком, выполните все вышеперечисленные шаги и верьте, что сообщение должно быть действительно от человека, которого вы считали, но вас обманули, потому что вы были введены в заблуждение относительно истинного владельца открытого ключа.

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

+0

Изменение «ключа» на «разблокированный замок» просто добавляет к путанице. – EJP

+0

@EJP Я не меняю ключ на «разблокированный замок». Он изменен на «lock». «Unlocked locked» используется только для выражения использования элемента. Реджордс, это ваше мнение, и если у вас есть многолетний опыт работы в криптовом сообществе, это, вероятно, крайне предвзято, потому что существующие термины - это то, как вы выросли, чтобы понять эту технологию. Почему бы вам не позволить людям, которые только начинают определять, полезно или нет аналогия? – shoe