누군가 이리 선구적으로 정리해 주시니 후발자는 감사할 따름입니다.(꾸뻑!)
암호(Cryptography)
메시지를 해독 불가능한 형태로 변환하거나 또는 암호화된 메시지를 해독 가능한 형태로 변환하는 기술을 말한다
평문(Plaintext)
해독 가능한 형태의 메시지
암호문(Ciphertext)
해독 불가능한 형태의 메시지
암호화(Encryption)
평문을 암호문으로 변환하는 과정
복호화(Decryption)
암호문을 평문으로 변환하는 과정
대칭키 암호(또는 비밀키 암호)
암호화키와 복호화키가 같은 암호
비대칭키 암호(또는 공개키 암호)
암호화키와 복호화키가 다른 암호
대칭키 암호는 암⋅복호화를 처리하는 방식에 따라 메시지를 블록단위로 나누어 처리하는 블록암호와 메시지를 비트단위로 처리하는 스트림암호로 분류한다
엔디안(Endian)
컴퓨터 메모리의 바이트를 배열하는 순서.
암호 알고리즘 구현 시에 중요하게 고려되어야 할 문제인데, 대부분의 암호 알고리즘이 비트 단위 연산을 처리하기 때문에, 바이트 배열이 서로 맞지 않으면 같은 알고리즘으로 같은 메시지를 암호화하더라도 서로 다른 암호문을 생성할 수 있다.
빅 엔디안(Big-endian)
컴퓨터 메모리의 바이트를 배열하는 순서가 큰 단위가 앞에 나오는 엔디안
ex) JVM
리틀 엔디안(Little-endian)
컴퓨터 메모리의 바이트를 배열하는 순서가 작은 단위가 앞에 나오는 엔디안
ex) x86 아키텍처
미들 엔디안(Middle-endian)
빅 엔디안, 리틀 엔디안 두 경우에 속하지 않거나 둘 모두를 지원하는 엔디안
패딩(Padding)
블럭암호 처리 방식에서 블럭단위로 메세지를 나눌 때 부족한 부분을 채워주는 방식
ex) 300비트 메세지를 128비트 블럭으로 나눌경우
300 = 128 + 128 + 44(128비트에서 84비트가 부족. 84비트를 채워줘야함 => padding)
- 암호화 알고리즘 분류
[암호화 알고리즘 분류] |
DES
가장 오래되고, 세계적으로 가장 널리 사용되는 고전적 암호화 알고리즘이다. 파일이나 패킷을 암호화할 때 많이 사용된다. 하지만, 64비트 입력 블록과 56비트 짧은 비밀키를 사용하기 때문에, 더 이상 안전하지 않다고 간주하고 있다. 그러나, 국가 기밀을 다룰 정도로 극히 중요한 보안이 아니라면, 여전히 가장 널리 사용되는 알고리즘이다.
3-DES
DES를 3번 반복해서 암호화한다. 보안성이 향상되고, 그 만큼 성능은 떨어진다.
AES
미국 NIST에서 공모해서 표 준화한 새로운 알고리즘이다. 128비트 입력 블록을 도입함으로써, 보안성을 향상했으며, 최근에 세계적으로 널리 사용되는 알고리즘이다.
SEED
KISA 주관으로 ETRI와 함께 국내에서 만들어진 알고리즘이다. 역시, 128비트 입력 블록을 사용하고 있고, 국제 표준에 부합하는 알고리즘이다.
ARIA
NSRI 에서 만든 알고리즘이다. SEED가 민간에서 사용할 목적으로 만들어진 것에 반해, ARIA는 공공에서 사용할 목적으로 만들어졌다. 비밀키 규격이 AES와 동일하다.
MASK
IT 환경에서 실용적인 목적으로 사용하기 위해서 코드소프트에서 개발한 알고리즘이다. 기존의 알고리즘이 문자코드(CharSet)를 전혀 고려하지 않았기 때문에, 암호문의 CharSet이 깨지고, 길이도 블록 단위로 패딩되어 늘어나는 문제점을 보완하기 위해 개발되었다.
길이가 블록 단위로 패딩되는 문제점 때문에, 블록(Block)이 아닌, 스트림(Stream) 알고리즘을 채택하였고, 안시(ANSI)와 유니코드(Unicode)를 상호 분석하여 문자코드(CharSet)가 깨지지 않도록 하였다.
스트림 알고리즘이 블록 알고리즘에 비해 간단하기 때문에, 동적으로 비밀키를 생성하는 키 스트림 알고리즘으로 보안성을 보강했다.
스트림 알고리즘이 블록 알고리즘에 비해 간단하기 때문에, 동적으로 비밀키를 생성하는 키 스트림 알고리즘으로 보안성을 보강했다.
암호화 알고리즘과 혼동되는 용어들
용어 | 분류 | |
MD5 | 해쉬 알고리즘 (Hash Algorithm) | 암호화 알고리즘이 아니라, 원문에서 엑기스를 뽑아내는 것이다. 즉, digest code를 생성해 내는 것이다. 굳이 암호화 알고리즘이라고 우기면, 단방향 암호화 알고리즘 정도로 정의할 수 있을 것이다. 단방향이기 때문에, digest code로 원문을 복원할 수 없다. 즉, 암호화만 가능하고, 복호화는 불가능하다. (사용예) 유닉스 passwd file 대용량 파일 (CD 이미지 등) 다운로드 check sum |
UUENCODE | 텍스트 인코딩 | 암호화가 아니라, 단순 인코딩이다. 즉, encrypt가 아니라, encode인 것이다. 바이너리를 텍스트 아스키 코드로 인코딩하는 것이다. (사용예) 이메일 첨부파일을 변환할 때 사용했다. 인터넷 초창기에는 uuencode 명령어로 첨부파일을 직접 변환하곤 했었다. (이메일 수신한 사람은 uudecode로 원복) |
BASE64 | 텍스트 인코딩 | uuencode 처럼 바이너리를 텍스트 아스키 코드로 인코딩하는 것이다. (사용예) HTTP 주소(URL)에 한글이 포함될 때, 아스키로 변환해서 전송 암호화된 바이너리 데이터를 아스키로 변환할 때 사용 |
SSL (Secure Socket Layer) | 보안 통신 프로토콜 | 암호화 알고리즘이 아니라, 암호화 알고리즘을 통신 상에서 응용한 보안 프로토콜(규격)이다. 네트워크 계층상에서, TCP-IP layer와 Application layer 중간에 위치 |
SSH (Secure Shell) | 보안 쉘 | 유닉스 계열의 시스템에 원격 접속할 때, 기존에 Telnet 이 보안상 안전하지 않기 때문에, 인증과 암호화 기능을 보완한 새로운 쉘. 네트워크 계층상에서, Application layer 에 위치 |
한국인터넷진흥원(SEED 소스코드 매뉴얼 v1.0)