더북(TheBook)

우선 전자서명 기능을 바탕으로 한 공인인증서의 기술 원리부터 살펴봅시다. 전자서명은 어떤 메시지(M)에 특정한 사람의 서명 값(Signature Value)을 덧붙여 전송하는 방식입니다. 서명 값으로는 ‘서명하는 사람의 개인 키로 메시지(M)를 암호화한 값’을 사용합니다.2 12장에서 언급했듯이 공개 키 암호 시스템에서 특정한 사람의 개인 키로 암호화된 값은 그 사람의 공개 키로만 복호화할 수 있으므로 공개 키에 접근 가능한 모든 사람이 서명자가 누구인지 확인할 수 있습니다. 일반적인 전자서명에서 메시지(M)를 감추지 않고 메시지(M)에 전자서명 값을 덧붙이는 이유는 원본 메시지를 공개하는 것이 전자서명 본연의 의미에 적합하기 때문입니다. 물론 원본 메시지(M)에 전자서명 값을 덧붙이는 방식이 아니라 감추는 방식, 즉 복호화를 수행해야 메시지를 볼 수 있는 방식을 사용하기도 합니다.

서명 값을 만들 때는 ‘메시지 전체’가 아닌 ‘메시지를 해시한 값’을 입력 값으로 사용합니다. 보내려는 메시지는 1GB인데 메시지 전체에 전자서명을 한다면 전자서명 입력 값으로 1GB 데이터를 처리해야 할 것입니다. 비효율적이지요. 따라서 보통 서명 값으로는 ‘메시지를 해시한 값을 서명하는 사람의 개인 키로 다시 암호화한 값’을 사용합니다.3

메시지를 해시하면 결과 값은 일정한 크기로 출력됩니다. 해시 함수의 보안성이 약하다면 해킹이 발생할 수도 있습니다. 원본 메시지(M)와 해시 값이 같은 또 다른 메시지(M′)를 찾아 메시지의 내용을 변조하는 것이 가능하기 때문이지요(145쪽의 ‘알아 두면 좋은 짤막한 지식’ 참고). 그래서 ‘메시지를 해시한 값’에 넌스를 붙인 후 그 값을 다시 개인 키로 암호화한 값을 서명 값으로 사용하기도 합니다.4

 

 


2 전자서명은 Digital Signature = M || SignatureValue로 표현할 수 있습니다. 또 서명 값은 SignatureValue = Enc_privatekey(M)으로 표현할 수 있습니다. 여기서 Enc_privatekey는 개인 키로 암호화한다는 의미입니다.

3 여기서 서명 값을 수식화하면 SignatureValue = Enc_privatekey{Hash(M)}이 됩니다.

4 여기서 서명 값을 수식화하면 SignatureValue = Enc_privatekey{Hash(M || Nonce)}가 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.