디지털 서명

디지털 서명(, digital 署名)은 네트워크에서 송신자의 신원을 증명하는 방법으로, 송신자가 자신의 비밀키로 암호화한 메시지를 수신자가 송신자의 공용 키로 해독하는 과정이다.

개요 
디지털 서명은 보통 3개의 알고리즘으로 구성된다. 하나는 공개 키 쌍을 생성하는 키 생성 알고리즘이다. 두 번째는 이용자의 개인 키를 사용하여 서명(전자서명)을 생성하는 알고리즘, 그리고 그것과 이용자의 공개 키를 사용하여 서명을 검증하는 알고리즘이다. 서명 생성 프로세스에서 생성된 데이터도 ‘디지털 서명’이라고 지칭한다. 디지털 서명은 ‘메시지’의 인증기능을 제공한다. 메시지는 전자메일, 계약서, 혹은 더 복잡한 암호화 프로토콜로 송수신되는 데이터 등, 많은 것을 포함한다.

인증기관이 발행하는 공인인증서는 인증 기관의 사회적인 신뢰성을 담보로 이용자와 공개 값과 이용자의 관계를 보증하는 것이다. 그 때, 인증서가 인증 기관에서 발급된 것임을 증명하기 위해, 디지털 서명을 사용하고 있다. 디지털 서명은 종종 전자 서명(서명을 전하기 위한 모든 전자 데이터를 가리키는 상위어의 개념)을 구현하기 위해 사용되기도 한다. 그러나 모든 전자 서명이 디지털 서명을 이용하는 형태를 취하고 있지는 않다.

정의 
디지털 서명은 일반적으로 다음의 세 가지 알고리즘으로 구성된다.
 키 생성 알고리즘 G: 서명자의 키 쌍(PK, SK)을 생성한다. PK는 공개 검증 값, 그리고 SK는 비밀 서명 값이다.
 서명 생성 알고리즘 S: 메시지 m과 서명 값 SK를 입력하고, 서명 σ를 생성한다.
 서명 검증 알고리즘 V: 메시지 m, 검증 값 PK, 서명 σ을 입력하고, 승인 또는 거부를 출력한다.
주로 두 가지 특성이 필요하다. 먼저, 올바른 서명 키 값으로 생성된 서명은 해당 검증 키 값으로 항상 승인되는 것, 즉 서명 키 값 SK와 검증 키 값 PK가 해당 키 쌍이면 어떤 메시지 m에 대한 V {m, PK, S(m, SK)}는 승인이 출력되어야 한다. 두 번째로, 어떠한 공격자도 PK 값을 알고 있는 것만으로는 유효한 서명을 생성하기 곤란하여야 한다는 것이다.

역사 
논문 《New Directions in Cryptography》에서 휫필드 디피와 마르틴 헬만은 디지털 서명이라는 이론 체계가 존재할 것이라는 추측과 그 개념을 처음 사용하였다.

이후 로널드 리베스트, 아디 샤미어 및 레오나르도 에델맨은 기본적인 디지털 서명에 이용할 수 있는 RSA 알고리즘을 개발하였다(그러나 이것은 단지 실증으로서의 역할만 담당하므로, 기본적인 RSA 서명은 안전하지 않았다). 디지털 서명을 제공해 널리 사용된 소프트웨어 패키지는 RSA 알고리듬을 사용하여 1989년에 출시되었던 Lotus Notes 1.이다. 기본적인 RSA 서명은 다음과 같이 산출된다. RSA 서명 키 값을 생성하기 위해, 2개의 큰 소수의 곱인 계수 N과 φ가 오일러 φ함수일 때, ed=1modφ(N)을 충족하는 정수 e와 d를 사용해 RSA 키 쌍 값을 하나 간단하게 생성한다. 서명자의 공개 키 값은 N과 e로 이루어지고, 서명자의 개인 키 값은 d를 사용한다. 위에서 언급했다시피, 이러한 기본적인 구조는 안전하지 않다. 공격을 막기 위해서는, 우선 메시지 m에 암호 해시 함수를 적용하고 그 결과에 RSA 알고리듬을 적용하는 방법이 있다. 이 방식은 소위 랜덤 오라클 모델에서 안전을 증명할 수 있다.

그 외의 디지털 서명 체계로 RSA에 이어 람포트 서명(Lamport Signature), 머클 서명(Merkle Signature, 혹은 Hash tree), 그리고 라빈 서명(Rabin Signature)이 개발되었다.

이점

인증 
문서를 전송하는 주체에 대한 정보가 문서에 포함되는 경우가 많지만, 그 정보가 잘못될 가능성은 언제든지 존재한다. 디지털 서명은 문서의 원본 발신처를 인증하는 데에 사용할 수 있다. 디지털 서명에 사용되는 개인 키 값의 소유권을 특정 이용자에게 인증될 수 있을 때, 서명이 유효하다면 그 문서가 개인 키 값을 소유한 사람에게서 발신되었다는 것을 확인할 수 있게 된다. 발신자임을 높은 신뢰도로 확인하는 것은 금융에서 특히 중요하다. 가령, 은행 지점에서 본점에 있는 서버에 어떠한 계좌의 잔고를 변경하는 일을 한다고 가정하자. 변경 명령이 실제 은행 지점에서 일어났는지 높은 신뢰도로 확인되지 않으면, 이러한 변경 명령을 본점에서 받아들이는 것은 치명적인 오류를 낳을 수 있게 되는 것이다.

완전성 
문서를 발신한 사람과 수신한 사람은 문서가 전송 중에 위변조된 일이 없음을 확인할 필요가 있다. 암호화는 문서의 내용을 은폐하지만, 그것의 이해와 무관하게 암호화된 문서를 변경할 가능성이 상존한다. 그러나 만약 문서에 디지털 서명이 되어 있는 경우라면, 문서의 어떠한 변경이 발생하면 서명이 무효가 되어 버린다. 또한, 유효한 서명이 된 가짜 문서를 생성하기 위해서 어떤 문서와 서명을 조작할 만한 효과적인 방법은 없다. 왜냐하면, 많은 해시 함수와 계산적인 문제로 거의 불가능하기 때문이다.

같이 보기 
전자서명

각주

참고 자료 

공개 키 암호
전자 문서
서명