암호 알고리듬

From Hidden Wiki
Jump to navigation Jump to search

컴퓨터에서 쓰이는 암호알고리듬.

개요

컴퓨터가 발달하면서 이전에는 군용이나 중대한 사업용으로만 쓰이던 암호가 일상 생활에도 널리 활용되게 되었다. 단순한 개인 게시판을 시작으로 대형 DBMS까지 다양한 분야에서 암호학이 실제로 쓰이며 개인정보 보호와 악의적 공격자의 공격으로 인하여 데이터가 누출되었을 때 중요한 자료들을 바로 가져갈 수 없도록 처리하는 역할을 한다.


암호의 분류 방법

크게 암호는 2가지로 나눌 수 있다. 대칭형 암호비대칭형 암호로 이 구분은 암호화에 사용하는 Key값과 복호화에 사용하는 값이 같은지 다른지를 기준으로 구분한다. 통상적으로 대칭형 암호는 비공개키 암호에 사용되며 비대칭형은 공개키 암호에 사용된다. 이와는 다르게 블럭 암호와 스트림 암호로 구분하기도 한다. 이 구분은 일정 비트수(단위, 또는 블럭)를 암호화 하는 방식이며 스트림 암호는 연속적인 데이터를 암호화 하는 방식이다.

특징

대칭형 암호

현재 쓰이는 암호방식에서 대표적인 암호화 방식은 현 미국 표준 방식인 AES가 있다. 그 외에는 RC4, Twofish, Serpent, Blowfish, CAST5, 3DES, and IDEA 등이 있다. AES는 현재 일반인들이 쉽게 접근할 수 있는 암호화 방식들 중에서 충분히 안전성이 있다고 알려진 암호로 암호화 키와 복호화 키가 동일하다. 즉, ABCDE라는 문자열을 QWERTY라는 키로 암호화 했으면 복호화도 반드시 QWERTY로 해야한다. 대칭형 암호는 Feistel Network / S-Box를 통하여 블럭 암호로 주로 만들어진다. 대칭형 암호를 공격하는 방식에는 Known-PlainText, Chosen-PlainText, Differential, Linear등의 방식이 있으며, AES의 경우 이러한 방식을 통한 공격에 대해서는 아직 알려진게 없음으로 안전하다고 알려져있다.

비대칭형 암호

비대칭형 암호는 정상적인 사용을 위해서는 2개의 키가 필요하다. 이 중에서 하나의 키는 반드시 공개되어야 통상적인 사용이 가능함으로 공개키 암호라고도 불린다. 즉, 2개의 키 중에서 1개는 개인이 보호하고 다른 1개는 일반 대중이 접근할 수 있다. 우리가 쓰는 공인인증서 역시 비대칭형 암호의 대표적인 예. 대표적인 비대칭형 암호에는 Diffie-Hellman 키교환, DSS, ElGamal, ECC, RSA 등이 있다.

단방향 암호

주로 Hash형으로 딱히 복호화가 불가능하기에 암호로 취급하기에는 애매한 구석이 있다. 단, 정말로 그 누구도 이 정보를 복호화하는것을 원하지 않는다면 가능한 단방향 암호로 하는것이 좋다. 최소한 SHA-3를 쓰는 것이 좋다. 나머지는 취약점이 발견된 상태며, 특히 MD5는 단시간 내에 충돌값을 찾아낼 수 있는 지경에 이르렀다.[* 이전에는 여기에 "복호화가 가능한 수준"이라고 언급되어 있었는데, MD5 자체는 해시 함수이기때문에 이는 적절하지 않은 표현이다. 출력값의 길이가 제한된 모든 해시 함수는 비둘기집의 원리에 의해 충돌값이 반드시 발생할 수 밖에 없다. 따라서 해시값을 가지고 원문을 복원하는 것은 불가능하다는 것은 수학적으로 증명되어 있다. 중학교 수준의 수학만 가지고도 설명할 수 있다(...). MD5가 위험하다는 것을 쉽게 예를 들어 설명하자면, <평문1>을 해시화했을 때 ABCD가 나온다면, ABCD라는 해시값을 반환하는 원래 평문의 여러 쌍을 예상보다 쉽게 찾을 수 있다는 의미이다. 이것이 문제가 되는 것은 MD5는 주로 파일의 무결성 검사를 위해 사용하기 때문이다. 공격 코드를 포함하지만 원래 MD5 해시값과 같은 바이너리를 비교적 손쉽게 만들 수 있다는 뜻이다. 물론 아직까지는 엄청난 연산이 필요하지만, 제곱의 기하급수적 증가를 생각해 보면 10비트만 줄여도 계산량은 2^10분의 1로 줄어든다! 쉽게 말하면 100만년3906년으로 줄어드는 것이다. 이런 문제를 줄이기 위해 SHA-3은 스폰지 펑션, 즉, 원문의 길이에 따라 해시값의 길이가 예측 불가능하게 바뀌는 함수를 내장하고 있다.]

공격 방법

사실 암호는 보안의 시작이자 끝이다. 즉, 악의적인 공격자는 암호를 해독하려 하고 그것을 지키려는 사람은 악의적 사용자는 복호화를 할 수 없지만 올바른 정보가 있을 경우에는 올바른값을 돌려주려 노력한다. 즉, 물고 물리는 전쟁이다. 이러한 전쟁의 승자는 거의 대부분 악의적 사용자로 그 이유는 참으로 단순하게도 전수조사 라는 극악의 카드가 있었기 때문이다. 전수 조사(Brute Force Attack)은 모든 사용 가능한 키 값을 일일히 대응시켜 올바른 값을 돌려주기를 기다리는 방식으로 사실 모든 암호는 이 공격 방법을 이겨낼 수 없다. 현재 사용하는 암호 방식들은 이러한 전수조사에서 충분히 긴 시간동안의 연산이 필요하여 실질적으로 유효한 정보를 가져갈 수 없다라는 판단이 선 암호 방식들이다. AES도 전수조사가 가능해지면 답이 없다. 실제로 분산 컴퓨팅을 동원하여 AES-128을 뚫은 사례가 있기도 하고 과거에 사용된 DES[* 64비트이다]도 당시에는 엄청난 시간이 필요했으나 지금은 아무리 뻗대어도 몇분이면 털릴정도니.... 즉, 시간이 가면서 컴퓨터의 연산능력이 강해질 수록 필요한 암호키 비트수는 증가한다. 현재는 128비트도 안전하다고 보기 힘들다라는 입장이며 정말로 중요한 정보는 192비트 이상의 사용을 권장한다.[* 하지만 AES-256에 대한 취약점이 AES-128보다 먼저 공개되긴 했다. 다만 그 취약점이라는게 전수조사보다 겨우 조금 나은 수준의 공격방법이라 128비트보다는 튼튼하다] 그 외에도 부채널 공격(Side Channel Attack), Linear, Differential, Boomerang, Mod n, Related-key, Slide Rotational, Timing, XSL, Interpolation, Partitioning 등 매년 관련 논문들이 수십 수백편씩 나온다. [관련 논문이 모음인데] 거의 매일 몇편씩 올라오고 이중에 약 40%가 공격 방법에 대한 논문이라니...

암호의 종류

  • 공개 열쇠 암호: 암호화는 공개 열쇠로, 암호 해독은 개인 열쇠로 한다. 한 쌍의 공개 열쇠와 개인 열쇠가 짝을 이루고 있다.
    • RSA 암호: 암호화와 전자 서명이 모두 가능하다.
    • 전자 서명: 개인 열쇠로 전자 서명을 남길 경우 짝이 되는 공개 열쇠로 짝이 되는 개인 열쇠인지 검증할 수 있다. 공인인증서에서도 쓰이는 방식으로 매우 안전하지만 공인인증서는 열쇠 관리가 허술하여 문제가 있다.(자물쇠는 튼튼하지만 열쇠를 현관 앞에 놓아두는 꼴)
    • 전송 계층 보안(TLS, SSL): 웹상의 데이터 전송시 암호화해서 전송하는 기술. 주소 창에 https로 표시된다. 토르아이투피도 유사한 기술을 사용한다.
  • 암호화 해시 함수: 해시 함수는 크기가 일정하지 않은 큰 데이터들을 특정 함수에 넣어 일정한 크기의 작은 데이터들로 만드는 기술로, 데이터들의 목록을 만들고 검색을 쉽게 하기 위하여 사용한다. 암호화 해시 함수는 해시 함수에서 나온 해시 값으로부터 원래의 입력 값을 추정할 수 없게 설계한다. 따라서 비밀번호 암호화 등에 사용된다.