AES 암호화

3GPP 2009. 6. 4. 14:57

AES는 Advanced Encryption Standard의 약자로 현재 미국의 표준 암호 알고리즘에 대한 공식 명칭이다.


AES 이전에 미국의 표준알고리즘으로는 DES와 3DES가 있었습니다. 이들의 뒤를 잊는 암호 알고리즘이 바로 AES이다.

1997년 1월2일 미국의 NIST(National Institude of Standard and Technology)에서 AES 선정계획을 공고했고 이를 본 전세계의 많은 암호학자와 연구소에서 암호알고리즘을 개발하여 제출했습니다.

이때 제출된 알고리즘들은 CAST-256, CRYPTION, DEAL, DFC, E2, FROG, HPC, LOK197, MAGENTA, MARS, RC6, Rijndael, SAFER+, Serpent, Twofish 등이 있습니다. 이 중 일부는 암호분석학자들에 의해 문제점이 노출되었고 일부는 성능상의 문제로 제외되어 1999년 4월경 AES후보 알고리즘은 모두 5개 (MARS, RC6, Rijndael, Serpent, and Twofish)로 좁혀지게 됩니다. 이후 컨퍼런스를 거쳐 2000년 10월 Rijndael(리즌댈 또는 라인돌이라고 읽습니다.) 이 AES로 선정되게 됩니다.


 Rijndael은 벨기에의 암호학자인 Joan Daemen과 Vincent Rijmen이 개발한 알고리즘으로 DES와 3 DES가 Feistel network 이었던 것과는 달리 substitution permutation network 구조를 가지고 있으며 하드웨어나 소프트웨어적으로 구현했을때 모두 좋은 성능을 보이는 특성을 가지고 있습니다. 구현이 쉽고 메모리를 적게 소모하는것도 장점으로 뽀히고 있죠


Rijndael은 암호알고리즘 분류 상 대칭형암호알고리즘으로 분류됩니다. 대칭형 암호알고리즘에도 두가지 종류가 있는데 Rijndael은 이중에서  Block암호알고리즘 방식이며 128bit 블럭 단위로 암호화를 하고, 사용되는 Key의 사이즈는 128bit, 192bit, 256bit 등이 있습니다. 라운드 수는 10, 12, 14 라운드를 사용하고 각 라운드마다 SubBytes, ShiftRows, MixColumns, AddRoundKey의 4단계를 거치게 됩니다.


현재 AES의 취약점에 대한 연구가 활발하게 이루어지고 있으며 관련하여 XSL Attack이나 cache timing attack등에 관련된 논문이 발표되었다


현재 암호알고리즘들은 크게 대칭형 암호알고리즘과 비대칭형 암호알고리즘으로 구분됩니다. 대칭형 암호알고리즘은 암호화할때 사용되는 키값과 복호화할때 사용되는 키값이 동일한 알고리즘이고 비대칭형 암호알고리즘은 암호화할때 사용되는 키값과 복화화할때 사용되는 키값이 서로 다른 알고리즘입니다.


대칭형 암호알고리즘은 다음과 같은 장점 때문에 주로 통신을 통해 주고 받는 데이터를 암호화할 때 사용합니다.

1. 암호화/복호화 속도가 비대칭형 암호알고리즘보다 빠르다. (최소10 ~ 최대1000배)

2. 암호화문의 크기가 평문보다 크지 않다. (암호화시 사이즈 증가가 없다)


대칭형 암호알고리즘은 그 원리상 데이터를 송신하는 A와 데이터를 수신하는 B가 동일한 KEY를 가져야 하는데, A와 B가 어떻게 같은 KEY를 가질수 있도록 해야 하는가? 라는 문제를 해결해야만 합니다. 이를 KEY bootstraping 또는 KEY agreement problem이라고 합니다.


A가 KEY를 만들고 이 KEY를 네트워크를 통해 B에게 전달하는 식의 방법은 공격자가 중간에서 KEY값을 가로챌수 있기 때문에 사용할 수 없습니다. 이 문제를 해결하는 일반적인 방법은 두 가지가 있습니다.

1. KEY값을 뒤에서 설명할 비대칭형 암호알고리즘을 이용하여 암호화 시킨 후 전송하는 방법입니다.

2. 실제 키값을 전송하지 않고도 A와 B가 동일한 키값을 생성할 수 있도록 하는 알고리즘을 사용하는 것인데 Diff-Hellman이라는 알고리즘이 대표적입니다.


대칭형 알고리즘의 예로는 SEED, DES, DES3, AES 등이 있습니다.


비대칭형 암호알고리즘은 흔히 공개키알고리즘이라고도 불립니다.

그 이유를 설명해 드리죠


비대칭형 알고지즘을 이용하여 데이터를 전송하는 방식은 다음과 같습니다.


A는 두개의 KEY를 생성합니다. 두개의 키를 각각 private key, public key라고 부릅니다. (공개키 암호알고리즘이라는 용어는 여기에서 유래된 것입니다.) 이 때 생성된 private/public key는 수학적으로 다음과 같은 특성을 가지게 됩니다.

A의 public key를 이용하여 암호화 된 데이터는 A의 private key로만 복호화가 가능하다.

A의 private key를 이용하여 암호화 된 데이터는 A의 public key로만 복호화가 가능하다.


B역시 A와 마찬가지로 두개의 키를 생성합니다.


자 이제 A와 B가 통신을 하는 방법을 살펴보면

A와 B는 각자의 public key(공개키)를 서로에게 알려줍니다.

각자의 public key를 나눠갖게 되면

A는 PubA, PriA, PubB를 가지게 되고,

B는 PubB, PriB, PubA를 가지게 됩니다.

공격자는 물론 PubA, PubB를 가질 수 있겠죠


A는 B에게 데이터를 전송하기 위해 B의 Public Key(PubB)를 이용하여 데이터를 암호화한 후 전송합니다. 따라서 이 정보는 B의 Private Key(PriB)를 가지고 있는 B만 해독할 수 있습니다. B역시 마찬가지 방법으로 통신을 하면 됩니다.

이렇듯 Public Key가 공개되어도 안전하게 통신을 할 수 있다는 것이 Public Key의 장점입니다.
(물론 private key는 당연히 공개되어서는 안됩니다.)


비대칭형 암호알고리즘에는 RSA가 대표적이며, 비대칭형 암호알고리즘은 위에서 언급했던 것처럼 대칭형 암호알고리즘의 KEY를 암호화하는데 사용하거나, 주로 인증에 많이 사용됩니다.


실생활에서 공개키가 사용되는 예를 볼까요?

대표적인 예로 인터넷뱅킹을 들 수 있습니다.


C라는 고객이 Bank라는 은행과 인터넷뱅킹을 한다고 하죠


C는 Bank에 먼저 자신의 공개키를 보냅니다.

그러면 Bank는 대칭형암호알고리즘에서 사용할 KEY(이를 보통 비밀키라고 합니다.)를 C의 공개키를 이용하여 암호화 한다음 전송합니다. 이후 C와 Bank간의 통신은 이렇게 전송받은 비밀키를 통해 암호화 됩니다.


공격자가 중간에서 암호화된 비밀키를 획득한다 하더라도 C의 private을 알지 못하면 해독할 수 없고 따라서 비밀키로 암호화된 내용을 절대 볼 수 없습니다.


그런데 여기에는 한가지 문제점이 있습니다. 만약 공격자가 A가 Bank에 접속해서 마치 자신이 C인 것처럼 가장하고 자신의 공개키를 전송하면 어떻게 될까요? 만약 Bank가 속는다면 Bank는 A의 공개키를 이용하여 비밀키를 암호화 한 후에 전송할 것이고 A는 자신의 Private Key로 이를 해독한 후 비밀키를 획득할 수 있게 될 것입니다.


이러한 공격을 막기 위해서 Bank가 C의 공개키를 인증할 수 있는 방법이 필요합니다.

그게 바로 인증서라는 거죠.

인증서에는 인증받는자(보통 타켓이라고 합니다.)의 정보와 인증받는자의 공개키, 유효기간등 인증기관정보등이 기록되어 있습니다. 인증서는 타켓의 공개키가 인증서에 기록된 공개키가 맞다는 사실을 인증기관이 보장한다는 내용을 담고 있다. 

 

Posted by 응이

Dream come true.
응이

달력

태그목록