블록체인과 굉장히 관련깊은 분야인 암호학에 대해 공부하면서 다양한 암호화폐 지갑에서 로컬에 저장돼 있는 데이터를 암호화하는 방식인 AES에 대해 간략히 서술하였다.
DES는 미국 표준 기술 연구소에서 암호화 표준 알고리즘으로 도입했으며, 1980년대와 1990년대에 널리 사용되었으나 이후 무차별 공격에 저항력이 그리 좋지 않은 것으로 밝혀졌다.
DES는 56비트의 길이의 키를 사용하여 암호화하였는데 이로 인해 문제가 야기되어 삼중 DES의 도입으로 해결했으나 3DES는 56비트 키를 3개 이용하고 DES 알고리즘도 마찬가지로 세 번 실행하는 방식으로 168비트 키를 사용하도록 젤안되었으며, 따라서 무차별 공격을 거의 불가능하게 만들었다. 그러나 성능 저하나 64비트의 블록 크기 등의 한계를 맞이하였다.
AES는 2000년대 초 라인달(Rijndael)이라는 알고리즘에서 시작하여 미국 표준 기술 연구소에서 사소한 수정을 거친 뒤 표준화하였으며 현재까지 무차별 방식보다 효과적으로 공격하는 방법이 발견되지 않았다.
초기 라인달버전에서는 128비트, 192비트, 256비트의 키와 블록 크기를 허용하였으나 AES에서는 블록 크기를 128비트만 허용하고 키의 크기는 128비트, 192비트, 256비트 모두 허용한다.
AES알고리즘에서는 암호화를 처리하는 동안 4 * 4 바이트 배열 형태의 상태 배열을 여러 라운드에 거쳐 수정하며 전체 암호화에는 키의 크기에 따라 10 ~ 14번의 라운드가 필요하다.
키의 크기에 따른 라운드 수는 다음과 같다.
입력에 따라 암호에 대한 상태 배열을 초기화하고 나면, 입력을 암호화하기 위해 4개 연산의 네 단계에 걸쳐 수행된다.(AddRoundKey, SubBytes, ShiftRows, MixColumns)
상태 배열을 마스터 키에서 유도된 서브키와 XOR한다.
해당 단계는 대치 단계로, 룩업 테이블을 사용해 상태 배열의 모든 바이트를 대체한다.
단계는 첫 번째 행을 제외하고 각 행을 왼쪽으로 점진적으로 순환하는 방식으로 Shift한다.
단계에서는 모든 바이트를 열 단위로 선형 방식으로 혼합한다.
위 4단계로 하나의 Round를 이루게 되며 최종 라운드에서는 4단계를 AddRoundKey로 대체해 앞의 세 단계를 간단히 되돌리지 못하게 한다.