암호학/대칭키암호 (5) 썸네일형 리스트형 1.3 [C++] AES 구현 1) MixColumns => 주어진 행렬에 각 열을 xor 해준다. MixColumns 함수에 각 열을 넣어 처리한다. S'(0,c) = 2*S(0,c) xor 3*S(1,c) xor 1*S(2,c) xor 1*S(3,c) S'(1,c) = 1*S(0,c) xor 2*S(1,c) xor 3*S(2,c) xor 1*S(3,c) S'(2,c) = 1*S(0,c) xor 1*S(1,c) xor 2*S(2,c) xor 3*S(3,c) S'(3,c) = 3*S(0,c) xor 1*S(1,c) xor 1*S(2,c) xor 2*S(3,c) 이렇게 계산이 된다. S'(0,c)를 보면 S(0,c)나 S(1,c)는 각각 2번, 3번 곱해진다. AES는 GF(2^8)을 사용하기 때문에, 곱셈도 유한체 곱셈을 이용해야 한.. 1.2 [C++] AES 구현 1) ShiftRows => 행을 기준으로 차례대로 shift 한다. => 이런 식으로 한 행씩 ShiftRows 함수에 넣는다. shift하는 기준은 위의 식을 토대로 한다. r,c는 row와 column이고, Nb는 블록의 사이즈를 의미한다. AES - 128, 192, 256에서 다 Nb = 4로 고정되어있다. S'은 shift 된 state를 의미한다. 위의 식에서 shift함수는 두 인자 중 더 작은 값을 리턴한다. 예를 들어, S(3,0)이면 r은 3, c는 0이다. S(3, 0+shift(3,4) mod 4) = S(3, 3)이다. 또 해보면, S(3,1)이면 r은 3, c는 1이다. S(3, 1+shift(3,4) mod 4) = S(3, 0)이다. 이렇게 각 state마다 식을 취하면 S.. 1.1 [C++] AES 구현 이제 AES를 직접 구현해보겠습니다. 순서는 SubBytes, ShiftRows, MixColumns, AddRoundKey로 진행해보도록 하겠습니다. 1) SubBytes => Sbox에 치환합니다. Sbox는 w = x^-1라고 할 때, y = S(x) = Aw + b의 함숫값들을 모아둔 테이블입니다. 1-1. Sbox 구하기 void Get_AES_Sbox(byte sbox[256]) { byte temp; sbox[0] = AES_Affine(0); for (int i = 1; i y = S(x)인 형태에서 x값에 대한 y를 테이블로 구해야 합니다. 지금 이 함수에서는 x의 역원.. 1. AES 1) AES란 AES(Advanced Encryption Standard)는 고급 암호화 표준이라 불린다. 대칭키 암호이기 때문에 같은 키로 암호화와 복호화를 진행한다. SPN 구조를 사용하고 한 라운드 안에 4개의 처리과정이 있다. *SPN 구조(Substitution Permutation Network) : 입력을 나눈 후 Sbox에 치환시킨다. 그리고 재배열 시키는 구조 암호화와 복호화가 같은 구조로 되어있지만, 복호화할 때 역함수를 짜야하는 함수들이 있다. 2) AES의 규격 1. AES의 블록 길이 : 128 bit 2. AES의 키 길이 : 128, 192, 256 bit 3. AES의 라운드수 : 10, 12, 14 라운드 3) AES의 구조 1. SubBytes => Sbox에 치환한다. .. 0. 대칭키암호 대칭키암호란 암호화키와 복호화키가 같은 암호를 뜻합니다. 여기에는 AES, DES 등이 있습니다. 앞으로 AES와 DES 구현과 함께 블록암호 모드도 구현을 할 예정입니다. 또, 차분공격과 선형공격까지 개념을 알아보고 코딩을 해볼 계획입니다. 시간이 된다면 ARIA나 SEED와 같은 국산 알고리즘까지 공부해보고 싶습니다. 다음 글에서는 AES에 대한 설명을 하도록 하겠습니다. 이전 1 다음