관리 메뉴

너와 나의 스토리

[컴퓨터 보안] Message Authentication Code / HMAC(Hash MAC) / CMAC(Cipher-based MAC) / Authenticated Encryption(CCM/GCM) 본문

Computer Security

[컴퓨터 보안] Message Authentication Code / HMAC(Hash MAC) / CMAC(Cipher-based MAC) / Authenticated Encryption(CCM/GCM)

노는게제일좋아! 2020. 12. 4. 18:23
반응형

Message Authentication Code

  • 다음의 공격들을 예방한다.
    • Masquerade(다른 사람으로 가장해서 작업) -> Authentication 필요
    • 내용 변조, 순서 변경, 시간 값 변조 -> Integrity 필요
  • MAC(Message Authentication Code): Authentication과 Integrity를 동시에 제공하는 것
    • 메시지와 key가 함수에 들어감.
    • MAC = Keyed Hash

 

 

MAC 사용 - 3가지 방법

  1. 목적: Message Authentication
    • M: 메시지 원본, K: Key
    • 송신: [M + MAC(K, M)]를 송신 -> 원본 메시지에 key를 넣은 MAC을 붙여서 전송하는 것
    • 수신: 자기가 가지고 있는 key를 가지고, MAC을 생성해보고, 수신한 것과 결과가 같은지 비교함으로써 Authentication
  2. 목적: Message Authentication and Confidentiality
    • K1: MAC용 key, K2: Encryption을 위한 key
    • Plaintext에 Authentication 하는 방법
      1. K1을 이용해 MAC을 생성 후, M에 붙인다 (M+MAC(K1, M)) -> output 1
      2. output 1을 K2를 이용해 Encryption 한다. -> output2
      3. output2를 전송한다.
      4. 수신자는 K2로 먼저 Decryption 한다 -> output 1
      5. output 1의 M과 K1을 가지고 MAC을 생성한다.
      6. 이 MAC 값과 output 1에 붙여져 있는 MAC 값을 비교한다. 
    • Ciphertext에 Authentication 하는 방법
      • M을 K2를 이용해 Encryption 한다.
      • 그 결과에 K1 이용해 MAC을 생성하여 붙인다. -> output 1
      • 수신자는 output 1의 E(K2, M)을 K2를 이용해 Decryption 하여 M를 얻는다.
      • output 1에 붙어있는 MAC과 E(K2, M)을 기반으로 자신이 생성한 MAC과 비교한다. 

 

 

MACs Based on Hash Function: HMAC

  • Cryptographic hash function으로부터 MAC을 생성하는 방법
  • "MD4, SHA같은 hash function이 DES같은 symmetric block cipher보다 빠르다"라는 동기로 HMAC을 사용하게 됨
  • IP security의 MAC 위해서 주로 HMAC을 사용한다.
  • hash를 2번 사용

  • ipad, opad는 처음부터 정해진 값

 

 

Cipher-based MAC: CMAC

  • DAA(Data Authentication Algorithm)으로부터 CMAC 만들어짐.
  •  DAC
    • initial vector 없는 CBC mode라고 생각하면 된다. 
    • 아래 chain의 결과물을 DAC(Data Authentication Code)라고 한다.

  • 문제: 공격이 가능함.
  • X: plaintext
  • X가 한 블록 짜리라고 하자. 그러면 initial vector를 안 넣으니까, 결국은 K(key)를 가지고 Encryption 한 번 한 것과 같다.
  • 공격자가 MAC을 만드는 방법 -> MAC의 요구조건에 맞지 않음(불안전)
    • 공격자가 한 블록짜리 메시지 쌍을 보고 (X, T)
    • 두 블록을 만든다 -> 한 블록은 X, 다음 블록은 (X xor T)
    • 이렇게 Mac을 돌리면 여전히 T가 나온다.
    • MAC(K, X) = T -> MAC(K || (X xor T)) = T
  • 이러한 문제를 해결하기 위해서 나온 게 CMAC이다. 
    • 똑같이 initial vector 없고 피드백해서 진행하다가, 마지막 block에서 또 다른 key를 넣어 xor 한다.
      • DAC: $Block_{n-1}$ xor $Block_n$ 에다가 또 다른 key(K1)을 추가
    • => $Block_{n-1}$ xor $Block_n$ xor K1 
    • 이를 통해, 앞에 언급된 공격이 불가능해진다.

 

Authenticated Encryption(AE)

  • Confidentiality와 Authenticity를 동시에 지키는 암호 시스템
  • 방법:
    • encryption하고 hash 하겠다 -> 안전성 보장되지 않음
    • Authentication followed by encryption -> Encryption 하고 MAC 하기
    • Encryption followed by authentication -> MAC하고 Encryption 하기
    • Encryption 따로, MAC 따로 하기 

 

Counter with Cipher Block Chaining-Mesage Authentication Code(CCM)

  • Counter mode로 Encryption하고 CBC mode로 MAC 함. -> Encryption과 MAC을 독립적으로 연산 (counter로 연관관계 줌)
  • 무선 랜에 보안을 추가하기 위해 나온 NIST 표준
  • Key algorithmic ingredients:
    • AES encryption algorithm
    • CTR mode of operation 
    • CMAC authentication alogirthm
  • 하나의 Key로 encryption과 MAC 알고리즘 둘 다에서 사용함.

 

CCM encryption (Encryption & MAC)

  • Authentication -> CMAC
  • Encryption -> Counter
    • CMAC, CTR 각각 plaintext를 받아 독립적으로 연산을 수행 후, 나중에 합친다.
    • CMAC을 거쳐서 나온 결과와 Encryption 한 결과는 XOR 함.
    • 그리고 CTR mode와 두 연산 합치는 부분에서 각각 counter 값이 사용되는데, 이것들의 연관관계를 통해 의존성을 부여한다.
  • 어떤 내용을 숨기면서 Integirty와 Authentication을 보장할 것.
  • Authentication 하면서 Encryption 할 데이터
    • 예: payload 할 데이터 
  • Encryption 안 하고 없고 Authentication만 할 데이터 -> Associated data
    • 예: Header의 IP address
      • 데이터가 어디서 왔는지 알아야 하니까 암호화할 필요는 없지만, 변조되면 안 되니 인증이 필요한 데이터
  • nonce
    • replay 공격을 막아야 하는 데이터
    • 매번 nonce 값을 바꿔서 보냄 -> 데이터가 복제돼도 nonce 값이 과거와 같으면 잘못된 데이터임을 확인할 수 있음.

 

 

Galois/Counter Mode (GCM)

  • CCM의 성능상 문제 
    • 병렬화가 불가능
      • CTR modes는 병렬화 가능하지만 CCM은 못 함. -> CMAC 결과받아서 연산해야 해서 
  • Galois/Counter Mode에서는 병렬화가 가능하다.
    • Encyption은 똑같이 CTR mode 사용함.
    • 이렇게 해서 나온 Ciphertext에다가 key material을 이용해 authenticator tag를 만듦
      • CCM은 Encryption과 Authentication을 따로 진행하지만, Galois는 Encryption을 먼저 하고 거기에 tag 붙이는 방식.
    • Encryption 빼고 MAC만 하도록 쓸 수도 있다. -> GMAC
    • Authentciation에서 Galois field(GF) 사용한다. 
  • GCM은 두 가지 함수를 사용한다:
    • MAC: GHASH - keyed hash function 사용
    • Encryption: GCTR - CTR mode를 약간 바꾼 것. 연산을 한 번씩 할 때마다, 값이 하나씩 증가하는 값을 사용

 

GHASH

  • H = E(K, $O^{128}$) -> key가 정해지면 hash 값 정해짐
  • GF($2^{128}$ 사용함 -> plaintext 표현할 때, 127차까지 사용 가능함
  • 아래 그림 (a)를 보면, tag($Y_m$)를 출력하기 위해, feedback을 계속 받아가며 연산을 해나간다. -> 그럼 병렬화가 안 되는 거 아닌가?
    • CBC mode에서는 매번 feedback을 받은 것과 key를 입력받아 encryption algorithm을 돌렸는데, GHASH는 단순히 key의 hash 값과 곱하기 연산을 수행한다. 
    • 곱하기 연산이기 때문에, 그림에 작성된 식처럼 풀어서 식을 작성할 수 있다. -> $GHASH_H$(x)
    • 이렇게 따로 연산할 수 있으므로, 병렬화 가능!

  • Figure 12.11에서 GCTR이 Figure 12.10 전체를 말하는 것.

 

 

 

 

출처:

- [Cryptography and Network Security: Principles and Practices]

반응형
Comments