** 구현은 연습중이니 참고하지 마세요
[ 구조 ]
- SPN 구조
안전성 파라미터 | 키 길이 | 블록 크기 | 라운드 수 |
128 | 128 | 128 | 10 |
192 | 192 | 192 | 12 |
256 | 256 | 256 | 14 |
- AES는 128을 주로 쓴다 함.
SubByte
- 입력값을 바이트 단위로 쪼갬
- 128비트 = 16 바이트
- state : 16byte -> 4byte x 4byte 행렬로 표현
- S-box 연산 (테이블 참조)

ShiftRow
- state 값의 각 행을 시프트 연산

MixColumn
- state 값의 각 열에 4x4 행렬을 곱해주는 연산

AddRoundKey
- 라운드 키 값을 각 바이트에 xor 해줌

AES KeySchedule
- 128bit 키 -> 4byte word로 쪼갬 (4개)

- RotWord : word를 바이트 단위로 1칸 시프트
- SubWord : 바이트 단위로 S-box 연산
- Rcon : 라운드 상수 더해줌
[ 구현 ]
typedef unsigned char BYTE;
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "aes.h"
state[4][4];
Rkey[4][4];
BYTE Key[] = { 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c };
//16진수 2개 = 8bit, 1byte=8bit => 128bit=16byte로 만들어서 key에 넣기
'암호 > 암호 구현' 카테고리의 다른 글
[암호 구현] RSA (0) | 2022.05.04 |
---|