2016년 6월 3일 금요일

정보보안기사 정리 3 - 전자서명, PKI

전자서명, PKI


1. 전자서명(디지털 서명) 이란?
- 송신자가 서명(signing) 알고리즘을 이용해 메시지에 서명을 하면, 수신자는 메시지와 서명을 받고 검증(verifying) 알고리즘을 적용.
- 디지털 서명에서는 공개키 암호를 사용함. 서명자가 자신의 개인키로 서명하고, 검증자는 서명자의 공개키로 서명을 검증하는 것.

* 처음에 전자서명을 공부하면서 왜 개인키로 서명을 해서 보내는지 이해가 안감.
"수신자의 공개키로 해야 수신자가 열어볼텐데.. 송신자의 개인키로 하면 아무나 열어 볼수 있는데 문제가 되지 않나." 라고 생각 했음. (진짜 생초보라서...)
송신자 A의 개인키로 서명하는 것은 A의 개인키는 오직 전세계에서 A 한명만 가지고 있는 것이때문이다. 수신자 B가 송신자 A의 공개키로 복호화했을 때 문제가 없으면 전세계에 오직 한사람 A가 보낸것을 확신할 수 있게 된다. (다른 송신자들이 보냈으면 A의 공개키로 못여니까.)

2. 전자서명이 제공하는 서비스
- 메시지 인증(메시지 출처 인증)
- 무결성: 현재 디지털서명시스템은 해시함수를 사용하여 서명과 검증알고리즘 만듦. → 해시값으로 검증을 통해 무결성 보장.
- 서명자 인증(User authentication): 전자 서명의 서명자를 다수가 검증 할 수 있어야 함.
- 변경불가(Unalterable)
- 재사용 불가(Not reusable): 다른 전자문서의 서명으로 사용할 수 없음.

* 신뢰받는 제 3자를 통한 부인 방지(Non-repudiation) 가능
  앨리스가 메시지와 본인의 개인키로 서명알고리즘을 수행. →
  서명알고리즘 수행 결과 값을 신뢰받는 제3자에게 전송. →
  제3자는 앨리스의 공개키로 verifying 알고리즘을 수행하여검증. →
  제3자는 자신의 개인키와 메시지를 이용해 서명 알고리즘 수행. →
  밥이 제3자로부터 서명 알고리즘 수행 결과를 받고 제3자의 공개키로 검증 알고리즘을 통해 검증함.
  => 나중에 앨리스가 메시지에 대해 부인을 하면 제 3자가 저장하고 있는 메시지와 밥이 받은 메시지를 비교하여 앨리스의 부인 여부를 결정.

* 부인 방지가 제 3자를 통해서도 되지만 애초에 송신자의 개인키로 서명하기 때문에 어느 정도는 부인 방지효과가 있다고 생각함.
  단지 계속 자기것이 아니라고 우길수도 있기에 제 3자를 통한 부인 방지도 필요 한게 아닐까 생각한다.

* 전자서명을 해도 기밀성은 보장이 안됨. 기밀성은 암호화 기술을 통해서 제공되므로 메시지와 서명에 비밀키 또는 공개키를 이용해서 암호화를 해야 함.

3. 전자서명에서 사용되는 알고리즘 예 (각 알고리즘에 대한 자세한 설명은 구글링)
- RSA
  앨리스(서명자)의 개인키(d,n)과 메시지 M을 이용하여 S=M^d mod n 을 계산 →
  서명 S와 메시지 M을 밥(수신자)에게 전송 →
  밥은 앨리스의 공개키(e,n)와 S를 이용해 M' = S^e mod n을 계산 →
  전달 받은 M과 계산된 M’를 비교하여 검증 함. 같으면 OK.
- ElGamal
  ElGamal 암호화 기법과 동일한 키를 사용하지만 사용되는 방식은 약간 다름.
- Schnorr
  ElGamal 기반 알고리즘으로 서명 값의 크기를 작게 만드는 장점이 있음.
  이산대수(로그) 문제 해결의 어려움을 이용한 알고리즘으로 서명 길이는 2048비트 이상 임.
- ECC(Elliptic Curve digital scheme)
  타원 곡선 기반 알고리즘으로 ECDSA 라고도 함.
- DSS(Digital Signature Standard, 디지털 서명 표준)
  Schnorr 구조에 ElGamal을 더하여 디지털 서명 알고리즘 DSA를 만듦.

* DSS vs RSA
  동일한 p를 사용할 경우 DSS 서명 계산이 RSA 보다 빠름.
  보통은 RSA가 DSA보다 빠르지만, 미리 계산된 값이 있다면 DSA가 RSA보다 빠름.
* DSS vs Elgamal
  DSS 서명이 ElGamal 서명보다 길이가 짧음. 이유는 q가 p보다 작기 때문.

4. 전자서명 방식
- 메시지에 직접 서명하는 "메시지 복원형 전자서명" 방식
  ① 서명자가 자신의 개인키로 메시지를 암호화하여 전송하면 검증자는 서명자의 공개키로 서명된 암호문을 복호화 함.
  ② 기존의 공개키 암호방식을 이용하므로 별도의 전자서명 프로토콜이 필요하지는 않지만,
      메시지를 일정한 크기의 블록으로 나누어 각 블록에 서명해야 하므로 많은 시간이 소요됨.
  ③ 과정
      -1. 앨리스가 자신의 개인키로 메시지 암호화(이 결과가 서명된 값)
      -2. 앨리스가 메시지와 서명 값을 밥에게 보냄
      -3. 밥은 수신한 서명을 앨리스의 공개키로 복호화 한 후, 메시지 획득
      -4. 수신한 메시지와 복호화된 메시지를 비교해서 검증.

- 메시지의 해시값에 서명하는 "부가형 전자서명" (<= 많이 쓰임)
  메시지를 해싱하여 해시값을 만들고, 해시값을 서명자의 개인키로 암호화한다. (암호화된 값이 전자서명 값)
  메시지와 전자서명을 보내면, 수신자는 수신된 메시지를 해싱한 결과와 공개키를 이용하여 전자서명을 복호화 값을 비교하여 검증함.
  메시지 외에 전자서명을 따로 전송해야 해서 전송량이 늘어남.
  * 아래 그림에서 기밀성을 추가하고자 할때는 보내는 메시지를 암호화 하면 됨. 
    하지만 중간자 공격(Man in the middle attack)이 가능하다. 즉, 수신자가 공개키로 복호화 할때 공개키가 정말 송신자의 것인지 검증을 못함. 
    (=> PKI 구조 사용 필요)
<전자서명 원리>
* 그림 출처: http://redscreen.tistory.com/category/%E3%80%80::%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EB%B3%B4%EC%95%88

5. 전자서명에 대해서
- 전자서명도 복사가 가능한데 문제가 발생하지 않을까?
  복사 가능하다. 하지만 전자서명은 원본이냐 사본이냐를 가리는 것이 아니라 특정 서명자 와 특정 메시지를 묶는 다는 점이 포인트이다.
  복사본이 수십,수백개 여도 서명자는 한명이기에 서명은 유효함.
- 전자서명 후 메시지와 서명 내용이 변경될 수 있는데 문제가 않생길까?
  수신자가 검증할 때 변경행위가 검출 된다. (방지가 목적이 아니라 검출이 목적임.)
- 메시지와 전자서명 값을 잘 조작해서 수신자의 검증을 통과 할수 있는가?
  거의 불가능. 해시값은 메시지의 1비트라도 바뀌면 달라짐.
- 누군가의 서명을 얻었다면 서명 부분만 복사하여 다른 곳에서 재이용 될수 있는가?
  메시지가 다르면 서명도 다르므로 불가능.

6. 특수 서명 방식: 은닉 서명(블라인드 서명)
- 문서의 내용을 서명자에게 보여주지 않으면서 서명을 해야 하는 경우.
- 예: 네이쳐지에 실린 정도의 전산 이론을 A가 만들었는데 이것을 공증기관으로부터 서명 받고자 함. 하지만 공증기관은 못보게 하기 위해 은닉 서명 사용.
- 밥이 메시지를 생성하고 블라인드 시킨 후 공증기관(앨리스)에게 보냄 →
  앨리스는 블라인드 된 메시지에 서명을 하고 돌려줌 →
  밥은 블라인드를 벗기고 메시지와 서명을 얻음. →
  다른 사람들에게 전송하면 사람들이 서명을 검증하고 사용함.
- 은닉 서명(Blind Signature)의 장점
  은닉서명을 하게 되면 메시지를 실제로 받는 사람들은 메시지를 검증할 수는 있지만 누가 보냈는지를 연결시키는 것이 어렵다.
  즉, 보낸 사람의 익명성이 보장되는 것으로 전자투표 또는 전자화폐(화폐의 취득 경로 추적 불가) 등의 어플리케이션에서 사용 될 수 있다.

* 전자 서명 참고 자료
1. http://www.parkjonghyuk.net/lecture/modernCrypto/lecturenote/chap09.pdf
2. http://donghlee.korea.ac.kr/?q=filebrowser/download/179
3. http://d2.naver.com/helloworld/744920


7. 전자 봉투 (Digital Envelope)
- 기밀성, 무결성, 부인 방지 지원.
- 과정
  "송신자의 전자서명, 원문, 송신자의 공개키 인증서"를 비밀키로 암호화 한다. →
  비밀키를 수신자의 공개키로 암호화 한다. →
  비밀키 암호화한 것과 비밀키 암호화한 것을 합쳐서 전자봉투라고 함.
- 수신자는 전자봉투에서 자신의 개인키로 복호화하여 비밀키를 얻고, 비밀키로 전자서명과 평문, 인증서를 얻은 후 해시값을 비교함.

<전자봉투 생성 과정>

<전자봉투 복호화 과정>
(그림 출처: 한빛아카데미, 정보보안개론 Chapter 09. 전자상거래)


8. PKI(Public Key Infrastructure, 공개키 기반 구조)
- 비대칭키 암호 시스템을 기반으로 디지털 인증서를 생성, 관리, 저장, 분해, 취소하는데 필요한 HW, SW, 인력, 정책, 절차 등의 것을 말함.
- 역할: 인터넷에서 신분증을 검증해 주는 관청
- 기밀성, 접근제어, 무결성, 인증, 부인방지 제공
- 구성 요소
  인증 기관, 등록기관, 디렉터리 서비스, 사용자 등

9. PKI의 필요성
- 공개키 암호 시스템을 사용하는 시스템에서 사용자의 공개키를 안전하고 신뢰성 있게 전달해야할 필요성이 있음.
- 예: 전자서명에서 송신자의 개인키로 서명을 하면 수신자가 송신자의 공개키로 이를 확인하는데, 문제는 습득한 공개키가 정말 송신자의 것이 맞는 것인지 확인을 못하는 것.
  즉, Eve가 도청을 해서 자신의 서명으로 바꾸어 전송을 한다면 수신자는 당할수 밖에 없음.
- 위의 예처럼 송신자의 공개키를 확인해 주는 시스템이 필요하게 되었고 그 역할을 PKI가 하는 것임.
- 송신자의 공개키 + CA(인증기관)의 전자서명 = 공인인증서

10. 인증 기관 (CA, Certification Authority)
- 인증 정책 수립, 다른 CA와 상호 인증 제공.
- KISA가 최상위 인증기관이고, 코스콤, 금결원, 한국무역정보통신, 한국정보인증, 한국전자인증 이 공인 인증기관으로 지정됨.
- 주요 역할
  ① 사용되는 키쌍 작성
  ② 인증서 등록(인증서 작성시 인증기관의 개인키로 전자서명), 발급, 취소, 인증서 목록 관리
  ③ 인증서 폐지
- PAA(Policy Certification Authority, 정책승인기관)
  전체 PKI 시스템에서 사용되는 정책과 절차 생성. Root CA 역할을 함.
  국가적 측면에서 타국의 PAA와의 상호인증 수행.
  하위 PCA의 정책, 지침 만듦.
- PCA(Policy Certification Authority, 정책인증기관)
  PAA가 만든 정책의 세부화된 정책  생성.
  자신의 도메인 내의 사용자와 CA가 따라야하는 정책 수립, 인증기관의 공개키 인증, 인증서 관리.
- 일반 CA
  PAA/PCA의 정책에 따라 사용자에게 공개키 인증서 발급
* PAA-PCA-일반CA 단계로 네트워크 구조로 CA가 연결되어 있으며, 일반 CA라도 하위에 CA를 두어 PCA의 역할을 겸할수 있음.

11. 등록 기관(RA, Registration Authority)
- 사용자와 CA 사이에서 사용자로부터 인증서 요구를 받고 CA에게 인증서 발급 요청하고, 받으면 사용자에게 주는 것.
- CA와 사용자 간에 거리가 멀면 RA가 중간 매개체 역할을 함.
- 인증서 신청을 받으면 신분과 소속을 확인하며 요청을 CA에게 제출하고 결과를 받아 신청자에게 전달.

12. 디렉터리 서비스(Directory Service)
- 인증서와 사용자 관련 정보, 상호 인증서 쌍 및 인증서 취소 목록 등을 저장하고 검색할 수 있는 서비스는 제공함.
- CA에서 관리하며, 디렉터리 관리 서버는 LDAP를 이용하여 X.500 디렉터리 서비스를 제공함.

13. 사용자
- 인증서를 사용하는 사람, 사람이 이용하는 시스템 모두를 지칭.
- 자신의 비밀키와 공개키를 생성하고, CA에 공개키 인증서를 요청하고 인증서를 발급 받음.

14. LDAP (Lightweight Directory Access Protocol)
- X.500 디렉토리 서비스를 위한 DAP(Directory Access Protocol)의 일종.
- DAP 는 OSI 프로토콜 스택에서 작동되고 , 컴퓨팅 자원을 많이 사용하는 무거운 프로토콜이기에 이를 경량화한 LDAP가 만들어짐.
- LDAP은 TCP/IP 에서 동작하며, LDAP를 통해 X.500 서비스에 접근함.

15. X.500 
- 일종의 DB 역할을 하는 것으로써 소유하고 있는 자원의 디렉토리 이름을 갖음.
- 트리 구조로 이루어져 있음.
- 자료 출처: http://blog.naver.com/sj99yang/140002697336
* X.500 같은 디렉터리 서비스나 네이밍 서비스들로는 LDAP, DNS, RMI 등이 있다.

16. PKI가 관리하는 것
- 인증서(PKC, Public-Key Certificate)
  전자서명에 사용된 개인키와 상응하는 공개키를 제공하여 그 공개키가 특정인의 것이라는 것을 확신할 수 있는 증거로 사용됨.
  전자서명의 검증에 필요한 공개키에 소유자 정보를 추가하여 만든 일종의 전자 신분증.
  공개키 인증서에는 이름이나 소속, 메일 주소들의 개인 정보 및 그 사람의 공개키가 기재되고, CA의 개인키로 전자 서명 되어 있음.

<공개키 인증서 생성 과정>


- 인증서 표준 규격 X.509
  위의 그림 <공개키 인증서 생성 과정> 에서 오렌지 색으로 칠해진 "서명 안된 인증서" 부분에 해당하는 내용이 아래표와 같음.
  * 자세한 사항은 구글링 해야함.


- 인증서 폐지
  인증서 안에 있는 사용자의 공개키에 대응되는 개인키가 알려진 경우, CA의 개인키가 알려진 경우 등에 해당되면 인증서를 폐기해야 함.

- CRL (Certificate Revocation List)
  CA가 폐지한 인증서 목록을 의미함.
  폐지된 인증서의 일련번호목록에 CA의 전자서명을 붙인 형태이다.
  사용자는 CA로부터 CRL 조회하여 암호화 또는 자신의 검증에 사용되는 공개키의 인증서가 폐지되어 있지 않은지를 조사해야 함.

17. OCSP (Online Certificate Status Protocol)
- 인증서를 검증하는 당사자가 CRL 전체를 다운 받지 않고 필요한 인증서만 실시간으로 확인할 수 있게 하는 방법.
- 데이터 트랜잭션의 중요성이 큰 경우 사용.
- OCSP 서버에 검증자가 인증서의 상태를 질의하면 서버가 good, revoked, unknown 중 하나의 메시지를 전자서명을 통해 전달함.

18. PKI의 서비스 흐름도

댓글 없음:

댓글 쓰기