보안책을 보면, 늘 앞에 나오는 것이 암호화죠.
암호화는 보안의 3요소(기밀성/무결성/가용성) 중 기밀성을 중점적으로 제공합니다.
기밀성을 간단히 얘기하면, 허가받은 사용자만이 접근하게 하는 것이죠. 암호화는 복호화키를 알고 있는 사람만이 접근할 수 있게 하기 때문에 기밀성을 제공합니다.
암호는 IT환경에서 안쓰이는 곳이 거의 없습니다.
예를 들면, 인터넷뱅킹을 한다고 하면 ID/PWD 로그인을 하더라도 해당 정보가 암호화 되어 서버로 전송됩니다. 공인인증서를 쓸 때도 사용되구요, 단순히 웹페이지를 접근할 때도 https를 쓰는 환경이라면 모든 컨텐츠를 암호화되어 송수신되죠. 계좌번호나 중요한 정보 입력할 때는 스마트폰이나 피씨 등 클라이언트에서부터 중요정보유출을 방지하기 위해 입력 즉시 암호화되지요.
암/복호화를 설명할 때 스테가노그래피 등 암호의 역사부터 얘기하는데요, 오늘은 다 생략하고 알고리즘의 상세내용도 덮고, 대칭키 기반 알고리즘과 비대칭키 기반 알고리즘... 두 가지의 개념이해, 장단점 이해(암기필요없음...이해하면됨)를 해보시죠. 그러면 어떻게 활용되는지도 함께 이해할 수 있습니다.
그리고, 비대칭키기반 암호 알고리즘을 잘 이해하면 가상화폐에서 사용되는 블록체인의 원리를 이해하는데 많은 도움이 됩니다.
암복호화 개념
암호화는 평문을 타인이 못알아보도록 만드는 과정입니다.
복호화는 암호문을 다시 평문으로 만드는 과정이겠죠.
암복호알고리즘은 보통 공개되어 있으니 어떤 알고리즘을 쓰느냐를 비밀로 할 필요는 없습니다.
중요한 것은 사용자가 암복호화할 때 정한 암호화키, 복호화키가 중요합니다.
대칭키, 비대칭키 암복호화 개념
대칭키 암호화구조라고하면, 암호화할 때의 키와 복호화 때의 키가 동일한 암호화 방식을 말합니다.
비댕키 암호화구조라고하면, 반대곘죠... 암호화키와 복호화키가 서로 다른 암호화 방식입니다.
대칭키 암호화
암호화키와 복호화키가 같다는 것은 키가 하나라는 뜻이지요. 그리고 이것은 절대 알려지면 안되기 때문에 비밀키라고 합니다.
암호화할 때와 복호화할 때 같은 키를 요구하는 알고리즘을 대칭키기반 암호 알고리즘이라고 하고 DES, 3DES, SEED, AES 등 다양한 알고리즘이 있습니다. 이들 알고리즘들은 각각 암호화하는 방식이 다르고 반복 단계(라운드)가 달라 암호강도가 다를 뿐, 키의 관점에서보면 암호화할 때와 복호화 할 때 같은 키를 요구하는 것은 동일합니다.
대칭키는 비대칭키구조보다 빠른 속도록 암복호화 하는 장점이 있지만, 상대방한테 내가 정한 비밀키가 무엇인지 알려줘야 합니다. 알려주다 보면 해커에게 노출되기 때문에 암호화 해봤자 키가 노출되어 기밀성이 확보되지 않는 것이죠. 키를 전달해주는 것이 중요해져서 키교환을 안전하게 할 수있는 키교환알고리즘이 함께 사용되기도 합니다.
비대칭키 암호화
비대칭키는 암호화키와 복호화키가 서로 다르기 때문에 대칭키하고 사용방법이 조금 다릅니다.
암호를 하는 사람은 먼저 키 생성을 합니다. 이 때 키1쌍(개인키/공개키)이 생성되고 이 둘의 키만이 서로 암호화와 복호화를 가능하게 해줍니다.그리고 개인키는 자신만이 소유하고 절대 외부에 노출하지 않습니다. 공개키는 나와 암호통신을 하고자 하는 사람에게 얼마든지 제공할 수 있습니다. RSA, ECC 등의 알고리즘이 있죠.
영수가 철수에게 비대칭키를 이용하여 안전하게 데이터를 전송하는 과정을 살펴보자.
철수는 개인키와 공개키를 가지고 있는 상태에서, 철수의 공개키는 아무나 제공받을 수 있죠. 영수는 철수의 공개키를 이용해서 원문을 암호화하여 전송하면, 해당 공개키의 쌍이 되는 개인키는 오직 철수만이 가지고 있어서 철수만이 복호화 가능합니다.
반대로, 철수도 영수에게 암호문을 보내고 싶으면 영수(수신자)의 공개키를 이용해서 암호화 후 전송하면 해당 공개키의 쌍인 개인키는 영수만이 가지고 있어 영수만 복호화 가능합니다.
이렇게 하면, 대칭키방식처럼 비밀키를 공유하다가 키가 노출되는 문제를 방지할 수 있습니다.
그렇다면, 대칭키를 쓸 이유가 없지 않나요?
대칭키방식은 비대칭키방식에 비해서 속도가 빠릅니다. 간단한 데이터는 모르겠지만 대용량 파일을 암호화 전송할 때 비대칭키방식은 비효율적이겠죠.
대칭키와 비대칭키 방식의 혼합 활용
각각의 장단점이이 있으니 이 둘을 합하여 장점들을 활용해서 많이 사용합니다.
대표적인 것이 SSL 프로토콜입니다. 네트워크 상에서 암호화 통신을 하기 위한 프로토콜이지요.
HTTPS에 적용되어 있구요.
<출처 : https://www.ibm.com 그림 편집>
속도가 빠른 대칭키 암호화에 사용할 비밀키를 생성하고 이 비밀키를 비대칭키를 사용하여 안전하게 교환하는 것이 핵심입니다. 비밀키 교환이 되면 그 다음부터는 빠른 속도를 위해 대칭키알고리즘을 사용하여 통신을 하게 됩니다.
세션을 새로 생성할 때마다 새로운 비밀키를 생성하여 교화하기 때문에 비밀키도 세션마다 변경됩니다. 이렇게 세션에만 유효하게 사용하는 경우를 세션키라고 하기도 하죠.
대칭키 vs 비대칭키 방식 비교
위에서 언급한 것을 표로 비교하면 아래와 같습니다.
구분 | 대칭키 | 비 대칭키 |
키 관계 | 암호화키 = 복호화키 | 암호화키 ≠ 복호화키 |
키 전송 | 비밀키 전송 필요 | 비밀키 전송 불필요 |
키 갯수 | n(n-1)/2 | 2n |
장점 | 고속, 경제성 높음 | 키 분배 및 관리용이 |
단점 | 키 분배 및 관리불편 | 저속, 경제성 낮음 |
그리고, 비대칭키 암호화 개념을 이해하면 이어서 이해할 수 있는 것이 많습니다.
비대칭키방식의 암호화를 반대로 사용하면 전자서명이 되고, 공인인증서, 블록체인 등 많은 부분에 응용됩니다.