-
블록암호: 운영모드DreamHack/암호학 2024. 2. 26. 17:29
앞선 DES, AES 는 평서문을 어떻게 암호화하여 암호문으로 만드는가에 대한 방법이였다.
블록암호에 관한 운영모드는 평서문을 여러개의 단위로 나누었을때의 경우를 나타낸다.
DES, AES에 비해서 더 거시적 관점에서 쓰이는 방법이다.
종류는 총 3가지로
ECB, CBC, CTR 가 있다.
첫번째로 ECB 모드이다.
더보기1. ECB 모드
ECB는 평서문들을 모두 같은 키로 암호화하는 방법이다.
그래서 평서문을 나눈 블록들이 각각 독립적으로 암호화가 가능하다.
"Pass me away" 라는 문자열을 ECB 모드로 DES로 암호화한다면
DES는 평서문 1개의 블록이 64비트이므로 8바이트로 사용하므로
"Pass me" 와 " away "(뒤에는 패딩값이 들어올 것이다.)
2개로 나누어져
같은 값을 가지는 A라는 키 값을 통해서 암호화가 이루어지는 것이다.
사진에 나타나듯 이러한 방법은 혼돈의 성질을 만족하기가 어렵다.
1-1. 재전송 공격
ECB 모드는 재전송 공격에 취약하다.
앞서 설명한 것처럼 각각의 블록단위를 같은 키로 독립적으로 암호화하므로
ECB 모드를 사용할 때 취급하는 평서문의 블록 단위가 몇 바이트인지 알아내고, 암호문과 평서문을 알아낸다면
키 값과 상관없이 암호문을 조작하여 서버측에 송신이 가능하다.
드림핵에서 알려준 예시대로
'Alice sent 10000$ to Bob' 이라는 문자열을 4바이트의 블록 단위로 ECB 모드로 암호화하게 된다면
A l i c e s e n t 1 0 0 0 0 $ t o B o b 로 나뉘게 되는데
암호문이 a1ijc1ox0fdz0d1v0d1vforca3je 이라면
암호문 또한 24바이트이고, 4바이트 단위로 독립적으로 암호화된 것을 통해서
어떠한 평서문이 어떠한 암호문으로 바뀌게 된 것인지 대조해서 알아낼 수 있다.
암호문을 4바이트 단위로 나누어내면Alic
a 1 i j
c 1 o x
0 f d z 0 d 1 v f o r c a 3 j e 로 암호화되고,
여기서 0000은 0d1v로 암호화된 것을 알 수 있으므로
암호문에 0d1v를 적절한 위치에 넣어 조작된 쿼리문을 보내게 될 수 있다.
Alice sent 10000$ to Bob 를 암호화
-> a1ijc1ox0fdz0d1vforca3je 를 조작
-> a1ijc1ox0fdz0d1v0d1vforca3je 를 복호화하면
-> Alice sent 100000000$ to Bob 가 된다.
다음은 CBC 모드이다.
더보기2. CBC 모드
CBC 모드는 ECB에서 약간 꼬은 수준이다.
Plain (평서문)
Cipher (암호문) 이라고하면
Ci = Encryption(Pi ⨁ Ci-1) 인 관계를 가지게 된다.
쉽게 설명하면 암호화하기 직전에 평서문을 이전 단계에서 얻어낸 암호문과 XOR 연산을 진행하고 암호화하는 것이다.
대신에 첫번째 블록은 이전 단계의 암호문이 없으므로, IV라는 초기 벡터 값을 이용하여 XOR 연산을 미리해주고 암호화하게 된다.
여기서 내가 궁금했던 점은 초기 벡터값 (IV) 가 추가되고, 이전의 암호문과 평서문을 XOR 연산해주어서
혼돈의 성질을 띄게 한 것에 대해서는 이해했지만,
ECB 모드처럼 같은 값을 갖는 키를 각 블록에 사용하는가? 였다.
https://webstone.tistory.com/134
블록암호 운영모드 ECB,CBC,CFB,OFB,CTR
기본 개념 블록 암호는 고정된 N비트 블록을 N비트 블록으로 변환시키는 함수이다. 임의 길이의 평문을 암호화 시키기 위해서는 평문을 특정한 길이로 분할하여 블록 암호에 입력시켜야 한다.
webstone.tistory.com
이 분의 글에서 CBC 모드에 대한 설명 중에 각 블록에 동일한 키 사용이라고 하심.
맞는지는 모르겠다.
?) 신빙성이 있는 출처가 있으면 좋을텐데... 찾아봐도 안보인다.
2-1. CBC Bit-Flipping 공격
거창해보이는데
그냥 CBC 모드에서 혼돈의 성질을 띄게 하는 시작점인 첫번째 블록을 조작하는 공격이다.
첫 번째 암호문 블록을 복호화하는 식은 이러하다.
P1 = Decryption(C1) ⨁ IV
여기서 공격자가 IV' 로 조작하여
P1' 을 의도적으로 만들어낼 수 있다.
그렇게되면 첫번째 블록의 값은 조작이 가능하다는 것이다.
앞에 ECB 모드에서 사용한 평서문
Alice sent 10000$ to Bob
에서 4바이트를 1개의 블록 단위로 CBC 모드로 암호화한다고하면,
Alic 문자열은 IV 값을 IV'으로 조작하여 보낼 수 있으므로
Alice sent 10000$ to Bob 가 아닌
Dogge sent 10000$ to Bob 라고 바꿀 수 있는 것이다.
마지막으로 CTR 모드이다.
더보기3. CTR 모드
CTR 모드는 무작위 넌스(nonce) 값과 평문 블록의 인덱스(counter)르 결합한 값을 사용한다.
0xc253 = nonce 라고하면
0xc253 에 평서문의 순서에 맞춰 카운트해서 값을 만들어내는 것이다
첫 번째 평서문에 사용되는 nonce + counter 값은
0xc2530001
두 번째 평서문에 사용되는 nonce + counter 값은
0xc2530002
0xc2530003
0xc2530004
0xc2530005
.
.
.
이런식으로 최종 넌스 값을 키 값을 이용해 암호화하고
그 값을 평서문과 XOR 하여 암호문을 만들어낸다.
이전의 방식과 다른 점은 평서문을 직접 des, aes로 암호화하는 것이 아닌
nonce + counter 값을 키 값과 함께 이용하여 암호화 후 평서문에는 XOR 연산만 했다는 것이다.
여기서 또 궁금하다
CTR 모드도 nonce + counter 값과 함께 사용되는 키 값은 각각의 평서문 블록에 동일하게 사용되는 키 값일까?
아마 그럴 것 같긴한데...
?) 누가 좀 알려주십쇼.
사실 이것들 외에도
OFB
CFB
GCM도 있는데
자세한건
Block Cipher Mode (블럭 암호화 모드) - ECB, CBC, CFB, OFB, CTR, GCM
대칭키 암호 방식은 암호화와 복호화에 동일한 KEY를 사용한다.따라서 공개키 암호화 방식에 비해 키의 길이가 짧고 성능이 빠르다.대칭키 암호기술의 안전성은 암호 키의 비밀성에 기반하기 때
velog.io
이분꺼 보고 공부하는게 나을듯하네