검수요청.png검수요청.png

"전자서명"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (같이 보기)
 
(사용자 3명의 중간 판 35개는 보이지 않습니다)
1번째 줄: 1번째 줄:
''' 전자서명 ''' 이란 전자서명법에 나와 있는 정의로는 서명자를 확인하고 서명자가 당해 전자문서에 서명하였음을 나타내는데 이용하기 위하여 당해 전자문서에 첨부되거나 논리적으로 결합된 전자적 형태의 정보를 말한다. 전자서명은 대부분 공개키 암호 알고리즘을 이용하여 구현하며, 무결성을 확인하고 인증과 부인 방지 기능을 제공하는 암호 기술이다ㅓ. 전자서명에 필요한 기술로는 [[서명 알고리즘 (Signing Algorithm)]] 과 [[검증 알고리즘 (Verifying Algorithm)]] 이 사용 된다.
+
''' 전자서명 '''이란 서명자를 확인하고 서명자가 당해 전자문서에 서명하였음을 나타내는 데 이용하기 위하여 당해 전자문서에 첨부되거나 논리적으로 결합된 전자적 형태의 정보를 말한다. 전자서명은 대부분 [[공개키]] [[암호 알고리즘]]을 이용하여 구현하며, [[무결성]]을 확인하고 인증과 부인 방지 기능을 제공하는 암호 기술이다.
  
예를 들어 A(자신) B(믿을 있는 기관)  
+
== 개요 ==
A가 자신의 비밀키를 사용하여 우언본 데이터의 해시값을 암호화 한다. 그 후에 믿을 있는 기관 B에 A의 공개키를 배포한다. 그러면 B는 자신의 비밀키로 A의 공개키를 서명하고, A의 주체 정보와 B의 공개키 등을 담아 인증서를 만들어 배포한다. 그리고 A는 이 인증서와 함께 원본 데이터와 원본 데이터의 해시값을 서명한 데이터를 합쳐 배포한다.
+
전자서명이란 사이버 공간에서의 인감이다. 사이버 공간에서는 수많은 위협이 존재하고 있으며, 또한 정보들도 쉽게 위변조 할 수 있다. 그렇기 때문에 프로그램의 제작자를 확인하고, 거래를 한 사람이 나 자신이 맞다는 것을 증명하기 위하여 나오게 된 것이 전자서명이다. 오프라인에의 인감증명서는 종이로 된 계약문서와 자신이 정부에 등록한 인감으로 날인을 한 것을 말한다. 정부에 등록된 인감은 자신이 직접 등록한 것이기 때문에, 이 인감도장이 찍혀있는 것은 법적 효력을 가지며, 본인이 거래한 것으로 간주된다. 만약, 인감도장을 다른 사람이 훔쳐 가서 사용한다면, 법적 책임은 모두 인감의 소유자인 자신이 지게 된다. 그렇기 때문에 인감은 중요하게 보관해야 한다.
 +
 
 +
온라인에서는 인감이라는 개념 대신에 전자서명이라는 개념이 존재한다. 이미 발급된 전자문서의 [[해시값]]을 추출하여 자신의 [[개인 키]]로 암호화한다. 그 후 전자문서와 함께 [[암호화]]한 해시값을 함께 상대방에게 보낸다. 문서를 받은 상대방은 문서를 보낸 사람의 공개키로 해시값을 [[복호화]]한 후 자신이 전달받은 문서의 해시값과 비교하여 일치하면 문서가 위변조되지 않았으며, 자신이 올바른 사람에게서 정보를 전달받았음을 확인할 수 있다. 여기에서 전자문서의 해시값을 개인 키로 암호화한 것이 바로 오프라인에서의 인감 날인 역할을 하는 것이다. 따라서 인감과 전자서명은 이렇게 정리할 수 있다.<ref name="필넷">Feelnet, 〈[https://unius.tistory.com/entry/%EC%A0%84%EC%9E%90%EC%84%9C%EB%AA%85-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0?category=150194#footnote_link_570_1 전자서명 쉽게 이해하기]〉, 《티스토리》, 2010-03-10</ref>
 +
 
 +
* 인감 : 종이문서 + 인감도장 날인
 +
* 서명된 전자문서 : 전자문서 + 전자서명(전자문서 해시 + 개인키의 암호화)
 +
 
 +
==특징==
 +
기존의 암호화 방법은 메시지를 주고받는 사람들이 서로에게만 메시지를 알 수 있게 하고, 다른 외부 사람들에게는 메시지를 못 알게 하는 방법이었다. 하지만 이러한 방법은 누군가가 메시지를 조작할 수 있어 이러한 상황을 막기 위하여 전자 서명이란 것이 나오게 된 것이다. 전자서명을 통해 인증과 무결성, 부인봉쇄라는 중요한 보안서비스를 제공한다. 즉, 전자서명 행위를 통해 개인이 송신하고자 하는 메시지의 근원이 내 자신이라는 것과 수신 측에서는 내가 보낸 메시지가 중간에 위변조 되지 않았음을 검증할 수 있다. 또한 신뢰받는 제3자를 이용하면 나중에 상대방이 전자서명이 행위 자체를 부인하는 것을 방지할 수가 있게 된다.<ref name="필넷"></ref> 전자서명의 특징 및 조건은 다음과 같다.
 +
 
 +
* 위조 불가 (Unforgettable) : 합법적인 서명자만이 전자 문서에 대한 전자서명을 생성할 있어야 한다.
 +
* 서명자 인증 (User Authentication) : 전자서명의 서명자를 누구든지 검증할 수 있어야 한다.
 +
* 부인 불가 (Non repudiation) : 서명자는 서명 후에 자신의 서명 사실을 부인할 수 없어야 한다.
 +
* 변경 불가 (Unalterable) : 서명한 문서의 내용은 변경될 수 없어야 한다.
 +
* 재사용 불가 (Not Reusable) : 전자문서의 서명은 다른 전자문서의 서명으로 사용될 없어야 한다.<ref name="루카스">루카스, 〈[https://m.blog.naver.com/PostView.nhn?blogId=rockcrash&logNo=220476800288&proxyReferer=https%3A%2F%2Fwww.google.com%2F 전자서명(Digital Signature)]〉, 《네이버 블로그》, 2015-09-09</ref>
  
기관 B를 믿을 수 있는 사용자 C는 코드사인된 데이터를 받아 인증서 안에 들어있는 B의 공개키를 이용하여 A의 공개키를 얻어내고, 이 A의 공개키로 서명된 데이터를 복호화하여 얻은 해시값과 원본 데이터를 해싱하여 얻은 해시값을 비교하여 일치한다면 원본 데이터가 손상되지 않았다는 것을 알 수 있는 방식을 의미하는 것이다.
+
== 작동 ==
 +
당해 전자문서에 첨부되거나 논리적으로 결합한 전자적 형태의 정보를 만들기 위해서 기술적으로는 [[서명 알고리즘]]이 이용되고, 서명자를 확인하고 서명자가 당해 전자문서에 서명하였음을 확인하기 위해서 검증 알고리즘이 적용된다. 그리고 서명과 검증 알고리즘에 이용되는 기술이 [[비대칭키]] 암호 시스템이다. 비대칭 키 암호 시스템은 개인 키와 공개키로 구성된다. 개인 키는 자신만이 소유하고, 공개키는 타인에게 공개된다. 개인 키로 암호화된 문서는 공개키만을 이용해서 복호화 가능하다.
  
== 개요 ==
+
사용자는 서명 알고리즘을 이용해서 자신의 개인 키로 문서에 서명을 하게 되며, 상대방에 보낸 서명된 문서는 검증 알고리즘을 이용해서 상대방의 공개키로 검증을 수행하게 된다. 즉, 송신자만이 고유한 개인 키로 생성한 전자서명 정보와 원본 문서를 송신하면, 수신 측에서는 송신자의 공개키를 이용하여 전자서명 정보를 복호화하고 이를 원본 문서와 비교해서 인증과 무결성을 확인하게 된다.
기존의 암호화 방법은 메시지를 주고 받는 사람들이 서로에게만 메시지를 알 수 있게 하고, 다른 외부 사람들에게는 메시지를 못 알게 하는 방법이었다. 하지만 이러한 방법은 누군가가 메시지를 조작할 수 있어 이러한 상황을 막기 위하여 전자 서명이란 것이 나오게 된 것이다.  
 
  
== 사용되는 기술 ==
+
한 가지 확인해볼 만한 사실은 전자서명 자체가 기밀성을 제공하지는 않는다는 것이다. 다시 말하면 전자서명이란 송신자가 보내는 원본 문서에 첨부된 전자서명의 생성과 검증에 관련된 이야기이며 원본 문서 자체의 암호화는 또 다른 문제이다. 암호화 시스템에서 다양한 기술들이 존재하지만 개인 키와 공개키를 이용한 암호화도 가능하다. 즉, 송신자가 수신자의 공개키로 암호화해서 송신하면 메시지는 개인 키를 소유한 수신자만이 해독할 수 있게 되므로 따라서 기밀성을 제공할 수가 있다.
''' [[서명 알고리즘 (Signing Algorithm)]] '''
 
  
''' [[검증 알고리즘 (Verifying Algorithm)]] '''
+
이를 정리해보자면, 비대칭 키 암호 시스템에서 전자서명의 과정은 서명자의 개인 키로 서명을 하고 검증자는 서명자의 공개키로 서명을 검증하게 된다. 그리고 암호화는 수신자의 공개키로 암호화하며 수신자는 자신의 개인 키로 해독을 하게 된다. 전자서명은 부인봉쇄를 제공하는데, 이를 위해서는 공인인증체계의 도움이 필요하다. 즉, 송신자와 수신자 사이에 신뢰받는 제3자가 개입하여 쌍방 사이의 거래를 증명해주는 것이다.<ref name="필넷"></ref>
  
''' [[비대칭 키 암호 시스템]] '''
+
==접근 방법==
* 비대칭 키 암호 시스템은 개인키와 공개키로 구성된다.
+
기존의 암호화 방법은, 메시지를 주고받는 사람들이 서로에게만 메시지를 알 수 있게 하고, 다른 외부 사람들에게는 메시지를 알지 못하게 하는 방법이었다. 물론, 여기에서 암호화나 복호화를 하는 데 사용하는 키는 똑같다. 그러나 만약 메시지를 주고받는 사람 간에 문제가 생길 수도 있다. 예를 들어서 A가 B에게 메시지를 보냈다고 하자. A와 B는 키를 공유하고 있다. 그런데 만약 B가 어떤 메시지를 만든 다음 그것을 암호화하여 메시지 뒤에 붙이고, 이 메시지가 A에서 온 것이라고 주장한다. 또, A가 B에게 메시지를 보냈는데 A가 '나는 메시지를 보내지 않았다'라고 주장한다. B게 메시지를 조작할 수 있음으로, 이 주장도 확실하게 구분할 수 없다. 이런 상황을 막기 위해 전자서명이란 것이 나오게 되었다. 전자서명은, 손으로 쓰는 서명과 비슷하다. 전자서명은 다음과 같은 성질을 가지고 있어야 한다.<ref name="가디언">내 맘대로 보는 세상, 〈[https://mytears.org/resources/doc/Encode/sign.html 암호학 6주 - 전자서명]〉, 《개인 블로그》</ref>
* 개인키는 자신만이 소유하고, 공개키는 타인에게 공개된다.
 
* 개인키 (공개키)로 암호화된 문서는 공개키 (개인키)만을 이용해서 복호화가 가능하다.
 
  
== 조건 ==
+
* 전자서명은 서명을 한 사람과 날짜 등을 증명할 수 있어야 한다.
 +
* 전자서명을 할 당시에 메시지의 내용을 증명할 수 있어야 한다.
 +
* 전자서명은 외부 기관에 의해 검사받을 수 있어야 한다.<ref name="가디언"></ref>
  
* 위조 불가 (Unforgeable) : 합법적인 서명자만이 전자 문서에 대한 전자 서명을 생성할 수 있어야 한다.
+
이와 같은 성질을 가진 전자서명을 구현하기 위해 많은 접근 방법이 동원되었다. 그 방법은 크게 두 가지로 나눌 있다.
* 서명자 인증 (User Authentication) : 전자 서명의 서명자를 누구든지 검증할 수 있어야 한다.
 
* 부인 불가 (Nonrepudiation) : 서명자는 서명 후에 자신의 서명 사실을 부인할 수 없어야 한다.
 
* 변경 불가 (Unalteable) : 서명한 문서의 내용은 변경될 수 없어야 한다.
 
* 재사용 불가 (Not Reusable) : 전자문서의 서명은 다른 전자문서의 서명으로 사용될 없어야 한다.  
 
  
== 특징 ==
+
===직접적인 방법===
 +
직접적인 방법에서는 보내는 사람과 받는 사람 둘 간에 전자서명이 오고 간다. [[RSA]] 알고리즘에서는 만약 받는 사람(B)이 보내는 사람(A)의 공개키를 알고 있다면, A의 전자서명은 보낼 메시지를 A의 비밀키로 암호화한 것이 된다. 이 방법의 문제점은 보내는 사람의 비밀키의 안전성에 있다. 만약 어떤 시간 T에 A가 어떤 메시지를 보냈다고 하자. 그런데 3일 후에 A의 비밀키가 [[해커]]에게 유출된다면, 해커는 A의 비밀키를 사용해서 시간을 T로 하는 메시지를 만들 수 있다. 이 메시지를 받은 B는 A가 T 시간에 메시지를 보낸 것으로 착각할 것이다.<ref name="가디언"></ref>
  
* 전자 서명은 서명을 한 사람과 날짜 등을 증명할 있어야 한다.
+
===중재를 통한 방법===
* 전자 서명을 할 당시에 메시지의 내용을 증명할 있어야 한다.
+
직접적인 방법은 A와 B 사이에 신뢰할 수 있는 중재자를 둠으로써 해결할 있다. A는 B에게 메시지를 바로 보내지 않고 먼저 중재자에게 메시지를 보낸다. 그다음, 중재자는 B에게 메시지를 보낸다. 이 방법은 해커가 A의 비밀키를 알았다고 해도 시간을 조작할 수가 없다. 왜냐하면 시간은 중재자가 관리하기 때문이다.<ref name="가디언"></ref> 이때 중재자를 발급자라고 부르는데, 이 발급자는 자신보다 상위의 발급자에게 신뢰를 받고 있고 상위의 발급자로 계속해서 올라가다 보면 ROOT 발급자라고 하는 존재가 나타난다. 그 예로는 흔히 볼 있는 미국의 [[베리사인]](VeriSign)이나 [[한국인터넷진흥원]](KISA) 등이 있다. 이들은 [[마이크로소프트]]의 검증을 받고 시스템에 [[하드코딩]]으로 설치되어 있어서 무조건 믿을 있다는 전제를 가지고 있다. 즉 해커가 이 ROOT 발급자를 사칭하려면 전 세계에 있는 마이크로소프트 시스템을 해킹해야 한다는 뜻이다. 그만큼 어렵고, 해커의 원래 목적에도 반한다.<ref>빠에야좋아, 〈[https://chickenpaella.tistory.com/40 전자 서명이란?]〉, 《티스토리》, 2018-02-23</ref>
* 전자 서명은 외부 기관에 의해 검사받을 있어야 한다.
 
  
== 접근 방법 ==
+
==인증 프로토콜==
 +
===상호간의 인증===
 +
상호 간의 인증에서는 통신하는 상대방이 서로를 신뢰할 수 있고, [[키]]를 교환할 수 있어야 한다. 키를 교환하는 데 있어서 가장 중요한 것은 [[보안성]]과 시간문제이다. 먼저 보안성은 공격자가 마치 상대방인 것처럼 위장하고 올 경우를 대비해서 모든 키 정보는 암호화된 형태로 전달되어야 한다는 것이다. 시간 문제는 리플레이공격(replay attack) 때문에 매우 중요하다. 리플레이공격이란 A가 B에게 보내는 메시지가 있을 때 그것을 중간에서 해커가 가로채서 누군가에게 다시 보내는 공격 방법이다. 리플레이공격에는 다음과 같은 방법이 있다.
  
* ''' 접근 방법 ''' : 직접적인 방법에서는 보내고, 받는 사람 둘 간에 전자 서명이 필요하다. [[RSA]]알고리즘 에서는 만약 받는 사람이 보내는 사람의 공개 키를 알고 있다면, 보내는 사람의 전자서명은 보낼 메시지를 보내는 사람의 비밀 키로 암호화 된 것이 된다.
+
* 공격자가 메시지를 저장해 두었다가 나중에 다시 보낸다.
 +
* 공격자가 메시지를 일정 시간 안에 다시 보낸다.
 +
* 원래의 메시지가 어떤 이유에 의해 보내지지 않았을 때, 공격자가 B에게 메시지를 보낸다. 이 경우, 공격자의 메시지만 B에 도착하게 된다.
 +
* A가 보낸 메시지를 A에게 다시 보낸다.
  
* ''' 문제점 ''' : 이 방법의 문제점은 보내는 사람 비밀키의 안전성에 있다. 예를 들어 A가 B에게 어떠한 시간 T 에 메시지를 보내는데, 몇일 후에 해커가 A의 비밀키를 알아내고, 해커가 A의 비밀키를 이용하여 시간을 T로 하는 메시지를 만들 수 있다. 그렇게 된다면 B는 A가 T시간에 메시지를 보낸 것으로 착각을 하게 될 것이다.  
+
리플레이공격을 막는 한 가지 방법은, 메시지에 순서 번호를 붙이는 것이다. 그래서 새로운 메시지가 도착했을 때 그 순서가 맞는 경우에만 그 메시지가 옳은 것으로 보는 것이다. 이 방법의 단점은 보내는 사람과 받는 사람 모두 마지막 순서 번호를 저장해 두어야 한다는 것이다.<ref name="가디언"></ref>
  
* ''' 해결책 ''' : 이러한 부분의 해결책으로는 A와 B 사이에 신뢰할 있는 C라는 중재자를 두는 방법으로 해결 할 수 있다. 그 방법은 A가 B에게 바로 메시지를 보내는 것 아니라, A가 먼저 C에게 메시지를 보내고 C가 B에게 메시지를 보내는 방법이다. 이렇게 C라는 중재자를 거친다면 해커가 A의 비밀키를 알아도 시간을 조작할 없게 되는 것이다. 왜냐하면 시간은 C라는 중재자가 관리하기 때문이다.
+
===단방향 인증===
 +
단방향 인증이란 말 그대로 메시지를 받은 사람이 보낸 사람의 정당성을 믿을 있게 하는 것을 의미한다. RSA 알고리즘에서 이런 예제를 볼 수 있다. 먼저 보낼 메시지는 해시 함수의 입력으로 들어간다. 그 결과, 일정 길이의 [[해시]] 코드가 나오게 된다. 이 해시 코드를 발송자의 비밀키로 암호화한 것이 전자서명이 된다. 원래 메시지와 전자서명은 합쳐져서 받는 사람에게 보내지게 된다. 받는 사람은 그 메시지를 받고, 원래 메시지의 해시 코드를 구한다. 그다음, 같이 온 전자서명을 발송자의 공개키를 사용하여 복호화 한다. 계산한 두 개의 해시 값이 같다면 메시지는 안전하다고 생각하게 되는 것이다. 공격자는 A의 비밀키를 알지 못하는 한, A의 공개키로 복호화가 되는 메시지를 만들 없다.<ref name="가디언"></ref>
  
 
== 전자서명 알고리즘의 종류 ==
 
== 전자서명 알고리즘의 종류 ==
 +
전자서명과 관련한 대표적인 표준으로 1994년 미국에서 만들어진 [[DSS]](Digital Signature Standard)가 있다. DSS는 [[DSA]](Digital Signature Algorithm)를 사용하는데, DSA는 [[슈노어]](Schnorr)와 [[엘가말]](ElGamal)의 알고리즘을 기반으로 하며 서명 생성이나 암호키 생성에서는 [[SHA-1]]을 이용한다. 우리나라의 경우 1996년에 개발된 [[KCDSA]](Korean Certifice-based Digital Signature Algorithm)가 있다. 현재 우리나라의 전자서명법에 따르면, 전자서명은 [[인터넷]]을 통해 전자문서를 교환할 때 일반 문서에서 쓰이는 인감도장과 법적으로 똑같은 효력을 지닌다.<ref>양대일, 〈[https://terms.naver.com/entry.nhn?docId=3432015&cid=58437&categoryId=58437 전자서명]〉, 《네이버 지식백과》, 2013-06-28</ref>
 +
 +
* [[RSA]] 전자서명 : [[론 리베스트]](Ron Rivest), [[아디 셰미르]](Adi Shamir), [[레오나르드 아델만]](Leonard Adleman)에 의해서 1978년 제안된 공개 키 암호 방식을 응용한 전자서명의 방식을 응용한 전자서명 방식이다. 큰 합성수를 소인수분해하는 문제의 어려움에 근거해 안전도를 결정하는 방식이다.
 +
* [[엘가말]] 전자서명 : 이산대수 문제를 기반으로 전자서명만을 위해 고안된 방식이다.
 +
* [[슈노어]] 전자서명 : 엘가말 전자서명의 변형으로 이산대수 문제에 안정성을 두고 있다.
 +
* [[DSS]] 전자서명 : 1991년 [[미국표준기술연구소]](NIST)에서 발표한 전자서명 방식으로 엘가말 전자서명을 개량한 방식이다. 엘가말 전자서명 방식과 유사하지만 서명과 검증에 소요되는 계산량을 획기적으로 줄인 방식으로 미국의 전자서명 표준이다. 해시 함수 SHA-1을 사용하여 해시 코드와 난수가 서명함수의 입력으로 제공된다.
 +
* [[KCDSA]] 전자서명 : 국내 표준 전자서명 방식으로 이산대수 문제를 기반으로 한다. KCDSA의 계산 효율을 높이고자 타원곡선 암호 시스템을 기반으로 변형한 전자서명이 ECKCDSA이다.
 +
* [[타원곡선]] 전자서명 : 타원곡선 (Elliptic curve)상에서 군을 정의하고 이에 대한 이산대수 계산의 어려움에 근거 두고 있다.<ref name="루카스"></ref>
  
* [[RSA]] 전자서명 : Rivest, Shamir, Adleman에 의해서 1978년 제안된 공개 키 암호 방식을 응용한 전자서명의 방식
+
{{각주}}
* [[ElGamal]] 전자서명 : 이산대수 문제를 기반으로 전자서명만을 위해 고안된 방식
 
* [[Schorr]] 전자서명 : ElGamal 전자서명의 변형으로 이산대수 문제에 안정성을 두고있는 방식
 
* [[DSS (DSA)]] 전자서명 : 1991년 미국의 NIST (National Institute of Standards and Technology) 에서 발표한 전자서명 방식으로 ElGamal 전자서명을 개량한 방식
 
* [[KCDSA]] 전자서명 : 국내 표준 전자서명 방식으로 이산대수 문제를 기반
 
* [[ECDSA (Elliptic Curve DSA)]] 전자서명 : 타원곡선 (Elliptic curve)상에서 군을 정의하고 이에 대한 이산대수 계산의 어려움에 근거 두고 있음
 
  
 
== 참고자료 ==
 
== 참고자료 ==
57번째 줄: 75번째 줄:
  
 
== 같이 보기 ==
 
== 같이 보기 ==
* [[서명 알고리즘 (Signing Algorithm)]]
 
* [[검증 알고리즘 (Verifying Algorithm)]]
 
 
* [[RSA]]
 
* [[RSA]]
* [[비대칭 키 암호 시스템]]
+
* [[엘가말]]
 +
 
 +
{{암호 알고리즘|검토 필요}}
 +
{{금융}}
 +
{{계약}}

2022년 4월 2일 (토) 19:08 기준 최신판

전자서명 이란 서명자를 확인하고 서명자가 당해 전자문서에 서명하였음을 나타내는 데 이용하기 위하여 당해 전자문서에 첨부되거나 논리적으로 결합된 전자적 형태의 정보를 말한다. 전자서명은 대부분 공개키 암호 알고리즘을 이용하여 구현하며, 무결성을 확인하고 인증과 부인 방지 기능을 제공하는 암호 기술이다.

개요[편집]

전자서명이란 사이버 공간에서의 인감이다. 사이버 공간에서는 수많은 위협이 존재하고 있으며, 또한 정보들도 쉽게 위변조 할 수 있다. 그렇기 때문에 프로그램의 제작자를 확인하고, 거래를 한 사람이 나 자신이 맞다는 것을 증명하기 위하여 나오게 된 것이 전자서명이다. 오프라인에의 인감증명서는 종이로 된 계약문서와 자신이 정부에 등록한 인감으로 날인을 한 것을 말한다. 정부에 등록된 인감은 자신이 직접 등록한 것이기 때문에, 이 인감도장이 찍혀있는 것은 법적 효력을 가지며, 본인이 거래한 것으로 간주된다. 만약, 인감도장을 다른 사람이 훔쳐 가서 사용한다면, 법적 책임은 모두 인감의 소유자인 자신이 지게 된다. 그렇기 때문에 인감은 중요하게 보관해야 한다.

온라인에서는 인감이라는 개념 대신에 전자서명이라는 개념이 존재한다. 이미 발급된 전자문서의 해시값을 추출하여 자신의 개인 키로 암호화한다. 그 후 전자문서와 함께 암호화한 해시값을 함께 상대방에게 보낸다. 문서를 받은 상대방은 문서를 보낸 사람의 공개키로 해시값을 복호화한 후 자신이 전달받은 문서의 해시값과 비교하여 일치하면 문서가 위변조되지 않았으며, 자신이 올바른 사람에게서 정보를 전달받았음을 확인할 수 있다. 여기에서 전자문서의 해시값을 개인 키로 암호화한 것이 바로 오프라인에서의 인감 날인 역할을 하는 것이다. 따라서 인감과 전자서명은 이렇게 정리할 수 있다.[1]

* 인감 : 종이문서 + 인감도장 날인
* 서명된 전자문서 : 전자문서 + 전자서명(전자문서 해시 + 개인키의 암호화)

특징[편집]

기존의 암호화 방법은 메시지를 주고받는 사람들이 서로에게만 메시지를 알 수 있게 하고, 다른 외부 사람들에게는 메시지를 못 알게 하는 방법이었다. 하지만 이러한 방법은 누군가가 메시지를 조작할 수 있어 이러한 상황을 막기 위하여 전자 서명이란 것이 나오게 된 것이다. 전자서명을 통해 인증과 무결성, 부인봉쇄라는 중요한 보안서비스를 제공한다. 즉, 전자서명 행위를 통해 개인이 송신하고자 하는 메시지의 근원이 내 자신이라는 것과 수신 측에서는 내가 보낸 메시지가 중간에 위변조 되지 않았음을 검증할 수 있다. 또한 신뢰받는 제3자를 이용하면 나중에 상대방이 전자서명이 행위 자체를 부인하는 것을 방지할 수가 있게 된다.[1] 전자서명의 특징 및 조건은 다음과 같다.

  • 위조 불가 (Unforgettable) : 합법적인 서명자만이 전자 문서에 대한 전자서명을 생성할 수 있어야 한다.
  • 서명자 인증 (User Authentication) : 전자서명의 서명자를 누구든지 검증할 수 있어야 한다.
  • 부인 불가 (Non repudiation) : 서명자는 서명 후에 자신의 서명 사실을 부인할 수 없어야 한다.
  • 변경 불가 (Unalterable) : 서명한 문서의 내용은 변경될 수 없어야 한다.
  • 재사용 불가 (Not Reusable) : 전자문서의 서명은 다른 전자문서의 서명으로 사용될 수 없어야 한다.[2]

작동[편집]

당해 전자문서에 첨부되거나 논리적으로 결합한 전자적 형태의 정보를 만들기 위해서 기술적으로는 서명 알고리즘이 이용되고, 서명자를 확인하고 서명자가 당해 전자문서에 서명하였음을 확인하기 위해서 검증 알고리즘이 적용된다. 그리고 서명과 검증 알고리즘에 이용되는 기술이 비대칭키 암호 시스템이다. 비대칭 키 암호 시스템은 개인 키와 공개키로 구성된다. 개인 키는 자신만이 소유하고, 공개키는 타인에게 공개된다. 개인 키로 암호화된 문서는 공개키만을 이용해서 복호화 가능하다.

사용자는 서명 알고리즘을 이용해서 자신의 개인 키로 문서에 서명을 하게 되며, 상대방에 보낸 서명된 문서는 검증 알고리즘을 이용해서 상대방의 공개키로 검증을 수행하게 된다. 즉, 송신자만이 고유한 개인 키로 생성한 전자서명 정보와 원본 문서를 송신하면, 수신 측에서는 송신자의 공개키를 이용하여 전자서명 정보를 복호화하고 이를 원본 문서와 비교해서 인증과 무결성을 확인하게 된다.

한 가지 확인해볼 만한 사실은 전자서명 자체가 기밀성을 제공하지는 않는다는 것이다. 다시 말하면 전자서명이란 송신자가 보내는 원본 문서에 첨부된 전자서명의 생성과 검증에 관련된 이야기이며 원본 문서 자체의 암호화는 또 다른 문제이다. 암호화 시스템에서 다양한 기술들이 존재하지만 개인 키와 공개키를 이용한 암호화도 가능하다. 즉, 송신자가 수신자의 공개키로 암호화해서 송신하면 메시지는 개인 키를 소유한 수신자만이 해독할 수 있게 되므로 따라서 기밀성을 제공할 수가 있다.

이를 정리해보자면, 비대칭 키 암호 시스템에서 전자서명의 과정은 서명자의 개인 키로 서명을 하고 검증자는 서명자의 공개키로 서명을 검증하게 된다. 그리고 암호화는 수신자의 공개키로 암호화하며 수신자는 자신의 개인 키로 해독을 하게 된다. 전자서명은 부인봉쇄를 제공하는데, 이를 위해서는 공인인증체계의 도움이 필요하다. 즉, 송신자와 수신자 사이에 신뢰받는 제3자가 개입하여 쌍방 사이의 거래를 증명해주는 것이다.[1]

접근 방법[편집]

기존의 암호화 방법은, 메시지를 주고받는 사람들이 서로에게만 메시지를 알 수 있게 하고, 다른 외부 사람들에게는 메시지를 알지 못하게 하는 방법이었다. 물론, 여기에서 암호화나 복호화를 하는 데 사용하는 키는 똑같다. 그러나 만약 메시지를 주고받는 사람 간에 문제가 생길 수도 있다. 예를 들어서 A가 B에게 메시지를 보냈다고 하자. A와 B는 키를 공유하고 있다. 그런데 만약 B가 어떤 메시지를 만든 다음 그것을 암호화하여 메시지 뒤에 붙이고, 이 메시지가 A에서 온 것이라고 주장한다. 또, A가 B에게 메시지를 보냈는데 A가 '나는 메시지를 보내지 않았다'라고 주장한다. B게 메시지를 조작할 수 있음으로, 이 주장도 확실하게 구분할 수 없다. 이런 상황을 막기 위해 전자서명이란 것이 나오게 되었다. 전자서명은, 손으로 쓰는 서명과 비슷하다. 전자서명은 다음과 같은 성질을 가지고 있어야 한다.[3]

  • 전자서명은 서명을 한 사람과 날짜 등을 증명할 수 있어야 한다.
  • 전자서명을 할 당시에 메시지의 내용을 증명할 수 있어야 한다.
  • 전자서명은 외부 기관에 의해 검사받을 수 있어야 한다.[3]

이와 같은 성질을 가진 전자서명을 구현하기 위해 많은 접근 방법이 동원되었다. 그 방법은 크게 두 가지로 나눌 수 있다.

직접적인 방법[편집]

직접적인 방법에서는 보내는 사람과 받는 사람 둘 간에 전자서명이 오고 간다. RSA 알고리즘에서는 만약 받는 사람(B)이 보내는 사람(A)의 공개키를 알고 있다면, A의 전자서명은 보낼 메시지를 A의 비밀키로 암호화한 것이 된다. 이 방법의 문제점은 보내는 사람의 비밀키의 안전성에 있다. 만약 어떤 시간 T에 A가 어떤 메시지를 보냈다고 하자. 그런데 3일 후에 A의 비밀키가 해커에게 유출된다면, 해커는 A의 비밀키를 사용해서 시간을 T로 하는 메시지를 만들 수 있다. 이 메시지를 받은 B는 A가 T 시간에 메시지를 보낸 것으로 착각할 것이다.[3]

중재를 통한 방법[편집]

직접적인 방법은 A와 B 사이에 신뢰할 수 있는 중재자를 둠으로써 해결할 수 있다. A는 B에게 메시지를 바로 보내지 않고 먼저 중재자에게 메시지를 보낸다. 그다음, 중재자는 B에게 메시지를 보낸다. 이 방법은 해커가 A의 비밀키를 알았다고 해도 시간을 조작할 수가 없다. 왜냐하면 시간은 중재자가 관리하기 때문이다.[3] 이때 중재자를 발급자라고 부르는데, 이 발급자는 자신보다 상위의 발급자에게 신뢰를 받고 있고 상위의 발급자로 계속해서 올라가다 보면 ROOT 발급자라고 하는 존재가 나타난다. 그 예로는 흔히 볼 수 있는 미국의 베리사인(VeriSign)이나 한국인터넷진흥원(KISA) 등이 있다. 이들은 마이크로소프트의 검증을 받고 시스템에 하드코딩으로 설치되어 있어서 무조건 믿을 수 있다는 전제를 가지고 있다. 즉 해커가 이 ROOT 발급자를 사칭하려면 전 세계에 있는 마이크로소프트 시스템을 해킹해야 한다는 뜻이다. 그만큼 어렵고, 해커의 원래 목적에도 반한다.[4]

인증 프로토콜[편집]

상호간의 인증[편집]

상호 간의 인증에서는 통신하는 상대방이 서로를 신뢰할 수 있고, 를 교환할 수 있어야 한다. 키를 교환하는 데 있어서 가장 중요한 것은 보안성과 시간문제이다. 먼저 보안성은 공격자가 마치 상대방인 것처럼 위장하고 올 경우를 대비해서 모든 키 정보는 암호화된 형태로 전달되어야 한다는 것이다. 시간 문제는 리플레이공격(replay attack) 때문에 매우 중요하다. 리플레이공격이란 A가 B에게 보내는 메시지가 있을 때 그것을 중간에서 해커가 가로채서 누군가에게 다시 보내는 공격 방법이다. 리플레이공격에는 다음과 같은 방법이 있다.

  • 공격자가 메시지를 저장해 두었다가 나중에 다시 보낸다.
  • 공격자가 메시지를 일정 시간 안에 다시 보낸다.
  • 원래의 메시지가 어떤 이유에 의해 보내지지 않았을 때, 공격자가 B에게 메시지를 보낸다. 이 경우, 공격자의 메시지만 B에 도착하게 된다.
  • A가 보낸 메시지를 A에게 다시 보낸다.

리플레이공격을 막는 한 가지 방법은, 메시지에 순서 번호를 붙이는 것이다. 그래서 새로운 메시지가 도착했을 때 그 순서가 맞는 경우에만 그 메시지가 옳은 것으로 보는 것이다. 이 방법의 단점은 보내는 사람과 받는 사람 모두 마지막 순서 번호를 저장해 두어야 한다는 것이다.[3]

단방향 인증[편집]

단방향 인증이란 말 그대로 메시지를 받은 사람이 보낸 사람의 정당성을 믿을 수 있게 하는 것을 의미한다. RSA 알고리즘에서 이런 예제를 볼 수 있다. 먼저 보낼 메시지는 해시 함수의 입력으로 들어간다. 그 결과, 일정 길이의 해시 코드가 나오게 된다. 이 해시 코드를 발송자의 비밀키로 암호화한 것이 전자서명이 된다. 원래 메시지와 전자서명은 합쳐져서 받는 사람에게 보내지게 된다. 받는 사람은 그 메시지를 받고, 원래 메시지의 해시 코드를 구한다. 그다음, 같이 온 전자서명을 발송자의 공개키를 사용하여 복호화 한다. 계산한 두 개의 해시 값이 같다면 이 메시지는 안전하다고 생각하게 되는 것이다. 공격자는 A의 비밀키를 알지 못하는 한, A의 공개키로 복호화가 되는 메시지를 만들 수 없다.[3]

전자서명 알고리즘의 종류[편집]

전자서명과 관련한 대표적인 표준으로 1994년 미국에서 만들어진 DSS(Digital Signature Standard)가 있다. DSS는 DSA(Digital Signature Algorithm)를 사용하는데, DSA는 슈노어(Schnorr)와 엘가말(ElGamal)의 알고리즘을 기반으로 하며 서명 생성이나 암호키 생성에서는 SHA-1을 이용한다. 우리나라의 경우 1996년에 개발된 KCDSA(Korean Certifice-based Digital Signature Algorithm)가 있다. 현재 우리나라의 전자서명법에 따르면, 전자서명은 인터넷을 통해 전자문서를 교환할 때 일반 문서에서 쓰이는 인감도장과 법적으로 똑같은 효력을 지닌다.[5]

  • RSA 전자서명 : 론 리베스트(Ron Rivest), 아디 셰미르(Adi Shamir), 레오나르드 아델만(Leonard Adleman)에 의해서 1978년 제안된 공개 키 암호 방식을 응용한 전자서명의 방식을 응용한 전자서명 방식이다. 큰 합성수를 소인수분해하는 문제의 어려움에 근거해 안전도를 결정하는 방식이다.
  • 엘가말 전자서명 : 이산대수 문제를 기반으로 전자서명만을 위해 고안된 방식이다.
  • 슈노어 전자서명 : 엘가말 전자서명의 변형으로 이산대수 문제에 안정성을 두고 있다.
  • DSS 전자서명 : 1991년 미국표준기술연구소(NIST)에서 발표한 전자서명 방식으로 엘가말 전자서명을 개량한 방식이다. 엘가말 전자서명 방식과 유사하지만 서명과 검증에 소요되는 계산량을 획기적으로 줄인 방식으로 미국의 전자서명 표준이다. 해시 함수 SHA-1을 사용하여 해시 코드와 난수가 서명함수의 입력으로 제공된다.
  • KCDSA 전자서명 : 국내 표준 전자서명 방식으로 이산대수 문제를 기반으로 한다. KCDSA의 계산 효율을 높이고자 타원곡선 암호 시스템을 기반으로 변형한 전자서명이 ECKCDSA이다.
  • 타원곡선 전자서명 : 타원곡선 (Elliptic curve)상에서 군을 정의하고 이에 대한 이산대수 계산의 어려움에 근거 두고 있다.[2]

각주[편집]

  1. 1.0 1.1 1.2 Feelnet, 〈전자서명 쉽게 이해하기〉, 《티스토리》, 2010-03-10
  2. 2.0 2.1 루카스, 〈전자서명(Digital Signature)〉, 《네이버 블로그》, 2015-09-09
  3. 3.0 3.1 3.2 3.3 3.4 3.5 내 맘대로 보는 세상, 〈암호학 6주 - 전자서명〉, 《개인 블로그》
  4. 빠에야좋아, 〈전자 서명이란?〉, 《티스토리》, 2018-02-23
  5. 양대일, 〈전자서명〉, 《네이버 지식백과》, 2013-06-28

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 전자서명 문서는 암호 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.