[암호학] Symmetric Key Crypto (대칭키 암호) (2)

🍀·2022년 4월 4일
0

CS

목록 보기
2/3
post-thumbnail
post-custom-banner

Block Cipher Modes

  • block들을 암호화 할 때 연관 여부에 따라 mode가 달라진다.
  • 대표적으로 ECB, CBC, CTR 세 가지 mode가 있다.

ECB Mode


  • 고정된 키로 각자 블록을 암호화한다.
  • Codebook 개념과 유사하다. 왜? 각자 블록을 암호화 하니까 정해진 인풋에 대한 아웃풋이 정해져있다.

ECB Cut and Paste Attack

  • ECB에서는 암호화 된 내용을 몰라도 순서를 바꾸는 방법으로 원래 의미와 달라지게 되는 공격이 가능하다. Cut and Paste Attack!

예를 들어보자~

  • Plaintext: "Alice digs Bob. Trudy digs Tom."
  • 64 bit 단위 블록으로 쪼갠다.
  • 각각 블록들을 암호화한다.
  • 그리고 나서 트루디가 그 순서를 바꿔버린다. (내용은 모르지만 순서는 바꿀 수 있음!)
  • 의미가 바뀌었다!!

따라서 ECB 모드는 사용하면 안 된다...

ECB Weakness

  • ECB 모드는 독립적으로 암호화를 진행해서 동일한 인풋은 동일한 아웃풋이 나온다고 했다.
  • 그래서 이미지를 변환할 때 이렇게 된다...

  • 픽셀을 암호화하여 색은 바뀌었지만 인풋이 같으면 아웃풋이 같아서 색이 같다면 암호화 된 색도 같아진다! -> 형태 그대로 보임...

ECB 모드는 쓰지 말자...

CBC Mode

  • 암호화 할 때 이전 블록을 활용한다. 따라서 각각 블록이 독립적이지 않고 체인 형태를 이루며 연결되어 있다.
  • 제일 첫번째 블록은 random 값인 이니셜 벡터를 사용한다.

  • 암호화
  • 첫번째 블록은 IV와 P1을 XOR 연산한 뒤 K를 이용하여 암호화한다.
  • 그 이후 블록들은 앞의 암호화된 결과 값과 인풋으로 들어온 P를 XOR 연산한 뒤 K를 이용하여 암호화를 한다.
  • 복호화
  • 첫번째 블록은 C와 K를 이용하여 복호화 모듈을 통과한 뒤 IV와 XOR 연산을 하여 복호화한다.
  • 그 이후 블록들은 C와 K를 이용하여 복호화 모듈을 통과한 뒤 이전 C와 XOR 연산을 하여 복호화한다.

ECB vs CBC

  • CBC 모드에서는 P1 = P3 라고 해도 앞의 블록의 영향을 받아서 C1 ≠ C3
  • ECB 이미지 암호화에서 문제가 해결된다! 같은 색도 서로 다른 색으로 변경!
  • Cut and paste 공격도 큰 영향을 주지 않게 된다.

Counter Mode (CTR)

  • random access 가 가능하다.
  • stream cipher 와 비슷하다.

  • input이 counter 값이다. (진행될 때마다 +1 되는 값)
  • counter와 key를 이용하여 암호화하고 P와 XOR 연산을 수행하여 C를 획득하는 구조!

CBC 모드에서는 P 100개 중 50번째만 암호화가 불가능하다. (앞의 블록을 이용하니까!) 하지만 CTR은 이게 가능하다. 앞의 블록과 연관이 없기 때문이다. couter 값만 변경해주면 된다!

MAC (Message Authentication Code)

  • Integrity를 보장하려면 암호화만으로는 어렵다. 내용을 몰라도 조작 가능하니까!
  • Integrity를 보장하기 위해 사용하는 것이 MAC이다.
  • 메시지에 대한 인증을 제공한다. 이 메시지는 변조되지 않았다는 것을 인증. (Integrity 제공)
  • MAC을 이용하여 받은 메시지가 변조됐는지 확인한다.
  • CBC로 계산된다.

1) 메시지 전송 전에 MAC 알고리즘을 이용하여 MAC 값을 생성한다.
2) 메시지와 MAC 값을 같이 전송한다.
3) 수신 측은 받은 메시지를 같은 알고리즘, 같은 키로 MAC 값 계산을 한다. 그리고 나서 받은 MAC 값과 비교한다.
4) 같으면 변조 X, 다르면 변조 O

MAC Computation

  • CBC 모드의 맨 마지막 값이 MAC 값이다!
  • MAC 값은 plaintext와 같이 보내진다.
  • 수신자는 K도 알아야 한다.

Why does a Mac work?

예를 들어보자~
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 값을 계산할 수 없다.

Confidentiality and Integrity

  • 암호화 할 때, MAC 계산할 때 서로 다른 Key를 사용해야 한다.
  • Confidentiality, Integrity 둘 다 보장하고 싶다면 메시지에 MAC을 붙이고 암호화! -> 이걸 한 번에 처리할 수 없을까? 이슈되고 있음
post-custom-banner

0개의 댓글