만족

[정보보안] 전자 서명과 공개키 인증 본문

[정보보안] 전자 서명과 공개키 인증

기타 CS 이론/IT Security Satisfaction 2021. 12. 13. 08:31

전자서명

전자적 데이터에 서명자에 대한 인증을 추가하는 것

 

비대칭 키를 이용해 서명할 때 개인키로 서명하고 공개키로 검증한다.

=> 서명: Signiture(M, 개인키)

=> 검증: Verify(S, 공개키)

 

따라서 서명은 본인만 할 수 있지만 검증은 공개키를 알고있는 모두가 할 수 있다.

 

전자서명: 해시

=> 서명: Signiture(M, 개인키)

=> 검증: Verify(S, 공개키)

에서 M이 원본 메시지 그대로에 서명하는 것은 아니다.

 

메시지를 Hash해서 Hash(M)값에 대해 서명한다.

 

그러므로 더 정확하게는

=> 서명: Signiture(Hash(M), 개인키)

가 맞다.

 

전자서명: 알고리즘

대표적으로 RSA알고리즘을 사용한다.

 

RSA암호화와 기본 개념은 동일하지만,

여기에서 목적은 서명과 검증이지, 암복호화가 아니므로 다른 점이 있다.

 

과정은 다음과 같다.

 

두 소수 p,q에 대해 n=p*q를 생성한다.

(p-1)(q-1)에 서로소(공약수가 1)인 e를 생성한다.

=> n, e를 공개키로 사용한다.

 

ed  1 mod (p-1)(q-1) 을 만족하는 d를 생성한다. 

여기서 p,q,e를 알고있는 소유자는 d를 빠르게 구할 수 있지만, 모르는 사람은 그렇지 않다.

=> d를 개인키로 한다.

 

서명할 때는 메시지 M을 S= M^d mod n,

검증할 떄는 M= S^e mod n으로 한다.

 

여기에서 메시지에 서명할 때 평문이 아닌 Hash(M)을 쓰는 이유가 나온다.

 

만약 공격자가 동일한 사람이 서명한 서로 다른 서명 2개(S1, S2)를 알고 있다면

Signiture= M^d mod n 이므로

S1*S2= (M1*M2)^d mod n이므로

새로운 서명 S3= S1*S2를 만들 수 있다.

=> 물론 M1*M2라는 무의미한 데이터에 관해 서명 S3는 의미가 없지만, 그 메시지에 대해 임의로 유효한 서명을 만들어낼 수 있다는 것이 문제다.

 

Hash(M)하게 되면 S1*S2는 (H(M1)*H(M2))^d가 아니라 H(M1*M2)^d mod n 이 되므로

S1*S2 서명값이 M1*M2에 대해 성립하지 않는다.

 

해시

 

입력문의 길이와 상관없이 더 짧은 고유한 문자열로 변환하는 것을 해시라 한다.

 

해시값의 길이는 알고리즘에 따라 어떤 입력에 대해서도 고정된 길이를 갖는다.

 

해시는 충돌방지(x1!=x2이면 H(x1)!= H(x2)여야 하고, x1=x2이면 H(x1)=H(x2)여야 한다),

일방향성(H(x)=y에 대해 y값에서 x값을 추측할 수 없어야 한다) 특징을 갖는다.

 

대표적 해시 함수로 MD5, SHA-1 등이 있다.

 

공개키 인증

비대칭 암호 알고리즘을 사용할 때, 공개키가 정말로 소유자의 것이 맞는지 검증할 수 없다는 문제가 있다.

 

이런 문제 때문에 A와 B가 통신할 때 C가 A와 B의 공개키를 가로채

C가 자신의 신분을 속이면서 A,B와도 통신할 수도 있다.

(ex: B에게 자신의 공개키 C를 전달하며 A인척 함)

 

이런 문제를 중간자 공격이라 한다.

 

이것을 막기 위해 공개키의 소유자에 대한 검증 역시 필요하다.

 

공개키 인증 방법

먼저 용어정리를 하겠다.

 

인증서: 각 사용자의 공개키에 대한 증명서 (공개키 소유 증명서)

인증 기관(CA): 각 사용자의 공개키에 대한 인증 및 증명서 발급

PKI: 사용자+ 공개키+ 인증서+ 인증기관으로 구성

 

인증 구조는 계층적으로 되어 있다.

 

 

최상위에 PAA라는 정책승인기관(미래부)이 존재하고

=> 공인인증서 정책 결정

그 밑에 PCA라는 정책인증기관(한국인터넷진흥원)이 존재하고

=> 인증 기관의 인증 기관 (Root CA)

그 밑에 CA라는 인증 기관(yessign 등)이 존재하고

=> 인증서 발급과 취소 등의 업무 담당

맨 마지막에 RA라는 등록 기관(은행, 한국전자인증 등)이 존재한다.

=> 사용자의 신분을 확인한다

 

공인인증서

인증서에는 기본 영역에 버전, 일련번호, 서명 알고리즘, 발급자, 유효기간, 주체(CN, OU, O, C), 공개키(1024 bit) 값이 포함되어 있으며 

추가로 발급자의 개인키(ex: CA의 개인키)로 서명되어 인증서의 검증이 가능하다.

 

인증서의 검증은 아래와 같은 방법으로 검증할 수 있다.

 

사용자의 인증서는 <기본영역, 전자서명(CA의 개인키로 서명)>로 되어 있으므로

CA의 공개키를 이용하여 사용자 인증서를 검증할 수 있다.

 

그런데 CA의 공개키가 정말로 CA의 것이 맞는지를 확인하려면 

CA 인증서를 찾아 검증해야 한다.

 

따라서 CA의 인증서를 다시 PCA의 공개키로 검증하고,

PCA도 같은 방법으로 검증하여 올바른 공개키들로 이루어졌는지 확인할 수 있다.

 

 

 

 

 



Comments