본문 바로가기
about Security/암호

[현대암호기초] #05 block cipher / DES + AES

by saniii 2020. 10. 29.

시험아 이제 제발 날 놓아줘ㅓ...

 

# feistel (파이스텔 사이퍼) 구조

일반적인 암호 설계 원리로 대부분의 대칭키 암호 시스템에 적용됨

문장을 반으로 나눠 왼쪽과 오른쪽으로 분리한다.

n_left : n round에서 right쪽을 round key로 암호화한 후 left쪽이랑 XOR연산해서 n+1 roundright쪽에 전달

n_right: n+1 roundleft쪽으로 얌전히 전달

안정성의 문제가 round Func 문제로 귀결

특정한 round Func와 무관하게 복호화 가능하다.

* : i번째 round에서 쓰는 서브키로 키-스케줄 알고리즘에 따라 K로부터 얻어짐

서브키 생성알고리즘이 복잡할수록, round Func 복잡할수록 보안성이 높아진다.

block, key size 커질수록 보안성은 커지지만 속도는 느려진다.

라운드의 수가 많아질수록 보안성은 높아지지만 속도는 느려짐 보통 16이나 10

(하드웨어로 구현되면 빠르긴 한데 좀 구현하기 어려움 요즘은 임베디드 솦웨에 암호화 빠르기를 요구)

 

알고리즘은 간결하고 분명할수록 최상, 복잡하면 공격을 찾기도 어려움(그러면서 암호를 풀기도 어려워야 한대 바라는게 많네)

 

# DES (Data Encryption Standard)-전세계에서 가장 오래, 많이 쓰여진 알고리즘 (근데 이젠 아니야 많이 안써)

block사이즈와 키의 길이에 대해 (보안성에 대한 논쟁이 있음) 그래서 나온게 AES

-평문 64bit를 암호문 64bit로 변환

-8bit마다 패리티bit가 하나씩 포함되므로 총 56bit 적용된다.

-16라운드 feistel 구조

데스 알고림즘 사진 첨가 하던지 하여튼 순서 이햏할 것

 

 

 

 

 

# 3DES (triple DES)-des가 너무 짧아서 보안 논란되자 나온 아이, des를 세 번 수행함

k1, k2 k3 다 있는데 1, 3가 같음 (그니까 즉 key는 총 2)

& 순서순서 : 로 암호화 > 로 복호화 > 로 암호화.

* 암호화:

* 복호화:

키의 길이는 56*2 = 112 근데 효과는 key 3개의 효과 (168 bits)

112bit 보안성을 위해서는 Key168bit여야 하기 때문에 여전히 보안성이 불충분했다.

 

* AES (Advanced) Encryption Standard) /des의 대체

triplr은 느리고 아직도 짧으므로 aes를 만듬

==============ETRI정보통신연구소 대전에 있음=========

다양한 키 길이와 늘어난 블록 사이즈와 강력하고 빠른 알고리즘이길 요구하면서 생성된게 aes

- 암호화 Key128, 192, 256bit를 가질 수 있다. (AES-128, AES-192, AES-256)

- 암호화 Key의 길이에 따라 실행하는 Round수가 다르다. (128-10 / 192-12 / 256-14)

- 모든 경우에서 생성되는 Round Key의 크기는 평문과 같은 128bit이고 Round수의 +1만큼 더 생성된다.

속도와 코드 효율성 면에서 효율적이다.

SPN 구조

평가요소는 ppt참고해

iterative( 파이스테릉ㄴ 여러 라운드를 가침 얘는 반으로 나눴잖아)

 

DES의 교체가 필요했다.

이를 깰 수 있는 이론적 공격

전체 키 검색 공격 시연

3DES 사용 가능, 그러나 느리고 작은 블록 크기

미국 NIST1997년에 암호에 대한 호출을 발표했다.

98615명의 후보자 합격

5998월에 최종 명단에 올랐다.

Rijndael10월에 AES로 선정되었다. 2000

발명가: 조안 대멘 박사 & 빈센트 라이멘 박사

200111FIPS PUB 197 표준으로 발행

요구사항

대칭 블록 암호

128비트 블록, 128/128/256비트 키

DES보다 강력하고 빠름

평가기준은 보안, 전산효율, 메모리 요구사항, 하드웨어 및 소프트웨어 적합성, 유연성 등

Feistel 암호보다 반복적인 암호

각 라운드에서 대체와 순열을 이용하여 전체 데이터 블록을 병렬 처리

 

# SPN 구조 (Substitution Permutation Network)

병렬연산 가능

ㅠ 복호화시 별도의 복호화 모듈을 구현해줘야 한다.

: 암복호화 과정에서 역함수가 필요하도록 설계되어야 하지만 중간에 비트의 이동없이 한번에 암복호화가 가능하므로 fiestal에 비해 효율적으로 설계할 수 있다.

 

# AES

입력하는 한 블록을 원소가 1byte인 행렬로 변환 (128bit=4x4 / 192bit 4x6 / ) 이 행렬을 state(상태)라고 함

44개의 4바이트 워드(w[i]) 배열로 확장

각 라운드마다 4단어(128)가 라운드 키 역할을 한다. (state가 달라도 roundkey는 모두 128bit)

AES 는 한 라운드에서 전체 비트가 암호화된다. 따라서 상대적으로 적은 수의 라운드가 반복된다.

AES 는 입력되는 한 블록을 원소가 한 바이트인 행렬로 변환하며(예를 들어, 128 비트인 경우 4x4 , 192 비트인 경우 4x6 행렬), 이 행렬을 상태(state) 라고 부른다.

ASE의 한 라운드는 다음의 네 가지 함수로 구성된다.

SubBytes ( = DESS-box; 바이트별 대체) //data 바꾸기

+ byte단위로 대웅되는 s-box의 한 byte와 치환 수행 ( = 혼돈의 원리 구현)

ShiftRows //위치 바꾸기

+ 상태의 한 행 안에서 바이트 단위로 자리바꿈이 수행된다 ( = 확산의 원리 구현)

MixColumn //함수에 의해 datamix하여 새로운 byte생성, 바꿀 때 한 block(4byte) 한번에

+ state(상태)의 안의 열 안에서 혼합이 수행된다. ( = 확산의 원리 구현)

AddRoundKey //1byte마다 XOR

+ 비밀키에서 생성된 128bitround keystateXOR

 

** 각 라운드는 마지막을 제외하고 역연산이 가능한 4개의 변환을 사용하고, 마지막 라운드에는 MiixColumn을 제외한 3개의 변환만을 갖는다.

 

Pre-round transformation(AddRoundKey)

먼저 AES 를 진행하면 평문과 키를 가지고 add round key operation 을 진행하게 되는데 이는 XOR 연산을 말한다. 128비트 길이의 평문과 128비트 길이의 키를 가지고 비트 별로 XOR 연산을 진행한다.

SubBytes

SubBytes AES 암호화 과정에서 사용되는 대치 함수이다. 먼저 각 바이트를 4비트씩 2개의 16진수로 계산하여 왼쪽 4비트를 S-박스의 행으로 오른쪽 4비트를 열로 테이블을 읽는다. , 16진수의 행과 열이 교차하는 부분에서 바이트 값을 출력한다. SubBytes 연산은 16개의 독립된 바이트 단위의 연산을 수행한다. SubBytes 변환을 위해 S-박스 테이블이 이용되며, -> 혼돈의 효과를 준다.

ShiftRows

순환 이동 실시, 이것은 바이트 단위의 치환이다. 왼쪽으로 순환 이동을 한다.

- 첫 번째 행은 Shift 되지 않는다.

- 두 번째 행은 한 자리 왼쪽으로 Shift 된다.

- 세 번째 행은 두 자리 왼쪽으로 Shift 된다.

- 마지막 행은 세 자리 왼쪽으로 Shift 된다.

비트 단위로 치환하는 DES 와는 달리 AES 에서의 이동 변환은 바이트 단위로 이루어지므로 한 바이트 내에서의 비트 순서는 바뀌지 않는다.

MixColumns

열 단위 연산 수행. , 각각의 열을 계산하여 새로운 값을 갖는 열을 출력한다. ShiftRows 변환에 의한 치환의 경우, 바이트 안의 비트는 그대로 두고 바이트만 교환한다. MixColumns 는 행렬의 곱셈 연산을 이용해 바이트 안의 비트를 변환한다. 현재 행렬에서 칼럼을 가져와서 미리 정의된 Constant matrix 에 곱하게 된다.

 

AddRoundKey

첫 번째로 수행했던 Pre-round transformation(AddRoundKey) 에서는 private key AddRoundKey 를 수행했다면 이때는 private key 로부터 만들어진 서브키로 연산을 수행한다. AddRoundKey 는 한 번에 한 열씩 수행한다. 이러한 점에 있어서는 MixColumns 와 비슷하다. MixColumns 의 경우에는 각 스테이트 열 행렬에 고정된 정방행렬을 곱하지만, AddRoundKey 는 각 state 열 행렬에 라운드키를 더한다.

 

Subkey Generation, Key Schedule

AES Key schedulingKey Expansion, RoundKey Selection 의 두 부분으로 이루어져 있다. 각 라운드에 사용하는 러운드키를 생성하기 위해 먼저 키 확장(Key Expansion)과정을 진행한다. 이렇게 생성한 라운드키는 라운드 마지막 단계에서 AddRoundKey 동작을 한다.

 

AES 복호화

복호화를 위해서, 진행 과정은 역산이 가능해야 한다.

XOR 연산은 그 자체가 역산이므로 AddRoundKey역산이 가능하다.

MixColumns 은 역산 행렬을 이용해 역산 가능하다.

ShiftRows 은 이동의 방향을 반대로 하여 역산이 가능하다.

SubBytes S-박스 테이블을 이용해 역산이 가능하다.

 

 

댓글