디지털 서명

서명의 필요성

우리는 일상에서 중요한 서류(계약서 등)에 도장을 찍거나 서명한다. 이는 계약 내용이 유효함을 약속하는 행위이다. 그런데 만약 누군가 도장을 위조해서 나를 사칭한다면? 이는 명백한 사기 행위이다. 따라서 다음과 같은 보안 요구사항이 필요하다

  • 부인방지: 계약 후 “나는 그런 적 없다”고 부인하지 못하게 함
  • 위조/변조 방지: 문서 내용을 임의로 수정하지 못하게 함

인터넷 환경에서도 이러한 보안이 반드시 필요하기 때문에 디지털 서명이라는 개념이 등장했다.

비대칭 키 암호화가 하는 역할

디지털 인증서의 핵심은 그 안에 Public Key(공개 키)가 들어있다는 것이다. Public Key가 있다면 이와 쌍을 이루는 Private Key(개인 키)도 존재한다. 중요한 점은

  • Private Key는 오직 나만 가지고 있다
  • 이 Private Key로 디지털 서명을 수행한다

디지털 서명 프로세스

예를 들어 근로계약서가 있다고 가정하자

  • 홍길동은 오늘부터 활빈당에서 근무
  • 계약 기간: 종신계약
  • 급여: 명예직

악덕 계약이다. 그래도 이 내용이 나중에 변경되면 안 된다. 이 계약서(문서)를 보호하는 방법을 알아보자

1단계 – 해시(Hash) 계산

  • 원본 문서 전체에 대해 해시를 계산한다

2단계 – Private Key로 암호화

  • 계산된 해시값을 사용자의 Private Key로 암호화한다. 이것이 바로 디지털 서명의 핵심이다
  • 단순히 해시만 계산하면 안 되는 이유는 누군가 문서를 위조한 후 해시를 다시 계산하면 아무 의미가 없기 때문이다. Private Key로 암호화함으로써 오직 나만이 이 서명을 만들 수 있다는 것을 증명한다

3단계 – 문서 전달

  • 원본 문서
  • Private Key로 암호화된 해시 (디지털 서명)
  • Public Key (또는 인증서)

이 세 가지를 함께 전달한다

검증 프로세스

1단계 – 원본 문서의 해시 재계산

  • 받은 문서를 동일한 해시 알고리즘으로 계산한다

2단계 – 디지털 서명 복호화

  • Public Key를 사용해 암호화된 해시(디지털 서명)를 복호화한다

3단계 – 비교

  • 두 해시값이 일치하면 문서가 위조/변조되지 않았으며, Private Key 소유자가 서명한 것이 확실하다
  • 두 해시값이 불일치하면 문서가 변조되었거나 서명이 위조된 것이다

핵심 정리

디지털 서명 = Private Key로 해시를 암호화하는 것

  • Private Key 소유자만이 서명을 생성할 수 있음 (부인방지)
  • 문서 내용이 조금이라도 바뀌면 해시값이 달라져 검증 실패 (위변조 방지)
  • Public Key로 누구나 서명의 유효성을 검증할 수 있음 (검증 가능성)

인프런 강의 중 ‘널널한 개발자님의 외워서 끝내는 SSL과 최소한의 암호기술’ 강의 참고