본문 바로가기

암호학

[NOOBHACK] CBC 암호화 방식

CBC(Cipher Block Chaining) 암호화 방식에 대해 설명할 것은 간단하다.

 

 

먼저 준비물은 평문, 암호, 키값과 IV다

 

여기서 IV란 

Initialization Vector의 약자로 암호화가 수행 될 때 마다

랜덤한 값이여야 한다. (키와 같을 경우 키를 알아낼 수 있다)

 

그리고 IV와 평문을 xor 하여 초기 벡터를 만들어 낸다

평문은 8, 16 바이트 등으로 블록 암호화이기 때문에 암호화의 특정 구현에 따라 크기가 달라진다

(여기선 16바이트를 기준으로 설명하겠습니다)

 

초기에 만들어야 하는

IV^P1

P1은 처음 평문에서 16바이트를 가져온 것(평문의 1~16바이트)

 

그리고 이 xor한 값을 암호화 시킨다 예: AES 128

 

Enc(IV ^ P1) = C1

그리고 처음으로 암호화 된 C1을 다시 다음 평문의 16바이트와 xor 하여 다시 암호화 한다

 

Enc(C1^P2)

P2는 평문에 다음 16바이트를 가져왔다(평문의 16~32바이트)

이 과정을 평문이 끝날 때 까지 반복한다

 

Enc(IV^P1) = C1

Enc(C1^P2) = C2

Enc(C2^P3) = C3

Enc(C3^P4) = C4

...

 

그리고 나온 Cn을 전부 합친다

 

C1 + C2 + C3 + C4

그럼 암호화가 끝난다

 

이제 복호화 하는 방식을 알아보자

복호화는 암호화와 역순으로 진행하면 되기 때문에 식은 간단하다

 

 

Dec(C1) ^ IV = P1
Dec(C2) ^ C1 = P2
Dec(C3) ^ C2 = P3
... 

 

참 쉽죠? 근데 여기서 신기한 것은 IV를 알아 낼 수 있다는건데 흠....

이 점을 잘 활용하기 바란다.

 

 

참고로 평문 값이 암호화 단위 사이즈의 배수가 아닐 경우(예: 16바이트)

패딩이라는 것을 사용하여 평문 값을 16바이트 배수로 만들어 버린다.

 

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

[NOOBHACK] BASE64 암호화 과정  (1) 2022.10.03