키 관리
온라인상에서 상호간 통신을 할때는 메시지의 조작, 수정, 위조 등을 방지하기 위해서는 암호화가 필요합니다.
이때, 사용하는 암호방식은 대칭키이며 대칭키를 사용하는 이유는 속도가 빠르기 때문입니다.
다만, 대칭키는 키 배송의 문제가 있는데 이것을 해결하기 위해서는 다음과 같은 방식을 사용할 수 있습니다.
1. 키 분배 센터(KDC)를 이용한 비밀키(세션키) 분배
2. 공개키 기관에 의한 세션키 분배
1. 키 분배 센터(KDC)를 이용한 비밀키(세션키) 분배
각 순서에 대한 해설은 아래와 같습니다.
1. A가 KDC에게 자신의 정보와 A와 B가 통신할 수 있는 세션키를 요청한다.
2. KDC가 세션키, B의 아이디, 난수를 A의 마스터키로 암호화 해서 A에게 보내준다.
(그림 오른쪽의 실제로 KDC가 B로 보내는 2번 과정은 다음과 같습니다.
1. KDC가 A에게 B의 마스터키로 암호화된 암호문을 보내준다.
2. 그것을 A는 3번과정에서 B에게 같이 보내준다.
그 이유는 KDC와 B는 둘다 서버이기 때문에 서로 대기상태로 있고 먼저 요청을 하지 않기 때문입니다.)
3. A는 B에게 자신의 정보와 난수를 KDC에서 받은 세션키로 암호화 해서 보낸다.
난수를 보내는 이유는 자신이 보낸 연결 요청이 B에게 전달 됐다라는것을 확인하기 위해서이다.
4. B는 A에게 자신의 정보와 받았던 난수를 세션키로 암호화 해서 보낸다.
여기서 T+1은 미리 약속된 연산을 해서 보내주는 것이다. 사용자들은 키분배센터와 상면할때 마스터키만 받는것이 아니라 여러가지를 받는데 그중 하나도 이것이다.
5. 이제부턴 세션키로 통신할 수 있습니다.
2. 공개키 기관에 의한 세션키 분배
R : 개인키, U : 공개키
1. A는 B의 공개키를 요청하며 이때 타임스탬프를 같이 보낸다.
2. 공개키 기관의 개인키로 암호화된 정보를 A에게 보낸다. A는 공개키 기관의 공개키로 복호화를 한다.
(공개키 기관이 보냈다는 사실을 확신하기 위해서이다.)
3. A가 B에게 자신의 정보와 난수를 같이 보낸다. 이때 b의 공개키로 암호화해서 전송.
(N1을 보냄으로써 B의 진위여부를 확인할 수 있다.)
4. 1번 과정과 비슷하다.
5. 2번 과정과 비슷하다.
6. B가 A의 진위여부를 확인하기 위해 N2를 보낸다. A의 공개키로 암호화한다.
(3번과정에서 왔던 N1을 같이 보냄으로써 A의 요청이 B에게 정상적으로 왔다라는것을 확인 시켜준다.)
7. B의 응답이 A에게 정상적으로 왔다라는것을 확인 시켜주기 위해 자신의 개인키로 복호화를 하고 N2를 B의 공개키로 암호화 하여 다시 보내준다.
8. A는 세션키를 만들고 자신의 개인키로 암호화 한 후 B의 공개키로 다시 한번 암호화 한후에 보낸다.
이렇게 하면 B는 처음에 자신의 개인키로 복호화를 하기 때문에 그 내용은 B만 볼수 있고(기밀성) 여기서 A의 공개키로 복호화를 한번 더 하면 메시지의 원문이 나오는데 A의 공개키로 암호화한 이유는 A가 이것을 보냈다라고 확신하기 위해서이다.(책임추적성)
세션을 종료하고 다음에 다시 연결을 할때는 처음부터 하는것은 아니다. 이후엔 기관마다 틀린데 보통은 A가 B에게 이 공개키 써도 되는지 물어보고 가능하다면 바로 8번단계부터 시작한다.