블록암호

2023. 4. 12. 23:21암호학

블록암호 : 자료 블록을 처리하는 핵심 알고리즘 운영 모드의 조합으로 구성되는 암호의 한 종류.

일련의 자료 블럭을 처리하는 기법

 

1. DES
1979년에 개발해서 1990년까지 비밀이었던 알고리즘.

 

2. AES

DES의 계보를 잇는 암호 알고리즘.

 

이 외에도 GOST, FOX, IDEA, Threefish 등 여러 블록 암호가 있다.

 

구성 요소

1. 암호화알고리즘 E

2. 복호화 알고리즘 D

 

블록암호는 임의의 입력으로부터 결과를 계산할 수 없어야한다는 목표가 있다.

즉, 어떠한 패턴도 발견할 수 없어야한다.

= 무작위해보여야 한다.

 

블록크기

주로 64비트나 128비트 블록

이유 : 암호문의 길이와 메모리 사용량을 최소화하기 위해서는 블록이 너무 커서는 안 됨.

메모리를 최대한 아껴야한다면 64비트 블록을 사용하지만

그것이 아니라면, 128비트 블록이 더 안전하고 현대의 CPU는 128비트 블록을 처리하기 더 용이 하므로 128비트를 권장.

 

+ 블록이 너무 작으면 코드북 공격에 당할 수 있고, 너무 크면 반환비용이 커진다.

 

코드북 공격 : 블록이 너무 작으면 예시 16비트 -> 2^16 = 65536개의 경우의 수를 두고, 이에대한 결과를 모두 저장해놨다가 그때그때 가져다 쓸 수 있음

 

블록암호 구성

블록암호를 구성하는 데 쓰이는 기법

1. 하나의 거대한 알고리즘이 아닌 round를 사용

하나로는 약하지만 여럿이서 하면 강해진다.

2. 하나의 라운드를 구축할 때 쓰이는 기법은 크게 두가지이다.

AES의 대입- 치환 네트워크, DES의 파이스텔 방안 등

 

그러므로 세개의 라운드를 쓰는 암호 알고리즘이면 아래와 같이 표현

C = R3(R2(R1(P)))

또한 라운드 함수들은 동일한 알고리즘이지만 라운드마다 키가 다르다. 이것을 라운드 키라고 하며 같은 입력을 넣어도 다른 결과를 보여준다.

 

 

주키를 라운드 키로 변환하는 알고리즘 : 키스케줄

 

 

 

모든 라운드는 서로 달라야한다.

 

그렇지 않으면 슬라이드 공격에 당한다.

슬라이드 공격

P2 = R(P1)을 만족하는 쌍 (P1,C1) / (P2, C2) 을 조사한다.

라운드가 모두 동일하다면

C2 = R(C1)라는 관계도 성립한다.

무슨소리냐면 C1 = R3(R2(R1(P)))

이고 C2= R(C1) 이므로

C2=R3(R2(R1(P2)))

즉 P1을 넣으면 C2, P2를 넣으면 C2가 나온다.

 

 

 

이에 대해 나온 것들

1. 대입치환 네트워크

 

혼돈 : 입력이 복잡한 변환을 거친다.

확산 :  그러한 변환들이 입력의 모든 비트들에 동일하게 의존한다.

 

즉 비트들을 뒤섞는다.

 

2. 파이스텔 방안

파이스텔이 고안한 루시퍼라는 블록암호 설게의 동작 방식

https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%EC%8A%A4%ED%85%94_%EC%95%94%ED%98%B8

 

왼쪽은 위의 단계와 직업 대응 되는 단계, 오른쪽은 기능적으로 동일하되 L과 R이 맞바뀌고 라운드 들이

L = L xor F(R) 또는 R = R xor F(R) 을 번갈아서 수행

 

 

 

대망의 AES(고급암호화 표준)

보안성이 56비트밖에 안되는 DES와 그것을 업그레이드한 3DES가 표준이었지만 보안성이 불충분했다.

3DES의 112비트의 보안성을 위해 키를 168비트로 맞춰야하기 때문에.

 

 

아무튼 이를 개선해서 나온 AES는 암호화 표준으로 널리 인정되었고, NSA는  일급비밀의 정보 보호에 AES를 사용할 것을 승인했다.

 

AES의 내부

 

AES128는 128비트를 바이트로 블록을 16바이트, 4*4로 쪼갰다.

 

이 블록들이 연산되는 라운드는 라운드마다 4가지 연산이 이루어진다.

1. addroundkey

2. subbytes

3. shiftRows

4. mixColumns

 

 

이런 과정의 AES는 안전하다.

하지만 이 보안성은 알고리즘이 아니라 운영모드들에 의해서 잘못선택되어서 뚫릴수도 있다.

잘못된 운영모드

 

1. 전자 코드북 모드

같은 키와 같은 평문으로 암호화를 하면 동일한 두 블록이 나온다.

 

https://koreascience.kr/article/JAKO201620853200729.pdf

원본 그림
ECB 방식으로 암호화한 결과
ECB 이외의 방식으로 암호화한 결과

사진출처 :https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D_%EC%95%94%ED%98%B8_%EC%9A%B4%EC%9A%A9_%EB%B0%A9%EC%8B%9D

 

이외의 방식이 되기 위해서는 CBC모드를 알아보아야 한다.

 

2. CBC 모드(연암호 블록 연쇄 모드)

 

https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

첫 블록은 무작위한 초기치를 사용하므로 같은 평문 블록들이 동일한 암호문으로 변환되는 일은 발생하지 않는다.

초기치가 다르기 때문.

 

또 CBC모드는 블록 길이가 임의의 길이라면 쓰는 방법들

 

1.메세지 채우기

2.암호문 훔치기

3.카운터 모드

 

 

블록 암호의 공격 방법들:

1. 중간값 일치 공격

중간에 K1= K2인 부분이 있다면 두 연산의 효과가 상쇄된다.

DES암호의 공격으로 소개됨

 

2. 채움 오라클 공격

AES의 채우기 기법에서 나오는 여분의 바이트 덧붙이는 방식이 있는데.

1.블록 C1을 무작위로 선택해서 채움 오라클이 유효한 암호문으로 받아들일때 까지 그 블록의 마지막 바이트를 변화시킨다. 예를들어 C1[15] xor X[15] = 01(유효한 채우기값 블록인 01)을 찾았다고 해보자.

2. C1[15]를 X[15] xor 02로 설정해서 , X[14]값을 구하고, 채움이 올바른 C1[14]를 찾는다, 유효하다고 판정했다면 C1[14] xor X[14] = 02를 만족하는 C1[14]를 찾아낸 것이다.

3. 모든 바이트에 대해 1과 2를 반복한다.

 

https://bperhaps.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-%ED%8C%A8%EB%94%A9-%EA%B3%B5%EA%B2%A9-%EA%B8%B0%EC%B4%88-%EC%84%A4%EB%AA%85-Oracle-Padding-Attack

자세한 링크

 

 

 

AES128, 256 같은 암호로는 양방향 암호화이므로 인코딩, 디코딩을 할 수 있다. 

128과 256의 보안성은 대부분의 응용프로그램에서는 보안성의 차이가 큰 의미 없다고 하며, 128비트를 주로 사용한다고 한다.

 

base64는 뚫리기 쉽고, 그저 인터넷상의 모든 문자를 나타내기 편리한 목적으로 사용하지만 위의 암호화는 진짜 보안상의 이유로 쓰면 좋다.

 

다음에 포스팅 할 것은

password 암호화 같은 걸 할때 SHA256 같은 단방향 알고리즘, 해시함수를 사용하는데

이것들에 대해서 알아볼 생각이다.

 

참고문헌 : 처음배우는 암호화, 한빛 미디어

'암호학' 카테고리의 다른 글

현대암호 간단 정리  (0) 2023.05.29
[암호] 무작위성  (0) 2023.03.08
rot13알고리즘 구현(특수문자, 대문자, 소문자 구현)  (0) 2023.03.01