대칭키 vs 비대칭키 암호화

기타 보안 이야기 2018. 1. 23. 17:52 Posted by 낭만이삘삘

보안책을 보면, 늘 앞에 나오는 것이 암호화죠.

암호화는 보안의 3요소(기밀성/무결성/가용성) 중 기밀성을 중점적으로 제공합니다.


기밀성을 간단히 얘기하면, 허가받은 사용자만이 접근하게 하는 것이죠. 암호화는 복호화키를 알고 있는 사람만이 접근할 수 있게 하기 때문에 기밀성을 제공합니다.


암호는 IT환경에서 안쓰이는 곳이 거의 없습니다.

예를 들면, 인터넷뱅킹을 한다고 하면 ID/PWD 로그인을 하더라도 해당 정보가 암호화 되어 서버로 전송됩니다. 공인인증서를 쓸 때도 사용되구요, 단순히 웹페이지를 접근할 때도 https를 쓰는 환경이라면 모든 컨텐츠를 암호화되어 송수신되죠. 계좌번호나 중요한 정보 입력할 때는 스마트폰이나 피씨 등 클라이언트에서부터 중요정보유출을 방지하기 위해 입력 즉시 암호화되지요. 


암/복호화를 설명할 때 스테가노그래피 등 암호의 역사부터 얘기하는데요, 오늘은 다 생략하고 알고리즘의 상세내용도 덮고, 대칭키 기반 알고리즘과 비대칭키 기반 알고리즘... 두 가지의 개념이해, 장단점 이해(암기필요없음...이해하면됨)를 해보시죠. 그러면 어떻게 활용되는지도 함께 이해할 수 있습니다.

그리고, 비대칭키기반 암호 알고리즘을 잘 이해하면 가상화폐에서 사용되는 블록체인의 원리를 이해하는데 많은 도움이 됩니다.


암복호화 개념

암호화는 평문을 타인이 못알아보도록 만드는 과정입니다. 



 

복호화는 암호문을 다시 평문으로 만드는 과정이겠죠.





암복호알고리즘은 보통 공개되어 있으니 어떤 알고리즘을 쓰느냐를 비밀로 할 필요는 없습니다.

중요한 것은 사용자가 암복호화할 때 정한 암호화키, 복호화키가 중요합니다.

 


대칭키, 비대칭키 암복호화 개념

대칭키 암호화구조라고하면, 암호화할 때의 키와 복호화 때의 키가 동일한 암호화 방식을 말합니다.

비댕키 암호화구조라고하면, 반대곘죠... 암호화키와 복호화키가 서로 다른 암호화 방식입니다.



대칭키 암호화


암호화키와 복호화키가 같다는 것은 키가 하나라는 뜻이지요. 그리고 이것은 절대 알려지면 안되기 때문에 비밀키라고 합니다.


암호화할 때와 복호화할 때 같은 키를 요구하는 알고리즘을 대칭키기반 암호 알고리즘이라고 하고 DES, 3DES, SEED, AES  등 다양한 알고리즘이 있습니다. 이들 알고리즘들은 각각 암호화하는 방식이 다르고 반복 단계(라운드)가 달라 암호강도가 다를 뿐, 키의 관점에서보면 암호화할 때와 복호화 할 때 같은 키를 요구하는 것은 동일합니다.


대칭키는 비대칭키구조보다 빠른 속도록 암복호화 하는 장점이 있지만, 상대방한테 내가 정한 비밀키가 무엇인지 알려줘야 합니다. 알려주다 보면 해커에게 노출되기 때문에 암호화 해봤자 키가 노출되어 기밀성이 확보되지 않는 것이죠. 키를 전달해주는 것이 중요해져서 키교환을 안전하게 할 수있는 키교환알고리즘이 함께 사용되기도 합니다.



비대칭키 암호화


비대칭키는 암호화키와 복호화키가 서로 다르기 때문에 대칭키하고 사용방법이 조금 다릅니다.

암호를 하는 사람은 먼저 키 생성을 합니다. 이 때  키1쌍(개인키/공개키)이 생성되고 이 둘의 키만이 서로 암호화와 복호화를 가능하게 해줍니다.그리고 개인키는 자신만이 소유하고 절대 외부에 노출하지 않습니다. 공개키는 나와 암호통신을 하고자 하는 사람에게 얼마든지 제공할 수 있습니다. RSA, ECC 등의 알고리즘이 있죠.




영수가 철수에게 비대칭키를 이용하여 안전하게 데이터를 전송하는 과정을 살펴보자.

 


철수는 개인키와 공개키를 가지고 있는 상태에서, 철수의 공개키는 아무나 제공받을 수 있죠. 영수는 철수의 공개키를 이용해서 원문을 암호화하여 전송하면, 해당 공개키의 쌍이 되는 개인키는 오직 철수만이 가지고 있어서 철수만이 복호화 가능합니다.


반대로, 철수도 영수에게 암호문을 보내고 싶으면 영수(수신자)의 공개키를 이용해서 암호화 후 전송하면 해당 공개키의  쌍인 개인키는 영수만이 가지고 있어 영수만 복호화 가능합니다.


이렇게 하면, 대칭키방식처럼 비밀키를 공유하다가 키가 노출되는 문제를 방지할 수 있습니다.


그렇다면, 대칭키를 쓸 이유가 없지 않나요?


대칭키방식은 비대칭키방식에 비해서 속도가 빠릅니다. 간단한 데이터는 모르겠지만 대용량 파일을 암호화 전송할 때 비대칭키방식은 비효율적이겠죠.



대칭키와 비대칭키 방식의 혼합 활용


각각의 장단점이이 있으니 이 둘을 합하여 장점들을 활용해서 많이 사용합니다.


대표적인 것이 SSL 프로토콜입니다. 네트워크 상에서 암호화 통신을 하기 위한 프로토콜이지요.

HTTPS에 적용되어 있구요.

<출처 : https://www.ibm.com 그림 편집>



속도가 빠른 대칭키 암호화에 사용할 비밀키를 생성하고 이 비밀키를 비대칭키를 사용하여 안전하게 교환하는 것이 핵심입니다. 비밀키 교환이 되면 그 다음부터는 빠른 속도를 위해 대칭키알고리즘을 사용하여 통신을 하게 됩니다.


세션을 새로 생성할 때마다 새로운 비밀키를 생성하여 교화하기 때문에 비밀키도 세션마다 변경됩니다. 이렇게 세션에만 유효하게 사용하는 경우를 세션키라고 하기도 하죠.



대칭키 vs 비대칭키 방식 비교


위에서 언급한 것을 표로 비교하면 아래와 같습니다.


구분

대칭키

비 대칭키

키 관계

암호화키 = 복호화키

암호화키 복호화키

키 전송

비밀키 전송 필요

비밀키 전송 불필요

키 갯수

n(n-1)/2

2n

장점

고속, 경제성 높음

키 분배 및 관리용이

단점

키 분배 및 관리불편

저속, 경제성 낮음



그리고, 비대칭키 암호화 개념을 이해하면 이어서 이해할 수 있는 것이 많습니다.

비대칭키방식의 암호화를 반대로 사용하면 전자서명이 되고, 공인인증서, 블록체인 등 많은 부분에 응용됩니다.


리눅스나 유닉스계열 서버의 접근통제 정책을 얘기할 때 iptables와 tcp wrapper를 많이 언급하고 그 둘의 장단점을 비교하지요. 보안기사에서도 시험에 종종 나오구요.


tcp wrapper는 inetd 데몬에서 처리하는 접근제어이고, 여기서는 iptables로 많이 알려진 기능을 지원해주는 netfilter의 개념을 설명하고자 합니다.


netfilter 개요

리눅스 커널소스를 보면, 네트워크관련 소스가 전체의 1/3 정도를 차지합니다. 그만큼 네트워크의 비중이 높다는 뜻인데요, 그 중에서도 netfilter는 리눅스 커널모듈로서 네트워크 패킷을 처리하기 위한 프레임워크입니다.


주요 제공 기능

  • NAT(Network Address Translation) : 사설IP와 공인IP를 변환해주거나 포트변환 등
  • Packet filtering : 특정 패킷을 차단 또는 허용하는 기능. 서버의 접근제어 또는 방화벽기능 구현 가능
  • packet mangling : 필요시 패킷 헤더의 값을 변경

netfilter 구조
netfilter는 커널에서 패킷을 처리하는 과정에 필요하면 룰에 따라 처리해줄 수 있도록 5군데의 후킹(hook)지점을 제공합니다. 패킷 처리과정에 내가 원하는 지점에서 원하는 패킷처리를 할 수 있도록 지원하는 것이지요.





위에서 말한 5곳의 후킹지점은 위 그림의 kernel space에 해당하는 PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING 입니다.


각 후킹지점의 주요기능을 간단하게만 설명하겠습니다.
  • PREROUTING : 인터페이스를 통해 들어온 패킷을 가장 먼저 처리. 목적지 주소의 변경(DNAT)
  • INPUT : 인터페이스를 통해 로컬 프로세스로 들어오는 패킷의 처리(즉, 패킷을 받아 처리할 프로세스가 내 시스템에서 동작하는 경우). INPUT에서 패킷 처리(차단/허용) 후 user space의 프로세스로 전달
  • OUTPUT : 해당 프로세스에서 처리한 패킷을 밖으로 내보내는 패킷에 대한 처리(차단/허용)
  • FORWARD : 다른 호스트로 통과시켜 보낼 패킷에 대한 처리(차단/허용). 방화벽이나 IPS 등과 같이 내가 수신하는 패킷이 아니고 지나가는 패킷을 처리
  • POSTROUTING : 인터페이스를 통해 나갈 패킷에 대한 처리. 출발지 주소의 변경(SNAT)

iptables을 이용하여 netfilter에 룰을 넣자
커널에서 동작하는 netfilter에 내가 원하는 접근통제를 할 수 있도록 룰을 넣어야 할텐데 어떻게 할까요? iptables를 이용하면 됩니다. iptables는 netfilter에 룰을 넣을 수 있는 단순한 user space의 실행프로그램입니다.
iptables의 구체적 사용방법은 별도로 한 번 검색해보시구요, 여기서는 간단한 사용법만 보겠습니다.

iptables commnad 종류
  • -A : add rule to chain
  • -D : delete rule from chain
  • -I : insert rule
  • -R : replace rule
  • -F : flush all rules
  • -L : list all rules
  • -N : create a new chain
  • -X : delete user defined chain
  • -P : set default target

아래와 같이 실행하면 현재 netfilter의 룰을 조회할 수 있습니다.

> iptables -L

예를 들어, 현재 서버에 telnet 서비스(tcp 23)를 차단하고 싶다면 아래와 같이 실행하면 됩니다.

> iptables -A INPUT -p tcp --dport 23 -j DROP

그 다음 "iptalbes -L"을 실행하여 룰을 조회하면 위의 룰이 추가된 것을 볼 수 있고, 현재 서버에 telnet서버가 떠있건 말건 외부에서 현재 서버로 telnet(tcp 23) 접속은 차단됩니다.

(iptables 사용법은 반드시 다른 자료를 참고하여 더 숙지해주세요)


netfilter 활용 예시
두 가지 활용에 대해서 설명하겠습니다. 첫째는 서버입장에서 서버로 들어오고 나가는 네트워크 패킷에 대한 통제를 하는 경우(내부방화벽), 두번째는 netfilter를 이용하여 네트워크기반의 방화벽을 구현하는 경우입니다.

① 서버의 내부 방화벽(접근통제)

서버로 들어오는 네트워크 패킷 또는 서버에서 나가는 네트워크 패킷을 통제하고자 할 경우 아래 그럼처럼 INPUT과 OUTPUT 필터에 정책을 적용하여 구축가능합니다.

INPUT은 서버에서 동작하는 네트워크 프로세스에게 전달되기 전에 패킷을 처리하고, OUTPUT은 네트워크 프로세스에서 나가는 패킷을 처리합니다.



② 네트워크기반의 방화벽 구현

대부분 로컬 시스템으로 들어오거나, 로컬 시스템에서 나가지 않는 패킷을 핸들링하는 경우는 드물죠. 나의 패킷은 아니지만, 지나가는 패킷을 통제해야하는 경우가 있는데 방화벽이나, IPS 등이 대표적입니다.
방화벽의 기본적인 기능을 가진 경우 출발지IP/출발지PORT/목적지IP/목적지PORT/프로토콜 등으로 지나가는 패킷을 정책에 따라 허용 또는 차단을 하지요. 이러한 룰을 iptables를 이용하여 netfilter의 FORWARD에 적용하면 됩니다. 참고로, NAT를 구현하기 위해서는 PREROUTING과 POSTROUTING를 이용하면 됩니다.


 
FORWARD를 이용하여 방화벽을 구현한다는 의미를 좀 그려봤습니다.(펜으로 직접 그려봤는데 참 허접하네요..ㅎㅎ)


장비에 포트 2개가 있다면 지나가는 패킷이므로 한 포트로 들어가서 다른 한 포트로 나갈것이고 그 과정에 FORWARD에서 패킷을 허용한 것만 나갈 수 있겠죠.



정리


기억해 둘 것만 정리해보겠습니다.
  • 커널모듈로 네트워크 패킷을 처리할 수 있는 프레임웍이 있는데 그걸 netfilter라고 하는구나.
  • netfilter는 INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING이라는 5개의 hook(후킹)지점을 제공하는구나.
  • INPUT, OUTPUT은 내 서버의 로컬 프로세스로 전달하거나 로컬 프로세스에서 나가는 패킷들에 대한 처리를 할 수 있어서 내 서버를 보호하기 위한 접근통제에 사용할 수 있구나.
  • FORWARD는 방화벽이나 IPS 등과같이 나의 시스템과는 관련은 없지만 지나가는 패킷을 처리할 때 네트워크 접근통제 정책을 설정할 수 있구나. 그리고 PREROUTING와 POSTROUTING은 NAT할 때 사용할 수 있구나.
  • netfilter에 내가 원하는 정책을 넣어야 하는데 그럴 때 사용하는 프로그램이 iptables라는 것이구나. iptables은 그냥 룰을 넣고 조회하는 단순한 프로그램이구나.
  • netfilter는 커널에서 통제를 하기 때문에 tcp wrapper처럼 어플리케이션 레벨에서 접근통제하는 것보다 우선순위가 높고 보안성이 우수하겠구나. 





'네트워크 보안 이야기' 카테고리의 다른 글

가상랜 VLAN  (0) 2017.01.21
L2 스위치, L3 스위치, L4 스위치, L7 스위치  (3) 2017.01.15
OSI 7 계층 vs TCP/IP 계층  (0) 2017.01.15
IPS vs IDS  (0) 2017.01.09

가상랜 VLAN

네트워크 보안 이야기 2017. 1. 21. 21:14 Posted by 낭만이삘삘

보통 기업 내부망 접근제어를 위해 VLAN(Virtual Local Area Network)을 많이 사용합니다. 망과 노드에 대해서 네트워크 트래픽을 분리하고 접근통제하기 위해 모든 것을 물리적으로 적용하면 훨씬 좋겠지만, 비용과 시간이 많이 들겠죠. 가상으로, 즉 논리적으로 망을 재구성할 수 있게 하는 것이 VLAN입니다.


VLAN 개념


VLAN은 물리적으로 혼재된 네트워크 노드들을 논리적으로 구성하여 워크그룹단위로 묶는 네트워크 표준입니다.

예를 들어, 기업내에서 부서별로 네트워크를 묶거나, 특정 업무에 관련된 PC들만 별도로 네트워크를 구성하는 등 필요에 따라 네트워크를 구성하거나 접근통제를 해야하는데 이럴 때 사용할 수 있는 것이 가상랜입니다.



<출처 : http://www.learncisco.net>


위 그림에서 VLAN2, VLAN3... 과 같이 VLAN옆에 붙은 숫자가 VLAN ID입니다. 같은 ID로 묶인 PC들이 같은 네트워크상에 있는 것입니다. VLAN이 없다면 그냥 다들 2개의 스위치에 연결된 상태이겠죠. 스위치에서 VLAN을 지원한다면 논리적으로 다시 구성할 수 있는 것입니다.

그러면 조금 더 자세히 들어가보겠습니다.


 IEEE 802.1Q


VLAN을 위한 표준입니다. Inter-Switch Link(ISL)은 시스코 스위치에서 지원하는 방식이고, IEEE 802.1Q가 표준입니다. 아래 그림은 802.1Q 태그에 대한 그림입니다.




<출처 : https://ciscohite.wordpress.com>


이 그림은 L2의 프레임입니다. DA, SA는 L2의 MAC주소인 일반적인 이더넷프레임에 파란색의 802.1Q VLAN TAG(4bytes)가 추가된 것입니다. OSI 7계층으로 보면 L2와 L3사이에 VLAN 계층이 하나 추가된거죠.


VLAN태그는 4바이트 이고, 그 4바이트는 두번째 라인처럼 구성되어 있습니다. 그중에 마지막 12bits에 해당하는 부분이 VLAN ID이고 12bits가 할당되어 0~4095까지 설정할 수 있죠.


VLAN TAG

  • TPID(16bits) : VLAN 프로토콜임을 나타내는 0x8100 값을 가집니다.
  • UP(3bits) : 우선순위로서 QoS에 활용합니다.0~7(3bits)까지 표현가능합니다.
  • CFI(1bit) : MAC주소가 Canonical Format인지 여부를 나타내는 플래그입니다. Non-Canonical format을 가지는 토큰링을 구분할 수 있습니다.
  • VLAN ID(12bits) : 가장 중요한 VLAN ID입니다. ID가 같은 PC들만 통신할 수 있습니다. 0~4095(12bits)까지 표현할 수 있습니다.


VLAN Trunk


스위치와 스위치 사이에 VLAN 프레임을 주고 받기 위한 통로를 트렁크(Trunk)라고 합니다.

 



서로 다른 스위치에 연결된 PC들을 같은 VLAN으로 묶을수도 있지요. 스위치간에 VLAN 구성에 대한 정보를 주고받기 위한 프로토콜을 VTP(VLAN Trunking Protocol)라고 합니다.




VLAN 구성방식


VLAN을 구성하는 대표적인 방법 3가지를 비교해보겠습니다.


 구분

 포트기반

MAC주소기반 

IP주소기반 

 개념

 스위치의 각 포트별로 구성

 MAC주소를 이용하여 구성

IP주소를 이용하여 구성

 Layer

 1계층

2계층 

3계층 

 장점

 구성하기가 쉬움

 VLAN변경시 물리적 변경없이 작업 가능

 PC의 물리적 위치와 관계없이 설정 가능

 단점

 VLAN변경시 물리적으로 포트를 변경하는 작업필요

 NIC추가 또는 변경 등 MAC주소 변경시 재설정 필요

 DHCP 사용 어려움



마무리


VLAN을 사용하면 논리적으로 네트워크를 재구성할 수 있기 때문에 비용이 절감되겠죠. 그리고 스위치 레벨에서 접근통제를 할 수 있어 보안성이 강화됩니다.

보안담당자로서는 보안성에 집중하면 될테구요. 시스템간에 접근제어를 해야할 때 VLAN 활용을 고려해보시고, 포트/MAC/IP 등 구성방식에 따라 보안성을 참고하여 선택하면 되겠습니다.