암호화

thumb
'''암호화'''(暗號化) 또는 '''엔크립션'''(encryption)은 특별한 지식을 소유한 사람들을 제외하고는 누구든지 읽어볼 수 없도록 알고리즘을 이용하여 정보(평문을 가리킴)를 전달하는 과정이다. 이러한 과정을 통해 암호화된 정보(암호문)를 낳는다. 이에 역행하는 과정을 '''해독''' 또는 '''디크립션'''(decryption)이라고 하며 이로써 암호화된 정보를 다시 읽을 수 있다.
암호화는 군사와 정부의 은밀한 대화를 위하여 오랫동안 이용되어 왔다. 암호화는 수많은 종류의 시민 체계의 정보를 보호하는 데 흔히 쓰이고 있다. 이를테면 CSI(Computer Security Institute)의 2007년 보고에 따르면 71%의 기업이 일부 데이터 전달을 위하여 암호화를 이용하며 53%가 일부 데이터 저장을 위해 암호화를 이용하는 것으로 조사되었다.
암호화하기 이전 데이터를 평문이라 하면, 암호화된 정보는 암호문이라고 한다. 암호화 엔진은 제 2차 세계 대전에 사용되었던 암호기 에니그마(Enigma)처럼 기계적 장치일 수도 있지만, 요즘은 대부분 컴퓨터 프로그램 형태로 만들어진다. 평문이 암호화 엔진으로 들어가면, 암호화 엔진이 암호문을 만들어 내는 방식으로 암호화가 진행된다. 
고전 암호의 한계는 암호화 알고리즘을 알아내면 암호문을 해독이 가능하다는 점이다. 이를 극복하는 현재 암호화 기술의 핵심은 임의의 문자열 값인 '암호화 키'이다. 적절한 암호화 키를 사용한다면 암호화 알고리즘이 노출되더라도 키 없이는 해독할 수 없다. 암호화 키의 동작은 수리 논리학의 '배타적 논리합' 연산에 따라 이루어진다. 이진법으로 표현한 수의 각 비트에 대한 가감산 결과를 비트 간 배타적 논리합 이라고 한다. 비트 간 배타적 논리합은 특정 비트의 반전 값이므로, 반복하면 원래 값이 된다. 
즉, 'P'라는 원문을 'K'라는 키 값을 이용해 연산하면 'P + K'라는 암호문이 되는 방식이라고 할 수 있다. 이 암호문을 K 키 값을 이용해 연산하면, (P + K) + K = P 원문 P로 복호화 할 수 있다.
=== 단방향 암호화 ===
단방향 암호화는 대표적으로 신원 증명과 인증 과정에서 사용된다. 예를 들어 비밀번호를 ‘wiki123’이라고 지정했을 때, 이를 암호화하여 ‘A3pnqq49.Hw’라는 아무런 유사성 없는 암호문을 만들어 낸다. 단방향 암호화의 특징은 역으로 변환하는 것이 불가능하고, 어떤 방법을 쓰더라도 암호문을 원래의 평문으로 되돌릴 수 없다는 것이다.
=== 비밀키 암호화 ===
비밀키 암호화는 말 그대로 비밀키를 사용하여 암호화와 복호화하는 과정을 가진다. 평문에 암호화 키 값을 이진수 연산 처리하여 암호문을 생성하고, 암호문을 받은 수신자는 동일한 암호화 키 값을 역으로 대입하여 암호문을 해독한다. 따라서 비밀키 암호화를 위해서는 송신자와 수신자 모두 동일한 암호화 키를 알고 있어야 한다.
=== 공개키 암호화 ===
공개키 암호화는 공개키와 개인키라고 불리는 서로 다른 두 개의 키를 사용한다. 앞선 비밀키 암호화 방식과 비교해보면 송, 수신자에게 공개된 공개키를 사용하여 암호화하는 점은 비슷하지만, 복호화는 개인키를 가진 사람만 할 수 있다는 점에서 차이가 생긴다. 조금 더 복잡해 보이는 해당 방식은 비밀키 암호화 방식보다 처리가 느리기 때문에 실제 암호화 시스템은 비밀키 암호화 방식과 공개키 암호화 방식을 혼합하여 구축된다.
암호화 방식은 간단한 형식부터 복잡한 형식까지 다양하게 존재한다. 따라서 어떤 종류의 암호화 방식이 항상 우수하다는 상위와 하위의 개념보다는, 보안 환경 및 경제성 등 필요한 상황에 따라 결정된다고 보는 것이 더 적합하다.
=== 데이터 베이스 암호화 ===
데이터 암호화를 위해서는 데이터 처리 방식에 따른 IT 시스템 계층 구조 별 암호화에 대한 이해가 필요하다.
==== IT 시스템 계층 구조 ====
'''Business Application''' :작은 단위의 응용 시스템을 묶어 큰 응용 시스템을 형성한 대형 정보 시스템
'''Web Application''' : DB 서버 연동을 이용하여 웹을 매개로 사용자에게 정보를 제공함
'''DBMS Procedure''' : DB 서버 연동을 이용하여 DB를 데이터 저장고로 사용하는 응용프로그램이 구성됨
'''DBMS Package''' : DB 서버 내부의 데이터 처리, DB 서버를 외부에서 활용할 수 있는 연동을 제공함
'''DBMS Engine''' : DB 시스템의 핵심 기능으로서 데이터가 DB 내에서 저장되거나 조회됨
'''Operating System''' : 서버나 기기를 구동하는 OS, 데이터를 포함한 파일이 물리적으로 저장됨
'''Network''' : 네트워크로 연결된 서버, 서버와 사용자 기기 사이에서 데이터가 전송 또는 수신됨
==== 각 계층 별 데이터 암호화 ====
'''Network 계층의 데이터 암호화''' 
Network 계층에서 암호화는, 물리적으로 분리되어 있는 송신자와 수신자 사이에서 안전한 암호화를 제공해줄 수 있다. 안전한 암호화를 위해서는 송신자와 수신자 사이에서 암호화 키를 안전하게 생성하고 관리해야 한다.
Network 계층에서는 서버와 클라이언트가 서로 교차 연결되어 데이터의 송신과 수신이 이루어진다. 공격자는 통신 채널을 도청하여 송수신 데이터를 수집, 데이터를 탈취할 수 있고, 이때 데이터를 보호하기 위해 송,수신자 사이의 통신 채널 자체를 암호화하거나, 필요한 정보를 지정하여 선택적으로 암호화한다. 전자의 경우에는 다소 비효율적일 수 있으나 안전성이 높다.
'''Operating System 계층의 데이터 암호화'''
모든 데이터는 컴퓨터에 저장될 때 파일의 형태로 저장되는데, OS 계층에서 암호화는 OS가 파일을 저장하는 과정에 암호화 단계를 추가하는 방식이다. HDD 등의 저장장치에 암호화 기능을 탑재하여 암호화와 복호화를 자체적으로 수행하거나 OS 파일 시스템이 암호화를 수행하며 저장되는 모든 파일을 암호화한다. 혹은 특정 파일만 암호화하여 저장 할 수도 있다.
OS 계층에서 암호화를 수행하면 DB나 애플리케이션은 암호화 처리를 고려하지 않아도 되므로, 기존 시스템에 적용할 때 번거로운 수정이나 변경이 필요하지 않다는 건 큰 장점이지만  대부분의 OS레벨 암호화 제품이 암호화 키를 사용자 기기나 서버의 내부에 저장하고, 세분화된 보안 정책 설정 및 접근 제어가 어렵다는 점 등의 한계 점도 있다.
'''DBMS Engine 계층의 데이터 암호화'''
DBMS Engine은 DB 서버의 내부에서 데이터의 입출력과 저장을 관리하는 핵심 모듈이다. 많은 DBMS 제품들은 자체적으로 암호화 기능을 제공한다. DB에 정보를 저장하거나 읽을 때 암호화 적용 전후로 동일한 동작을 하기 때문에, OS 계층 암호화 방법과 마찬가지로 기존 응용 프로그램은 수정할 필요가 없다는 것이 장점이다. 이러한 특징을 응용 프로그램에 대한 투명성이라 정의하며 TDE (Transparent Data Encryption)방식이라 부르기도 한다.
하지만 대부분의 TDE방식 암호화 제품은 복호화 된 데이터를 메모리에 두는 등 유출의 위험을 안고 있고, 키 관리 측면으로 보더라도 암호화 키가 데이터와 동일 저장소에 있기 때문에 보안이 완벽하다 할 수 없다. 따라서 DBMS Engine레벨의 암호화 제품을 적용 전 키 관리와 메모리 상 복호화 데이터 처리 등을 고려해야 한다.
'''DBMS Package 계층의 데이터 암호화'''
DBMS Package 계층에서는 외부 요청을 수신하고 엔진이 처리하도록 지시와 관리가 이루어진다. 이 계층에서 암호화는 보다 상위 계층의 애플리케이션은 수정하지 않아도 된다는 장점이 있다. DBMS 엔진은 이미 암호화된 데이터를 받고 처리하기 때문에 메모리 보안 위협 문제도 없고, 선택적으로 DB 테이블을 지정하여 암호화할 수 있기 때문에 성능 면에서도 우수한 방법이다.
DBMS Package계층 암호화 제품은 데이터가 처리될 때마다 암/복호화가 일어나 DB 서버에 부담을 줄 수 있다. 따라서 실제 환경에 적용할 때에는 적절한 방법을 선택 적용하여 서버 부담을 줄일 수 있는 방법을 제공해야 한다.
'''DBMS Procedure 계층의 데이터 암호화'''
DBMS Procedure 계층의 소프트웨어는 DBMS의 API를 외부에서 활용한다. 이 계층에 암호화를 적용하려면, DB 서버와 정보를 주고받을 때 암호화를 지원하는 별도의 API를 사용하여 암호화를 처리해야 한다. 애플리케이션과 DB 서버와 별도 시스템에 존재한다면 네트워크 계층 암호화를 추가로 적용할 수 있다.
기존 DBMS API를 대신해 암호화 API를 호출하여 DBMS Package 계층 암호화가 가지는 모든 장점을 그대로 가지며, 암/복호화 연산 처리 부담이 DB 서버에 전가 되지 않는다는 장점이 있다. 네트워크 환경에서도 네트워크 구간에서 발생하는 보안 위협에 대응할 수 있다는 것도 큰 장점이다. 하지만 어느 정도의 응용프로그램 수정이 필요하다는 단점도 있다.
'''Web Application 계층의 데이터 암호화'''
온라인 정보 시스템은 Web 서버, Web Application 서버, DB 서버로 구성되는 multi-tier 구성되어있다. Web Application 서버는 Web 서버와 DB 서버를 중개하며 데이터의 흐름을 제어하는 역할을 맡는다.
DB 서버와 연결하는 부분의 기능은 DBMS Procedure의 애플리케이션과 같은 기능을 수행하기 때문에, 암호화가 이루어지는 위치만 다를 뿐,  이 계층에서 암호화 방법은 DBMS Procedure 계층 암호화 방법과 동일하며 동일한 장단점을 가진다.
'''Business Application 계층의 데이터 암호화'''
Business Application은 응용 프로그램들을 통합한 거대한 시스템인 경우가 많다. 내부 데이터 관리를 위해 DBMS를 채용하더라도 저장소를 관리하는 별도의 시스템 형태로 포함되어 있어, Business Application의 개발자가 DBMS를 직접 호출하거나 이용하는 것이 불가능하다.
이 계층 암호화를 위해서는 저장소 관리 서브 시스템을 수정하거나 보조 서브 시스템을 추가해야 한다. Business Application은 독자의 설계와 구현 원칙에 의해서 복잡하게 구현되므로, 새로운 서브 시스템을 추가하고 수정하는 일에 많은 노력과 비용이 소요된다. 장단점은 DBMS Procedure와 Web Application의 계층과 동일하다.  
=== 비정형데이터 암호화 ===
비정형 데이터는 고정된 필드에 저장되지 않는 데이터를 의미한다. 텍스트 문서를 제외하고 이미지, 동영상, 음성 데이터, 메신저로 주고 받은 대화 내용, 스마트폰에 기록되는 위치 정보 등이 해당한다. 기존에는 데이터 베이스에 저장되어 있는 개인정보만을 암호화 대상으로 생각했다면 최근에는 개인정보가 다수 포함된 비정형 데이터도 반드시 암호화가 필요하다.
2015년 12월에 행정자치부에서 배포한 개인정보보호 가이드라인(학원, 교습소편, 인사•노무편)에 따르면 개인정보처리자는 고유식별번호가 포함된 전자적 파일에 대해서 암호화하여 관리할 것을 명시하고 있다. ‘개인정보 보호법 제24조의2에’ 따르면 주민등록번호를 전자적으로 보관하는 경우에는 암호화하여 보관하여야 한다.
* 암호학
* 유명한 암호문의 목록
* 랜섬웨어
* Helen Fouché Gaines, “Cryptanalysis”, 1939, Dover. 
* David Kahn, ''The Codebreakers - The Story of Secret Writing'' () (1967)
* Abraham Sinkov, ''Elementary Cryptanalysis: A Mathematical Approach'', Mathematical Association of America, 1966. 
분류:암호학