암호/암호 구현

[암호구현] AES

HHRR 2022. 7. 18. 16:27

** 구현은 연습중이니 참고하지 마세요

[ 구조 ]

- 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