공개 키/개인 키가 작동하는 방식에 대해 더 잘 이해하려고 시도합니다. 발신자가 본인의 개인 키를 사용하여 문서의 디지털 서명을 본질적으로 얻을 수는 있지만 실제로 이해할 수없는 것은 공개 키를 사용하여 서명을 확인하는 방법입니다. 내 이해는 공개 키 암호화, 개인 키 해독 ... 그 누구도 이해할 수 있습니까?공개 키는 서명을 어떻게 확인합니까?
답변
데이터/메시지 암호화에 대한 "공개 키 암호화, 개인 키 해독"에 대한 이해가 올바른 것입니다. 디지털 서명의 경우 반대입니다. 디지털 서명을 통해 귀하가 서명 한 문서가 귀하로부터 왔음을 증명하려고 시도하고 있습니다. 그렇게하기 위해서는 개인 키만 사용해야합니다.
가장 간단한 설명의 디지털 서명은 서명자의 개인 키로 암호화 된 데이터 (파일, 메시지 등)의 해시 (SHA1, MD5 등)입니다. 그것은 서명자 만이 신뢰를 얻는 곳입니다 (또는 있어야합니다). 누구나 서명자의 공개 키에 액세스 할 수 있어야합니다.
그래서,
- 동일한 데이터 (파일, 메시지 등)의 해시를 계산받는 사람을 검증하고
- 2 개의 해시 값을 비교합니다.
일치하면 서명이 유효한 것으로 간주됩니다. 일치하지 않으면 서명에 다른 키가 사용되었거나 데이터가 (의도적으로 또는 의도하지 않게) 변경되었음을 의미합니다.
희망 하시겠습니까?
내 이해 키가 대칭 아니었다 ... 즉, 공개 키로 암호화 된 개체는 개인 키에 의해 해독 될 수 있지만이 관계가 반대로 작동하지 않았다 ... 더 구체적으로, 나는 개인 키로 암호화 된 객체가 공개 키에 의해 해독 될 수 있다고 생각하지 않습니다. 그것이 사실이라면, 이것보다 확실히 내 질문에 답할 수 있습니다. – jcampos8782
키가 서로 반비례로 작동합니다. 공개 키로 암호화되어 있습니까? 비밀 키로 해독하십시오. 반대로 개인 키를 사용하여 무언가를 암호화하면 공개 키를 사용하여 암호를 해독합니다. 그러한 것이 비대칭 암호의 특성입니다. – Shadowman
대칭이란 동일한 키가 암호화/해독에 사용됨을 의미합니다.비대칭이란 하나의 키가 암호화되고 다른 키가 해독됨을 의미합니다 (반대의 경우도 마찬가지 임). – gtrig
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 일간 검색하는 중! 에 감사하다! –
스크립트를 추가해 주셔서 감사합니다. 명확하게 정리하는 데 도움이되었습니다. – Pat
생각 좀 더 직관적으로 뭔가를 찾고 계시 사람에 대한 보충 설명을 제공 것입니다.
이러한 혼란의 큰 부분은 '공개 키'와 '개인 키'라는 이름에서 비롯됩니다. 왜냐하면 이러한 것들이 실제로 어떻게 작동하는지 직접적으로 '키'가 어떻게 이해되는지와는 정반대이기 때문입니다.
예를 들어 암호화하십시오.각각 키 숨겨진 (예 : 개인 키)를 유지하는 비밀 메시지 수 있도록하려면
- 당사자를 : 그것은과 같이 작업으로 간주 할 수있다 비밀 메시지를 보내려면 모두 잠금 해제 된 잠금 (즉 공개 잠금)을 얻을 수있는 능력이 있어야합니다.
- 비밀 메시지를 보내는 것은 잠금 해제 된 잠금을 사용하여 잠금하는 것만 큼 쉽지만 이후에 잠금을 해제하는 것은 숨겨진 키.
여기서는 비밀 메시지를 상대방에게 보낼 수 있지만 직관적 인 견해에서 '공용 잠금'은 '공개 키'보다 더 적합한 이름입니다.
그러나, 디지털 서명을 보내기위한 역할은 어느 정도 확보되어 있습니다
- 메시지에 서명하고 싶어 당은 잠금 해제 잠금 장치에 접근 할 수있는 유일한 사람 (즉, 개별 Lock)
- 당사자입니다 서명을 확인하고자하는 사람은 모두 공개 키와 같은 키를 구할 수 있습니다.
- 그러면 서명자는 두 사람이 읽을 수있는 메시지와 동행 할 수있는 메시지를 만듭니다. 그들의 사적인 자물쇠 중 하나가 있습니다.
수신자가 메시지를 받으면 읽은 다음 공개 키를 사용하여 잠긴 메시지의 잠금을 해제하고 두 메시지를 비교할 수 있습니다.
잠금 해제 된 메시지는
메시지
가 일치하는 잠금이있는 사람으로부터되어 있어야합니다, 여행하는 동안 훼손 및되지 않은 : 메시지가 동일한 경우, 그들은 알고 그들의 공개 키. 서명자의 서명을 검증하기 위해 원하는 사람은 서명자의 잠금 장치에 일치하는 키를 얻을로 이동하는 권위있는 장소가있는 경우
그리고 마지막으로,이 전체 시스템은 작동합니다. 그렇지 않으면 누구나 "이봐, 여기에 비밀 잠금 장치의 열쇠가있다"라고 말하면서 자신이 가장하는 메시지를 보내지 만 사적인 잠금 장치로 잠그면 위의 모든 단계를 수행하고 실제로 메시지가 있어야한다고 생각할 수 있습니다 당신이 생각한 사람으로부터,하지만 당신이 공개 키의 진정한 소유자에 대해 오해했기 때문에 당신은 바보입니다.
는 너무 오래 서명자의 공개 키를 검색하기위한 신뢰 가치있는 소스 거기, 당신은 공개 키의 정당한 소유자가 누구인지 것이고, 자신의 서명을 검증 할 수있을 것입니다.
좋은 질문. :) –