만족
[정보보안] 전자 서명과 공개키 인증 본문
[정보보안] 전자 서명과 공개키 인증
기타 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도 같은 방법으로 검증하여 올바른 공개키들로 이루어졌는지 확인할 수 있다.
'기타 CS 이론 > IT Security' 카테고리의 다른 글
[정보보안] 암호의 이해 (0) | 2021.12.13 |
---|---|
[정보보안] 코드 보안: 포맷 스트링 공격 (0) | 2021.12.13 |
[정보보안] 코드 보안: 계정과 권한, 프로그램 실행 구조 (0) | 2021.10.17 |
[정보보안] 인터넷 정보보안: HTTP 기본 개념과 웹 해킹 공격 (0) | 2021.10.16 |
[정보보안] 네트워크 보안 시스템: 방화벽, 침입 탐지와 침입 감지 시스템 (0) | 2021.10.16 |