참조
대칭키
- 동일한
key
로 암호화, 복호화 하는 것.
- 원래 정보를 알아보기 어렵게
key
를 이용해 내용을 바꿔준다. 암호화
한다.
- 이
key
를 아는 사람만 복호화
할 수 있다.
- 대칭키는 누군가
key
를 알면 쉽게 복호화할 수 있다. (암,복호화 key가 동일하기 때문에)
- 이러한 문제를 극복하기위해 나온게 공개키 방식이다.
공개키
- 비공개키는 자신만이 가지고 있고, 공개키를 타인에게 제공한다.
- 공개키를 제공 받은 타인은 공개키를 이용해서 정보를 암호화한다.
- 암호화한 정보를 비공개키를 가지고 있는 사람에게 전송한다.
- 비공개키의 소유자는 이 키를 이용해서 암호화된 정보를 복호화 한다.
- 이 과정에서 공개키가 유출된다고해도 비공개키를 모르면 정보를 복호화 할 수 없기 때문에 안전하다.
- 공개키로는 암호화는 할 수 있지만 복호화는 할 수 없기 때문이다.
- 데이터랑 같이 전달하는 KEY를
공개키
라고 한다.
- 공개 KEY에 매핑되어 내가 가지고 있는 KEY가
개인키(Private Key)
이다.
공개키 의문점
- 위의 설명을 이해해 본다면 공개키 방식을 이용하기 위해서는, 개인키와 매핑되는 공개키를 생성해야 한다.
- 그런 다음, 공개 키를 뿌린다.
- 그러면 공개키를 받은 Client들은 정보를 공개키로 막 암호화 시킬 수 있다.
그렇다면 공개키를 알고 있는 Client는, 공개키로 암호화 된 데이터를 통신할일이 절대로 없을까 ?????
- server <-> client관계에서 공개키 방식을 사용한다면, client는 공개키로 암호화 된 정보를 받게될 수도 있지 않나?
이에 대한 해답 !
- 공개 키 암호 — 특정한 비밀 키를 가지고 있는 사용자만 내용을 열어볼 수 있음.
- 공개 키 서명 — 특정한 비밀 키로 만들었다는 것을 누구나 확인할 수 있음.
- 이 두가지 종류로 분류한다는 정의가, 나에겐 해답이 되었다.
- 개인키로 잠군다 -> 서명과 같은 인증을 위해 사용 (공개키로 풀 수 있다.)
- 공개키로 잠군다 -> 암호화 (개인키로만 풀 수 있으니깐)
즉, 공개키로 Sever - Client가 서로 데이터를 주고받는다고 가정을 한다면..
- 두 서버 모두 각자의 개인키에 대한 공개키가 존재해야 한다.
- 따라서 데이터를 받을 때는, 자신의 비밀키와 대칭대는 공개키로 암호화 된 데이터를 전달받아야 한다.
구분 | 개인키 | 공개키 |
---|
server | s1 | s_public |
client | c1 | c_public |
server -> client 데이터를 보낼 때, c_public으로 암호화 해서 보내야 함.
client -> server 보낼 때, s_public으로 암호화 해서 보내야 함.
그래야, 각 서버에서 데이터를 복호화 할 수 있다.
공개키를 활용한 전자서명
- 만약 공개키를 전송할 때 개인키로 암호화를 한다면 ??
- 데이터를 전송하는 과정에서 공개키가 노출되었다면, 공개키로 데이터를 복호화할 수 있다.
- 개인키로 암호화 된 데이터는, 매핑 된
공개키
로 복호화할 수 있다. (A <-> B 관계니깐)
- 이 경우가 왜 쓰일까 ??
- 만약 데이터는 누가봐도 상관이 없는데 .. 이 데이터를 보낸사람이 나쁜놈이 아닌지 알고싶다면??
(즉, 내가 허락한 놈인걸 알 수 있다면 ??)
- 클라이언트에서는 전달받은 데이터를
공개키로 복호화
한다.
- 그렇다면, 이 데이터를 전송한 client는 이 공개키에 대한
private key
를 가지고 있는 대상이구나를 판별할 수 있다.