Computer Science/Cryptography

[Cryptography] 디지털 서명과 공인인증서

LeeJaeJun 2023. 12. 27. 00:34
728x90
반응형

- 디지털 서명

전자 문서나 데이터의 무결성, 인증, 부인 방지를 위해 사용되는 기술입니다. 디지털 서명은 비대칭키(공개키) 암호화 기술을 기반으로 동작하며, 발신자의 신원을 확인하고 데이터의 무결성을 보장하기 위해 사용됩니다. 작동원리는 간단하게 말하자면 Private key로 해시 결과를 암호화하는 것입니다. 그 후에 원본 문서의 해시를 계산하고 Public key로 풀어서 비교합니다.

  1. 개인 키 생성: 디지털 서명을 생성하기 위해 발신자는 자신의 개인 키와 공개 키를 생성합니다. 개인 키는 발신자만 알고 있어야 하며, 공개 키는 인증서에 포함되어 다른 사람들에게 공개됩니다.
  2. 서명 생성: 데이터에 대해 해시 함수를 적용하여 해시값을 생성한 후, 개인 키를 사용하여 해당 해시값을 암호화하여 디지털 서명을 생성합니다. 이 디지털 서명은 데이터의 무결성을 보장하고 발신자의 신원을 인증하는 역할을 수행합니다.
  3. 서명 검증: 수신자는 발신자의 공개 키를 사용하여 디지털 서명을 복호화합니다. 그리고 데이터에 대해 동일한 해시 함수를 적용하여 새로운 해시값을 생성한 후, 이를 복호화한 서명과 비교합니다. 만약 서명이 유효하다면, 데이터의 무결성이 보장되었으며 발신자의 신원이 확인됩니다.

디지털 서명은 인터넷에서의 전자 상거래, 전자 문서 전송, 온라인 계약 등 다양한 응용에서 사용되며, 데이터의 무결성과 인증을 보장하는 데 중요한 역할을 합니다.

 

- 대칭키 인터넷 환경 문제

대칭키를 인터넷으로 주고받는 것은 위험하다.

Key 또한 정보입니다. public한 인터넷을 통해 Symmetric key를 주고 받게 되면 보안이 엄청나게 취약할 것입니다. 그렇다고 USB 등을 이용해서 물리적으로 연결하고자 하는 서버, pc에 직접가서 key를 주기에는 현실적으로 불가능합니다. 따라서 비대칭키를 이용하거나 대칭키와 비대칭키를 사용하여 이러한 문제를 해결할 수 있습니다.

 

- 비대칭키를 사용하는 방식

PC와 Server 각각 비대칭 키를 생성

먼저 PC와 Server 모두 자신의 비대칭 키 쌍을 생성합니다.

Public key 교환

각자의 Public key를 전달합니다.

이로써 PC는 PC private key, PC public key, Server public key를 가지게 되고,

Server는 Server private key, Server public key, PC public key를 가지게 됩니다.

PC에서 Server로 정보를 전달할 때는 PC에서 정보를 Server public key로 암호화하여 Server로 보냅니다. 그러면 Server에서는 Server private key로 복호화해서 정보를 받을 수 있습니다.

반대로 Server에서 PC로 정보를 전달할 때는 Server에서 정보를 PC public key로 암호화하여 PC로 보냅니다. 그러면 PC에서는 PC private key로 복호화하여 정보를 받을 수 있습니다.

 

- 대칭키와 비대칭키 혼합 사용 방식

Server public key를 먼저 pc에 전달

비대칭키만 사용하는 방식과 다르게 한 쪽에서는 대칭키를 사용하는 방식입니다.

대칭키를 사용하여 더 효율적이라는 장점이 있습니다.

한 쪽에서는 대칭키를, 다른 한쪽에서는 비대칭키를 생성합니다. 여기에서는 Server 쪽에서 비대칭키를 생성했다고 가정하겠습니다.

Server public Key를 PC에 전달합니다. 그러면 PC는 PC Symmetric Key와 Server public key를 가지게 됩니다.

그 다음에 PC가 자신의 대칭키를 Server public key로 암호화하여 server측에 전달합니다.

server측은 이를 Server private key로 복호화하여 PC Symmetric key를 얻을 수 있게 됩니다.

그 이후에는 PC, Server 둘 다 PC Symmetric key를 이용하여 암호화, 복호화가 가능하게 됩니다.

 

- 인증서

위 상황에서 이제 알아보아야 할 것은 서버에서 보낸 Server Public key를 과연 신뢰할 수 있는가? 입니다. 서버에서 PC로 Key를 보내는 과정에 MITM(Man In The Middle, 중간자 공격)과 같은 공격으로 해커가 Key를 가로채고 Hacker가 자신의 public key를 마치 Server  public key 인 양 PC로 보낼 수도 있습니다.

이러한 것을 방지하기위해 인증서를 사용합니다.

키를 매 번 생성하는 것은 비효율적입니다. 그래서 보통 기간을 두고 바꾸는 형식입니다.(ex. 6개월에 1회) 서버 측에서 직접 키를 생성하는 것이 아니라 RA(Registration Authority)에게 키 쌍을 구매 요청을 합니다. RA는 CA에게 Key 쌍을 요청하고 CA는 새로운 private key와 public key를 생성합니다. CA 또한 자신의 public key와 private key가 있습니다. CA는 인증서에 새로 생성한 server public key를 담고, 인증서의 내용을 hash를 합니다. hash값을 CA 자신의 private key로 암호화 한 다음 이를 인증서에 넣습니다.

(즉 인증서에는 public key와 다른 내용들이 있는데, 그것들을 hash한 뒤 hash 값을 또 CA private key로 암호화 한다는 것. CA가 디지털 서명을 보증한다는 것이다.)

CA는 인증서와 private key를 RA에 보내고, RA는 이를 server에 전달을 합니다. Web server에서 사용하는 인증서이므로 이것을 SSL 인증서라고 합니다. server는 이를 받아 인증서를 설치합니다. pc에게 public key를 보내는 것이 아니라, 인증서를 보냅니다.

PC에서는 운영체제가 자동으로 기관인증서를 설치하는데 이는 CA의 public key를 포함하고 있습니다. 이것으로 인증서에 CA private key로 암호화 되어있는 Hash를 복호화하여 서버가 보낸 인증서가 유효한지 확인합니다.

728x90
반응형