Chapter 12. Message Authentication Codes

박병준·2022년 5월 26일
0

컴퓨터 보안

목록 보기
12/14

Message Authentication Code

다음의 공격들을 예방한다.

  • Masquerade(다른 사람으로 가장해서 작업) -> Authentication 필요
  • 내용 변조, 순서 변경, 시간 값 변조 -> Integrity 필요

MAC(Message Authentication Code)

Authentication과 Integrity를 동시에 제공하는 것 이다.
메시지와 key가 함수에 들어간다.

  • MAC = Keyed Hash

MAC 사용 - 3가지 방법

  • Message Authentication
    M: 메시지 원본, K: Key
    송신: [M + MAC(K, M)]를 송신 -> 원본 메시지에 key를 넣은 MAC을 붙여서 전송하는 것
    수신: 자기가 가지고 있는 key를 가지고, MAC을 생성해보고, 수신한 것과 결과가 같은지 비교함으로써 Authentication

  • Message Authentication and Confidentiality
    K1: MAC용 key
    K2: Encryption을 위한 key

    1. Plaintext에 Authentication 하는 방법
      K1을 이용해 MAC을 생성 후, M에 붙인다 (M+MAC(K1, M)) -> output 1
      output 1을 K2를 이용해 Encryption 한다. -> output2
      output2를 전송한다.
      수신자는 K2로 먼저 Decryption 한다 -> output 1
      output 1의 M과 K1을 가지고 MAC을 생성한다.
      이 MAC 값과 output 1에 붙여져 있는 MAC 값을 비교한다.

    2. 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번 사용한다.


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의 요구조건에 맞지 않음(불안전)

  1. 공격자가 한 블록짜리 메시지 쌍을 보고 (X, T)
  2. 두 블록을 만든다 -> 한 블록은 X, 다음 블록은 (X xor T)
  3. 이렇게 Mac을 돌리면 여전히 T가 나온다.
  4. MAC(K, X) = T -> MAC(K || (X xor T)) = T

이러한 문제를 해결하기 위해서 나온 게 CMAC이다.
똑같이 initial vector 없고 피드백해서 진행하다가, 마지막 block에서 또 다른 key를 넣어 xor 한다.

이를 통해, 앞에 언급된 공격이 불가능해진다.


Authenticated Encryption(AE)

Confidentiality와 Authenticity를 동시에 지키는 암호 시스템

  1. encryption하고 hash 하겠다 -> 안전성 보장되지 않음

  2. Authentication followed by encryption -> Encryption 하고 MAC 하기

  3. Encryption followed by authentication -> MAC하고 Encryption 하기

  4. 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는 병렬화 가능하지만 CMAC은 결과받아서 연산해야 하기 때문에 CCM은 못 한다.

Galois/Counter Mode에서는 병렬화가 가능하다.

  1. Encyption은 똑같이 CTR mode 사용한다.

  2. 이렇게 해서 나온 Ciphertext에다가 key material을 이용해 authenticator tag를 만든다.
    CCM은 Encryption과 Authentication을 따로 진행하지만, Galois는 Encryption을 먼저 하고 거기에 tag 붙이는 방식.

  3. Encryption 빼고 MAC만 하도록 쓸 수도 있다. -> GMAC

  4. 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) 사용한다.

아래 사진에서 (a)를 보면, tag(Ym)를 출력하기 위해, feedback을 계속 받아가며 연산을 해나간다. -> 그럼 병렬화가 안 되는 거 아닌가?

  • CBC mode에서는 매번 feedback을 받은 것과 key를 입력받아 encryption algorithm을 돌렸는데, GHASH는 단순히 key의 hash 값과 곱하기 연산을 수행한다.
  • 곱하기 연산이기 때문에, 그림에 작성된 식처럼 풀어서 식을 작성할 수 있다.
  • 이렇게 따로 연산할 수 있으므로, 병렬화가 가능하다.


출처
https://hororolol.tistory.com/476?category=897521
[Cryptography and Network Security: Principles and Practices]

profile
뿌셔뿌셔

0개의 댓글