디지털 서명

From CS Wiki

Digital Signature

문서에 하는 인감 날인이나 사인에 해당하는 기능을 컴퓨터의 세계에서 실현하기 위한 기술

기능[edit | edit source]

  • 사용자 인증
  • 송신 부인 방지
  • 수신 부인 방지

구성 요소[edit | edit source]

  • 원본 문서(메시지)
    • 디지털 서명을 통한 보호의 대상이 되는 문서(메시지)를 의미한다.
  • 서명(암호문)
    • 디지털 문서에 서명을 한 결과값을 의미한다.
    • 개인키로 암호화 한 암호문이다.
    • 문서와 함께 보내진다.
  • 송신자(서명자)
    • 서명을 하는 자를 말한다. 서명을 수행한다.
  • 수신자(검증자)
    • 서명된 문서를 수신하는 자를 말한다. 서명을 통해 문서의 진위를 확인한다.
  • 공개키 쌍
    • 공개키 암호화를 사용한다.
    • 개인키는 송신자만 알고 있고, 공개키를 검증자에게 제공한다.
    • 이 공개키의 소유자가 송신자라는 사실은 기존에 확립되어 있어야 한다.

두가지 방법[edit | edit source]

메시지에 직접 서명하는 방법

  • 원본 메시지가 얼마나 큰 값(문서, 파일 등)이든 원본 메시지를 직접 암호화 하는 방식으로 서명한다.
  • 더 직관적인 방법이지만 서명과 검증에 모두 더 큰 부하가 생긴다.

메시지의 해시 값에 서명하는 방법

  • 원본 메시지의 해시값을 암호화하는 방식으로 서명한다.
  • 원본 메시지의 해싱 이라는 추가적인 절차가 생긴다.
  • 하지만 훨씬 더 가볍고 빠르게 수행 가능함에도 서명 효과는 동일하다.

절차[edit | edit source]

기본적인 암호화 활용 구조

디지털 서명 암호화 과정.png


메시지에 직접 서명하는 방법

디지털 서명 메시지에 직접 서명하는 과정 예시.png


메시지의 해시 값에 서명하는 방법 디지털 서명 해시값에 서명하는 과정 예시.png

디지털 서명에 대한 의문과 답(FAQ)[edit | edit source]

  • 디지털 서명 검증을 위해 원본 메시지와 서명값이 같이 보내지고 있는데, 이렇게 하면 암호화를 했다고 해도 기밀성은 보장할 수 없게 되는 것이 아닌가?
    • 맞다. 다만, 디지털 서명은 기밀성을 지키기 위한 것은 아니다.
    • 만약 기밀성이 필요하다면 메시지를 그대로 보내는 것 이 아니고, 암호화를 별도로 행해서 보내야 된다.
  • 디지털 서명이라고 해도 단지 컴퓨터상의 데이터에 지나지 않으므로, 간단하게 복사본을 만들 수 있을 것 같은 느낌이 든다. 만약 같은 내용의 복사본을 간단히 만들 수 있다면 서명이라고 말할 수 없지 않을까?
    • 사실 서명이라고 해도 단지 컴퓨터상의 데이터에 지 나지 않는다.
    • 메시지의 마지막에 이름이 첨부되어 있는 경우도 있 고, 메시지와는 분리되어 서명이 별도의 파일로 되어 있는 경우도 있다.
    • 어느 경우라도 통상의 파일 복사처럼 같은 내용에 대 한 복사를 몇 개라도 간단히 만들 수 있다.
    • 서명은 그것이 원본이냐 사본이냐 하는 오리지널리티 의 진위가 중요한 것이 아니고, 특정 서명자와 특정 메 시지가 결부되어 있다는 사실이 중요한 것이다.
    • 아무리 많이 복사를 해도 「그 메시지에 누가 서명했 는가」하는 사실에는 조금도 변화가 없다. 복사는 할 수 있다. 그러나 그것에 의해 서명이 무의미해지는 것 은 아니다.
    • 이것은 서명된 계약서를 복사기로 복사하거나 스캔본을 만드는 것과 같다.
  • 디지털 서명이라고 해도 단지 데이터이므로 메시지와 서명 양쪽을 원하는 만큼 변경할 수 있을 것이다. 그렇다면 서명이라고는 말할 수 없는 것이 아닐까?
    • 확실히 서명한 후에 메시지와 서명의 내용을 수정할 수는 있다.
    • 그러나 수정해 버리면 서명의 검증에 실패하기 때문 에, 검증하는 사람은 수정이 되었다는 것을 검출할 수 있다.
    • 디지털 서명이 실현하고자 하는 것은 변경하지 못하도록 막는 방지가 아니라 문서에 변경 행위가 있었는지 아닌지를 검출하는 것이다.
  • 서명 대상의 메시지와 서명 양쪽을 수정해서 서명의 검증에 성공할 수 있도록 앞뒤를 잘 맞출 수 있지는 않을까?
    • 아니다. 이는 암호학의 원리와 암호 알고리즘의 안전성에 기반한다.
    • 서명 대상의 메시지가 1비트만 바뀌어도 서명값은 완전히 변한다.
    • 안전성이 검증된 암호화 알고리즘이라면 암호 키를 모르고 있는 상태에서 원하는 원본 메시지의 암호화 결과는 알 수 없다.
    • 다만 취약성이 밝혀진 암호화 알고리즘을 사용한 경우엔 이것이 가능해질 수도 있다. 디지털 서명은 아직까지 안전성이 보장된 암호화 알고리즘을 사용한 서명이었다는 전제 하에서 그 서명의 진위성이 보장된다.
  • 구체적인 누군가의 디지털 서명을 손에 넣었다면 그 서명 부분만 잘라내서 다른 메시지에 첨부할 수 있다 고 생각한다. 그렇다면 서명이 되는 것이 아닐까?
    • 서명 부분을 잘라낸다는 행위는 현실 세계의 종이로 된 계약서에서 서명을 베끼는 행위와 같은 공격으로, 실현 가능성이 있다.
    • 그러나 디지털 서명의 경우에는 메시지와 서명 사이에는 수 학적인 이론에 기초한 대응 관계가 있다. „ 메시지가 다르면 서명도 다르기 때문에 서명만 잘라내 서 재이용하는 것은 사실상 불가능하다.
  • 메시지 인증 코드로는 부인 방지를 할 수 없는데, 디지털 서명으로는 부인 방지를 할 수 있는 것은 왜인가?  
    • 부인 방지는 「키를 가지고 있는 것은 누구인가?」라 는 물음과 깊은 관계가 있다.
    • 메시지 인증 코드의 경우 MAC 값을 계산할 수 있는 키(공유 키)는 송신자와 수신자 양 쪽이 가지고 있었다. 그러므로 송신자와 수신자의 어느 쪽이 라도 MAC 값을 계산할 수 있었다. 「그 MAC 값을 계산한 것은 내가 아니라 수신자 쪽이다」라 고 주장하는 것이 가능했다.
    • 디지털 서명의 경우 ‡ 서명을 작성할 수 있는 키(개인 키)는 송신자만 가지고 있다. 서명을 작성할 수 있는 것은 송신자뿐 송신자는 「그 서명을 작성한 것은 내가 아니다」라고 주장 할 수가 없다.

관련 기출 문제[edit | edit source]