61

공개 키/개인 키가 작동하는 방식에 대해 더 잘 이해하려고 시도합니다. 발신자가 본인의 개인 키를 사용하여 문서의 디지털 서명을 본질적으로 얻을 수는 있지만 실제로 이해할 수없는 것은 공개 키를 사용하여 서명을 확인하는 방법입니다. 내 이해는 공개 키 암호화, 개인 키 해독 ... 그 누구도 이해할 수 있습니까?공개 키는 서명을 어떻게 확인합니까?

+0

좋은 질문. :) –

답변

100

데이터/메시지 암호화에 대한 "공개 키 암호화, 개인 키 해독"에 대한 이해가 올바른 것입니다. 디지털 서명의 경우 반대입니다. 디지털 서명을 통해 귀하가 서명 한 문서가 귀하로부터 왔음을 증명하려고 시도하고 있습니다. 그렇게하기 위해서는 개인 키만 사용해야합니다.

가장 간단한 설명의 디지털 서명은 서명자의 개인 키로 암호화 된 데이터 (파일, 메시지 등)의 해시 (SHA1, MD5 등)입니다. 그것은 서명자 만이 신뢰를 얻는 곳입니다 (또는 있어야합니다). 누구나 서명자의 공개 키에 액세스 할 수 있어야합니다.

그래서,

  • 보낸 사람의 공개 키를 사용하여 디지털 서명을 해독 디지털 서명,

    1. 동일한 데이터 (파일, 메시지 등)의 해시를 계산받는 사람을 검증하고
    2. 2 개의 해시 값을 비교합니다.

    일치하면 서명이 유효한 것으로 간주됩니다. 일치하지 않으면 서명에 다른 키가 사용되었거나 데이터가 (의도적으로 또는 의도하지 않게) 변경되었음을 의미합니다.

    희망 하시겠습니까?

  • +6

    내 이해 키가 대칭 아니었다 ... 즉, 공개 키로 암호화 된 개체는 개인 키에 의해 해독 될 수 있지만이 관계가 반대로 작동하지 않았다 ... 더 구체적으로, 나는 개인 키로 암호화 된 객체가 공개 키에 의해 해독 될 수 있다고 생각하지 않습니다. 그것이 사실이라면, 이것보다 확실히 내 질문에 답할 수 있습니다. – jcampos8782

    +28

    키가 서로 반비례로 작동합니다. 공개 키로 암호화되어 있습니까? 비밀 키로 해독하십시오. 반대로 개인 키를 사용하여 무언가를 암호화하면 공개 키를 사용하여 암호를 해독합니다. 그러한 것이 비대칭 암호의 특성입니다. – Shadowman

    +11

    대칭이란 동일한 키가 암호화/해독에 사용됨을 의미합니다.비대칭이란 하나의 키가 암호화되고 다른 키가 해독됨을 의미합니다 (반대의 경우도 마찬가지 임). – 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

    생각 좀 더 직관적으로 뭔가를 찾고 계시 사람에 대한 보충 설명을 제공 것입니다.

    이러한 혼란의 큰 부분은 '공개 키'와 '개인 키'라는 이름에서 비롯됩니다. 왜냐하면 이러한 것들이 실제로 어떻게 작동하는지 직접적으로 '키'가 어떻게 이해되는지와는 정반대이기 때문입니다.

    예를 들어 암호화하십시오.각각 키 숨겨진 (예 : 개인 키)를 유지하는 비밀 메시지 수 있도록하려면

  • 당사자를 읽을 수 있도록하려면

    • 당사자를 : 그것은과 같이 작업으로 간주 할 수있다 비밀 메시지를 보내려면 모두 잠금 해제 된 잠금 (즉 공개 잠금)을 얻을 수있는 능력이 있어야합니다.
    • 비밀 메시지를 보내는 것은 잠금 해제 된 잠금을 사용하여 잠금하는 것만 큼 쉽지만 이후에 잠금을 해제하는 것은 숨겨진 키.

    여기서는 비밀 메시지를 상대방에게 보낼 수 있지만 직관적 인 견해에서 '공용 잠금'은 '공개 키'보다 더 적합한 이름입니다.

    그러나, 디지털 서명을 보내기위한 역할은 어느 정도 확보되어 있습니다

    • 메시지에 서명하고 싶어 당은 잠금 해제 잠금 장치에 접근 할 수있는 유일한 사람 (즉, 개별 Lock)
    • 당사자입니다 서명을 확인하고자하는 사람은 모두 공개 키와 같은 키를 구할 수 있습니다.
    • 그러면 서명자는 두 사람이 읽을 수있는 메시지와 동행 할 수있는 메시지를 만듭니다. 그들의 사적인 자물쇠 중 하나가 있습니다.
    • 수신자가 메시지를 받으면 읽은 다음 공개 키를 사용하여 잠긴 메시지의 잠금을 해제하고 두 메시지를 비교할 수 있습니다.

      1. 잠금 해제 된 메시지는

      2. 메시지

        가 일치하는 잠금이있는 사람으로부터되어 있어야합니다, 여행하는 동안 훼손 및되지 않은 : 메시지가 동일한 경우, 그들은 알고 그들의 공개 키. 서명자의 서명을 검증하기 위해 원하는 사람은 서명자의 잠금 장치에 일치하는 키를 얻을로 이동하는 권위있는 장소가있는 경우

    • 그리고 마지막으로,이 전체 시스템은 작동합니다. 그렇지 않으면 누구나 "이봐, 여기에 비밀 잠금 장치의 열쇠가있다"라고 말하면서 자신이 가장하는 메시지를 보내지 만 사적인 잠금 장치로 잠그면 위의 모든 단계를 수행하고 실제로 메시지가 있어야한다고 생각할 수 있습니다 당신이 생각한 사람으로부터,하지만 당신이 공개 키의 진정한 소유자에 대해 오해했기 때문에 당신은 바보입니다.

    는 너무 오래 서명자의 공개 키를 검색하기위한 신뢰 가치있는 소스 거기, 당신은 공개 키의 정당한 소유자가 누구인지 것이고, 자신의 서명을 검증 할 수있을 것입니다.

  • +0

    '키'를 '잠금 해제 된 잠금'으로 변경하면 혼란이 가중됩니다. – EJP

    +0

    @EJP 키를 '잠금 해제 된 잠금'으로 변경하지 않습니다. '잠금'으로 변경되었습니다. '잠금 ​​해제 됨'은 항목 사용을 표현할 목적으로 만 사용됩니다. 당신의 의견입니다. 암호화 커뮤니티에서 장기간의 경험이 있다면, 기존 용어는 기술을 이해하기 위해 성장한 방법이기 때문에 극단적으로 편향 될 수 있습니다. 처음 시작한 사람들이 유추가 유용할지 여부를 결정하게하는 이유는 무엇입니까? – shoe