이전 포스팅에서는 대칭키 + 비대칭키 조합을 이용하여 https 통신을 하는 방법과 각 키의 역할 그리고 대칭키 + 비대칭키 조합이 필요한 이유에 대해 알아보았다.
대칭키를 공유하는 과정에서 public key를 이용해 대칭키를 암호화하고, 이를 전달받은 서버에서는 private key를 통해 복호화하여 대칭키를 공유할 수 있다고 했다.
이는 대칭키가 외부에 노출되면 안되기 때문에 private key를 통해서만 데이터를 복호화할 수 있도록 한 것이었다.
반대로, 정보를 private key로 암호화하고 public key로 복호화해야 하는 상황도 있다.
불특정 다수의 사람들이 정보를 확인할 수는 있어야 하지만 정보를 조작할 수는 없게 해야 하는 상황이 그렇다.
우선 해당 과정을 보면 다음과 같다.
1. 외부에 전송할 데이터를 hash 한다.
2. hash 문자열을 private key를 통해 암호화하며, 이를 서명이라고 한다.
3. 원본 데이터와 서명을 외부로 전송한다.
4. 전송을 받은 서버에서는 전송자의 public key를 이용하여 서명을 복호화한다.
5. 서명을 복호화하여 얻은 hash값과 원본데이터의 hash가 일치하는지 비교한다.
6. hash 가 일치하지 않다면 위변조된 데이터임을 알 수 있다.
온라인 상에서 전자 계약을 진행할 때 활용하는 예시가 있을 수 있다.
계약자들 간 계약서를 작성하고 계약 이행을 위한 서명을 작성하는 것을 온라인상에서만 할 수 있기 때문에, 이를 비대칭키를 활용하여 해결할 수 있다.
1. 계약 내용 작성
2. 계약 내용 해시
3. 해시 문자열을 계약자의 private key로 암호화 (서명)
4. 계약서를 타인에게 송신
5. 수신자는 송신자의 public key를 통해 서명을 복호화
6. 복호화된 hash와 계약서 원본을 hash한 결과가 같은지 확인
7. hash값이 일치하지 않으면 계약서의 내용이 위변조되었음을 인지
이와 같이 계약을 진행했을 때 다음 세 가지가 보장받을 수 있다.
1. 무결성: 메시지가 전송 중에 변경되면 해시 값이 변경되므로, 디지털 서명의 검증이 실패하게 된다.
2. 인증: 송신자만이 자신의 비밀키로 서명을 생성할 수 있기 때문에, 디지털 서명은 메시지가 해당 송신자로부터 왔음을 인증한다.
3. 부인 방지: 디지털 서명이 생성되었다는 것은 송신자가 메시지를 서명했다는 증거가 되므로, 나중에 송신자가 메시지 전송을 부인하는 것을 방지한다.
디지털 서명이 활용되는 실제 예시는 아래와 같다.
1. 전자 메일 보안
이메일 송신자는 메시지에 디지털 서명을 첨부하여 수신자가 메시지의 변조를 확인하고, 송신자를 검증할 수 있게 한다. 이러한 방식으로 중간의 공격자가 이메일을 변조하거나 위조하는 것을 방지할 수 있다.
2. 소프트웨어 배포
개발자는 소프트웨어 업데이트나 패치에 디지털 서명을 추가할 수 있다. 사용자는 이 디지털 서명을 검증하여 안전한 소스에서 온 업데이트인지 확인할 수 있다. 이로써 악성 소프트웨어의 배포를 방지한다.
3. 온라인 결제 및 트랜잭션
금융 거래와 같은 온라인 트랜잭션에서 디지털 서명은 거래의 무결성과 참가자의 신원을 보장한다 . 결제 정보는 디지털 서명을 통해 보호받고, 부인을 방지하여 온라인 결제의 안전성을 향상시킨다.
4. 웹 사이트 보안 (SSL/TLS)
웹사이트와 사용자 간의 통신 보안을 위해 SSL/TLS 인증서에는 디지털 서명이 포함되어 있다. 사용자는 이를 통해 웹사이트의 신뢰성을 검증하고, 안전한 통신을 보장받는다.
5. 공공 서비스
정부나 다른 공공 기관에서 제공하는 온라인 서비스(예: 세금 신고, 온라인 투표)에서도 디지털 서명이 활용된다. 이를 통해 사용자의 신원을 확인하고, 제출된 정보의 무결성을 보장한다.
디지털 서명은 이러한 다양한 분야에서 데이터의 무결성 및 송신자의 신원을 보장하여, 안전한 전자적 거래와 통신을 가능하게 한다.