대칭키 알고리즘

대칭키 알고리즘이라는 것은 동일한 키를 사용하여 암호화와 복호화를 하는 것을 의미합니다. 기본적인 용어부터 짚어보도록 하지요.

 

평문(Plain text) : 암호 알고리즘이 적용되지 않은 비트열, 또는 문자열을 의미합니다.

암호문(Chiper text) : 암호알고리즘이 적용된 비트열, 또는 문자열입니다. 키를 갖고 있지 않은 사람은 해독할 수 없습니다. 

 

이제 평문이 어떻게 암호문으로 암호화가 되고 어떻게 다시 평문으로 복구가 될까요? 답은 xor연산입니다. xor연산을 2번 적용하게 되 같은 비트열로 돌아오게 되는것을 이용합니다. 아래가 그 예가 되겠네요.

     0100 1100 (plain text)
xor 0110 1100 (key)
------------------------------
     0010 0000 (chiper text)

     0010 0000 (chiper text)
xor 0110 1100 (key)
-------------------------------
     0100 1100 (plain text

 

현재 대칭키 알고리즘은 물론 이것보다 더 많은 복잡한 과정을 더 거치게 됩니다. 

 

그 중에서 가장 많이 사용되는 대칭키 알고리즘인 AES에 대해서 알아보도록 합시다.

 

AES(Advanced Encryption Standard)

평문은 항상 128비트로 고정이 됩니다. 그럼 몇바이트인가요? 16바이트겠네요. 

16바이트의 평문이 Round key와 각 Round에서 지지고 볶아져 다음 Round로 가게 되고 최종 Round에서는 마침내 암호문이 나옵니다.  

 

암호문은 다시 역순서로 복호화되어 평문이 나오게 되지요.

 

AES는 세가지 버전이 있는데, AES128, AES192, AES256이 바로 그것들입니다. 이름뒤에 나오는 숫자는 암호화할때 사용되는 키의 비트수인데, 이 비트수마다 라운드가 다릅니다. 아래의 표로 정리했으니 참고하세요.

Round N Key size
10 128
12 192
14 256

 

- 키확장 (Key Expansion) : 입력으로 들어오는 key를 단순히 쓰는게 아니라 각 라운드에서 사용될 키를 파생시키는 역할을 합니다.

 

그렇다면 각 Round는 어떻게 구성되어있을까요?

우선 암호화될 평문의 데이터(128비트)는 2개의 16진수로 4x4 행렬로 나타냅니다. 이것을 State라고 부르는데 이  4x4 행렬블록은 SubBytes -> Shift Rows -> Mix Columns -> Add Round key를 거쳐서 최종 State가 나오게 되지요.

이렇게 나온 State는 다시 다음 Round로 향하게 됩니다.

 

 

Round 연산을 아래 간략하게 설명합니다.

- SubBytes : 대치(Substitution)을 사용하여 혼돈 효과를 줍니다. AES는 SubBytes 변환 테이블이라는 것을 이용하여 대치합니다.

- Shift Rows : 말 그대로 행을 shift하는데, 비트를 왼쪽으로 이동시킵니다. 코드로는 단순히 row<<1이 되겠네요.

- Mix Columns : 행렬의 곱셈을 이용하여 바이트들을 섞습니다. 행렬에 관한 지식이 있어야합니다. 

State의 열을 특정 C라는 행렬로 새로운 열을 만들어냅니다. 이렇게 column을 뒤섞는데요. 이때 원래의 state로 되돌리기 위해서 복호화할때는 C의 역행렬을 사용해야합니다.
행렬의 연산을 모른다싶으시면 그냥 그런 연산을 하는구나 참고만 하시면 될 것 같습니다.

- Add Round Key : 라운드키를 이용하여 최종적인 State를 만들어냅니다.

 

AES 안전성

AES는 DES 다음의 설계된 대칭키 암호알고리즘으로 어떤 공격도 AES를 뚫는데에 성공하지 못했습니다. 그러므로 현재는 가장 안전한 대칭키 암호알고리즘으로 볼 수 있습니다. 특히 DES와는 다르게 사용하는 키의 크기가 훨씬 큽니다. 

 

AES 구현 

AES는 소프트웨어, 하드웨어, 펌웨어 등으로 구현할 수 있고 매우 빠르게 동작합니다. AES 알고리즘은 단순하여 최소의 메모리를 사용할 수 있습니다. 서로 키만 잘 전달이 된다면 이런 이점을 이용해 AES를 사용해서 안전한 통신을 할 수 있습니다. 

 

이상으로 AES에 대해서 알아보았습니다. 

 

 

반응형
블로그 이미지

REAKWON

와나진짜

,