이메일을 적으시면 보안관련 소식을 받을수 있습니다.
이메일:










작성자:푸른하늘위로
편집자:엔시스(sis@sis.pe.kr)





이번 주, 두 번째 Posting입니다.
오늘은 DES를 대체해서 나온 AES와 3중 DES에 대해서 쓰려고 합니다.
 

그럼 먼저 3중 DES입니다.

3중 DES는 DES에서 사용되는 Key가 1개에서 3개로 늘어났고, 2번의 암호화와 1번의 복호화로 이루어져 있습니다.
DES에서 사용되는 Key는 64bit, 그 중 패러티 bit를 제외하면 56bit를 사용하는데 이 56bit의 Key의 3배를 사용하여 총 168bit의 Key를 사용합니다.
DES 암호문 C = Ek[P] 라고 했을 때 ( P = 평문 ) , 3중 DES의 경우에는 C = Ek3[Dk2[Ek1[P]]] 으로 표현할 수 있습니다.
3중 DES의 장점으로 보자면 기존에 DES로 암호화 된 것을 3중 DES로 다시 암호화를 바꾸지 않아도 된다는 것입니다. 단일 DES로 암호화된 것을 3중 DES에 Key를 하나만으로 복호화 한다면 원래의 평문이 나타나게 됩니다.


C=E
k[P] -> 3중 DES로 복호화 -> P = Dk[Ek[Dk[C]]]
P = Dk[C]


그렇다고 해서 3중 DES로 암호화 된 것이 단일 DES의 복호화 과정으로 풀리지는 않습니다. 현재는 PGP, S/MINE 등에서 사용되고 있다고 합니다.


오늘의 메인인
AES입니다.


3중 DES는 기존의 것들을 보존하기 위해 사용되었지만, 결국에는 DES를 대체할 암호 알고리즘이 필요성을 느끼고 미국 NIST(National Institute of Standards and Technology)에서 1997년부터 공모, 2001년 Rijmen-Daemen의 개발 암호 알고리즘이 채택되었습니다. 이 알고리즘은 구현이 쉽고 메모리도 적게 소모하고, H/W나 S/W적으로 구현했을 때 모두 좋은 성능을 보이게 됩니다. 또 기지 공격(일정량의 평문 P에 대응하는 암호문 C를 알고 있는 상태에서 해독하는 공격)에 대해 강하다는 특징을 가지고 있습니다.


Rijndael 알고리즘은 한 블록 당 128bit를 사용, Key의 길이는 128/192/256 bit를 사용할 수 있으며, 각각 10/12/14 Round를 사용합니다. 또 각 Round마다 SubBytes, ShiftRows, MixColumns, AddRoundKey의 4단계를 거치게 됩니다.


또 이 알고리즘은 상태배열을 사용하는데, 암/복호화 과정에서 변경되는 상태를 기록합니다. Round에서 input 요소가 되는 부분입니다. 가로로 4, 세로로 4칸인 배열이며, 1칸 당 1byte를 가지게 됩니다.
그럼 128bit Key를 기준으로 알아보겠습니다.

전체적인 구조입니다.






















 

왼쪽이 암호화, 오른쪽이 복호화 순서입니다.

그럼 이제 각 Round안에 들어가는 4 단계에 대해서 알아보겠습니다.

암호화를 기준으로 먼저 1) Add Round Key입니다. 말 그대로 생성된 round Key를 사용하는 단계입니다. 128bit의 상태배열에 128bit의 round key를 bit단위로 XOR 처리합니다.
(XOR : 두 개의 값이 같으면 0, 서로 다르면 1)
이 단계에서는 상태 배열의 모든 bit에 영향을 주게 됩니다.


그럼 잠깐 Round Key 생성방법을 보겠습니다.

 



입력받은 Key를 byte 단위로 상태 배열을 만든 후에 각각의 열을 가지고 Round 1의 Key를 생성합니다.


이 생성된 Key를 가지고 그림과 같은 수행을 반복하면서 총 11개의 Key([W0]~W[44])를 생성하게 됩니다.

ex) [W8] = [W7] ⊕ [W4]

 

 

 

다음은 2) Substitute bytes입니다. 상태배열의 각 칸의 byte를 단순하게 치환하는 방법입니다. 여기서 사용하는 S-Box는 복잡한 수학적 함수를 사용해서 만들어진 행렬입니다. 최대한 입출력간의 낮은 상관관계를 가지도록 설계되어 있으며, 복호화를 위해 역이 존재합니다.

표현하기 쉽게 각 byte를 16진수로 표현했습니다.

 










 

 


















다음은
3) Shift rows입니다. 상태배열의 각 행을 byte로 이동합니다.
첫 번째 행은 그대로, 두 번째는 한 칸, 3번째는 두 칸, 4번째는 3칸으로 각각 왼쪽으로 회전이동 합니다.

 







마지막으로 4) MixColumns입니다.
상태배열의 열 단위로 처리합니다. 하나의 열을 일정한 함수(28의 유한체 계산)에 의하여 새로운 값을 만들어내는 방법을 사용합니다.
 

 

 

 

 

AES는 역시 어렵군요. 쓰여진 수학 함수들이 쉽지 않은 것 같습니다. 앞으로 좀 더 공부해야겠습니다.

혹 모자란 부분이 있다는 것도 댓글로 달아주시면, 계속해서 보충해서 쓰도록 하겠습니다.

 

 

****************************************************************************************************

본 포스팅의 저작권은 보안인닷컴과 작성자에 있으며 상업적 이용을 배제하며 콘텐츠 이용시에는 반드시 출처와 링크를 이용해 주시기 바랍니다. 무단도용은 저작권법에 저촉을 받습니다..

****************************************************************************************************

Posted by 알 수 없는 사용자
,