2018년 4월 10일 화요일

대칭키 암호와 비대칭키(공개키) 암호

 암호학에서는 암호화 방식을 크게 2가지로 구분짓는다.

1) 암호화와 복호화시 키 값이 똑같은 대칭키 암호화 방식
2) 암호화와 복호화시 키 값이 다른 비대칭키 암호화 방식(공개키 암호화라고도 불린다.)

1. 대칭키 암호 알고리즘
 송신자와 수신자간의 메시지(평문)을 암호화 / 복호화 시 키 값이 똑같은 경우이다.
키 값이 똑같다는 건, 송신자와 수신자간의 키 값을 서로 공유하고 있어야 하며, 이외에 타인으로 부터 노출되지 않도록 비밀로 관리해야 한다. 대칭키 암호알고리즘은 고대 암호학에서도 사용하여 오랜 역사를 가지고있다. 대표적으로 고대 로마에서 시저라는 장군이 사용했던 시저암호(치환 암호방식 중 하나임)가 있다.

1-1) 대칭키 암호알고리즘의 문제점
- 키를 어떻게 공유할것인가...(송신자와 수신자만이 알고있어야 하므로) 
- 키를 타인에게 노출될 경우, 보안에 매우 취약해진다...(암호화 복호화 키가 같으므로 제 3자가 송신자 -> 수신자 전달하는 메시지를 갈취 했을경우, 키값으로 암/복호화가 가능하므로)

1-2) 대칭키 암호알고리즘의 장점
 이러한 키 전달 및 관리에 대해 어려운 점이 있으나, 그에따른 장점도 충분하다.
- 암호화 연산속도가 빨라서 효율적으로 암호시스템을 구축할수 있다.
- 고전 암호학에서도 많이 사용한 방식인 간단한 치환과 전치의 조합으로 되어있어서 쉽게 개발이 용이하며 시스템에서도 빠르게 동작한다.

1-3) 대칭키 암호 알고리즘 암호화 / 복호화 방식
1)수신자<->송신자 키 값을 이전에 공유하고있어야함.

2) 수신자->송신자 메시지 암호화 한 뒤 전달
(엘리스) -> (찰스)

3) 복호화하여 메시지 읽고 다시 암호화해서 메시지 전달.
(찰스) -> (엘리스)


2. 공개키 암호 알고리즘
 공개키 암호 알고리즘은 '비대칭 암호 알고리즘'이라고도 부른다. 말 그대로 암호화와 복호화시 사용하는 키 가 비대칭이다. 즉, 키가 다르다. 그래서 대칭키 암호 알고리즘과는 다르게, 키 값이 타인, 제 3자에게 노출이 되어도 암호화, 복호화시 키가 다르므로 해석이 불가능하다. 송신자는 수신자의 공개키로 메시지(평문)을 암호화 해서 전송하면, 수신자는 이 암호화된 문서를 자신의 개인키로 복호화하여 해석이 가능하다. 이 과정에서 제 3자, 타인으로부터 메세지나 키를 유출시켜도 수신자가 갖고 있는 개인키로만 해석이 가능하므로, 해석이 불가능하다.

2-1) 비대칭키 암호 알고리즘의 문제점
 - 암호화 / 복호화 시간
 : 대칭키 암호 알고리즘에 비해 공개키, 개인키로 2n개의 키의 사용과 복잡한 암/복호화 방식으로 인하여 시간이 많이 걸린다.(통신속도가 느림)
 - 수신자의 개인키 관리
 : 만약, 공격자(C)가 자신이 송신자(A)인것처럼 수신자(B)에게 자신(공격자, C)의 공개키로 암호화해서 평문을 보내면, 수신자(B)는 송신자(A)에게 전달받은 메시지인 줄 알고 전달받은 공개키(공격자, C의 공개키)로 메시지 내용을 암호화 해서 전달하면, 공격자(C)의 개인키로 복호화 해서 보안의 문제점이 발생할 수 도 있다.(이를 방지하고자 인증서 or 인증기관을 이용함)

2-2) 비대칭키 암호 알고리즘의 장점
 - 보안성이 강하다.
 대칭키 암호 알고리즘과는 다르게 키가 2개이상을 사용한다.
송신자는 자신의 공개키(이건 유출되도 큰 문제가 되지 않음)와 암호화된 메시지를 전달하면, 수신자는 메시지를 받고 송신자의 공개키로 복호화 한 뒤, 송신자의 공개키로 메시지를 암호화해서 보낸다. 여기서 제3자에게 공개키, 암호화된 메시지를 유출당해도 송신자의 개인키가 필요하므로, 해석이 불가능하다.(개인키는 송신자만 알고 있다.)

2-3) 공개키 암호화 방식
1) 송신자는 인증기관으로부터 공개키, 개인키를 받는다.

2) (송신자)자신의 공개키로 암호화하여 수신자에게 메시지를 전달.

3) 수신자는 인증기관으로부터 받은 송신자의 공개키로 메시지를 복호화하여 해석한다. 여기서 해독이 될경우, 타인이 아닌, 정확한 송신자로부터 받았다는 것을 식별가능. 

4) 수신자는 자신의 메시지를 송신자의 공개키로 암호화하여 전달.

5) 송신자-엘리스는 수신자로부터 받은 메시지를 자신의 개인키로 해독.

댓글 없음:

댓글 쓰기

[Java] N-I/O(Non-Blocking) 파일 읽기 쓰기 - GatheringByteChannel, ScatteringByteChannel, ByteBuffer 사용.

우리는 지금까지 다음과 같이 살펴보았다. 1.  InputStream / OutputStream : 입, 출력 스트림을 바이트로 처리하여 읽기, 쓰기. 2.  FileInputStream / FileOutputStream : 입, 출력 스트림을 ...