- block들을 암호화 할 때 연관 여부에 따라 mode가 달라진다.
- 대표적으로 ECB, CBC, CTR 세 가지 mode가 있다.
- ECB에서는 암호화 된 내용을 몰라도 순서를 바꾸는 방법으로 원래 의미와 달라지게 되는 공격이 가능하다. Cut and Paste Attack!
예를 들어보자~
따라서 ECB 모드는 사용하면 안 된다...
- ECB 모드는 독립적으로 암호화를 진행해서 동일한 인풋은 동일한 아웃풋이 나온다고 했다.
- 그래서 이미지를 변환할 때 이렇게 된다...
ECB 모드는 쓰지 말자...
- 암호화 할 때 이전 블록을 활용한다. 따라서 각각 블록이 독립적이지 않고 체인 형태를 이루며 연결되어 있다.
- 제일 첫번째 블록은 random 값인 이니셜 벡터를 사용한다.
- CBC 모드에서는 P1 = P3 라고 해도 앞의 블록의 영향을 받아서 C1 ≠ C3
- ECB 이미지 암호화에서 문제가 해결된다! 같은 색도 서로 다른 색으로 변경!
- Cut and paste 공격도 큰 영향을 주지 않게 된다.
- random access 가 가능하다.
- stream cipher 와 비슷하다.
CBC 모드에서는 P 100개 중 50번째만 암호화가 불가능하다. (앞의 블록을 이용하니까!) 하지만 CTR은 이게 가능하다. 앞의 블록과 연관이 없기 때문이다. couter 값만 변경해주면 된다!
- Integrity를 보장하려면 암호화만으로는 어렵다. 내용을 몰라도 조작 가능하니까!
- Integrity를 보장하기 위해 사용하는 것이 MAC이다.
- 메시지에 대한 인증을 제공한다. 이 메시지는 변조되지 않았다는 것을 인증. (Integrity 제공)
- MAC을 이용하여 받은 메시지가 변조됐는지 확인한다.
- CBC로 계산된다.
1) 메시지 전송 전에 MAC 알고리즘을 이용하여 MAC 값을 생성한다.
2) 메시지와 MAC 값을 같이 전송한다.
3) 수신 측은 받은 메시지를 같은 알고리즘, 같은 키로 MAC 값 계산을 한다. 그리고 나서 받은 MAC 값과 비교한다.
4) 같으면 변조 X, 다르면 변조 O
- CBC 모드의 맨 마지막 값이 MAC 값이다!
- MAC 값은 plaintext와 같이 보내진다.
- 수신자는 K도 알아야 한다.
예를 들어보자~
1) 앨리스가 4개의 plaintext block을 보내려고 한다.
2) 그래서 앨리스는 MAC을 계산한다. (CBC 계산)
3) 앨리스는 IV, 4개의 plaintext, MAC을 밥에게 보낸다.
4) 근데!! 중간에 트루디가 P2를 X로 변조했다.
5) 밥은 그대로 받게 된다. 그리고 받은 plaintext를 이용하여 MAC을 계산한다.
6) 앨리스가 보낸 MAC과 밥이 계산한 MAC이 다르다!! 변조가 됨을 알 수 있다.
따라서 MAC은 본문 변경을 탐지할 수 있다.
그러면 MAC을 변조하면 되잖아??? 하지만 Key 값을 모르기 때문에 올바른 MAC 값을 계산할 수 없다.
- 암호화 할 때, MAC 계산할 때 서로 다른 Key를 사용해야 한다.
- Confidentiality, Integrity 둘 다 보장하고 싶다면 메시지에 MAC을 붙이고 암호화! -> 이걸 한 번에 처리할 수 없을까? 이슈되고 있음