블록 암호 기반 MAC
블록 암호를 이용해서 MAC를 생성하는 몇 가지 방법에 대해서 알아보자
암호 - 기반 메시지 인증 코드(Cipher-based Message Authentication Code)(CMAC)
암호-기반 메시지 인증 코드(CMAC)의 생성 과정은 다음과 같습니다.
- 메시지 M을 n개의 블록으로 나눕니다. 각 블록을 M1, M2, …, Mn으로 표기합니다.
- CMAC 알고리즘에 사용할 대칭키 K와 부속키 K1을 설정합니다.
- K는 k 비트의 암호키이며, K1은 n 비트의 부속키입니다.
- CMAC 알고리즘에서 사용할 암호화 함수를 선택합니다.
- AES나 3DES 암호화 함수 중 하나를 선택하며, 이에 따라 블록 크기인 b도 결정됩니다.
- AES의 경우 b는 128비트, 3DES의 경우 b는 64비트입니다.
- CMAC 알고리즘에서 사용할 중간 키를 생성합니다.
- 메시지 M의 길이가 b의 정수배인 경우, M을 b 비트 단위로 나눈 뒤, 각 블록과 K를 더한 후 암호화한 결과를 XOR하여 중간 키를 만듭니다.
- 만약 M의 길이가 b의 정수배가 아니면, M의 끝에 1을 추가한 후 나머지를 0으로 채워 b 비트 크기로 만든 다음, 이전과 같은 방식으로 중간 키를 생성합니다.
- 암호화 함수를 이용하여 C1, C2, …, Cn을 생성합니다.
- 먼저 C1은 K를 이용하여 M1을 암호화한 결과입니다.
- 그 다음부터는 C1을 이용하여 M2부터 Mn까지 순차적으로 암호화합니다.
- 즉, Ci는 Ki를 이용하여 [Mi ⊕ Ci-1]를 암호화한 결과입니다.( ⊕는 비트 단위 XOR 연산을 의미합니다)
- 마지막 블록 Cn을 이용하여 메시지 인증 코드 T를 생성합니다.
- T는 Cn과 K1을 이용하여 암호화한 결과의 MSB(Tlen) 비트입니다.
- 여기서 Tlen은 T의 비트 길이를 의미합니다.
이러한 과정을 통해 생성된 T는 메시지 인증 코드 또는 태그(tag)로 사용됩니다. T를 함께 전송하면 수신자는 이를 검증하여 메시지가 위변조되지 않았음을 확인할 수 있습니다.
식으로 표현한 CMAC
총 n개의 블록으로 이루어진 메시지 M = {M1, M2, …, Mn}이 있다고 하자.
- M1을 K를 이용하여 암호화하여 C1을 생성한다.
- C1 = E(K, M1)
- C1과 M2를 Exclusive-OR 연산한 결과를 K를 이용하여 암호화하여 C2를 생성한다.
- C2 = E(K, M2 ⊕ C1)
- C2와 M3을 Exclusive-OR 연산한 결과를 K를 이용하여 암호화하여 C3을 생성한다.
- C3 = E(K, M3 ⊕ C2)
- 이전 단계에서 생성한 Cn-1, Mn, K1을 Exclusive-OR 연산한 결과를 K를 이용하여 암호화하여 Cn을 생성한다.
- Cn = E(K, MN ⊕ Cn-1 ⊕ K1)
- Cn의 상위 Tlen 비트를 MAC(Tag)으로 지정한다.
- Tag = MSBs(Cn, Tlen)
따라서, CMAC의 핵심은 K를 이용하여 블록들을 암호화하는 과정과 마지막 블록에서 MAC(Tag)를 생성하는 것이다
마지막 태그는 무엇으로 암호화 될까?
마지막에 태그를 생성할 때는 Cn을 암호화하는데, 일반적으로 MSB(Tlen)개의 비트만을 취하여 태그 T를 생성합니다.
이때 사용되는 암호화 함수는 CMAC 알고리즘에서 사용한 암호화 함수와 동일한 함수를 사용합니다.
예를 들어, AES를 사용한 CMAC에서는 마지막 단계에서 Cn을 AES로 암호화하여 태그 T를 생성합니다.
암호 블록 체인 카운터-메시지 인증 코드(CCM)
암호 블록 체인 카운터-메시지 인증코드(Counter with CBC-MAC, CCM)는 인증과 암호화를 한번에 처리할 수 있는 공개 암호화 기술 중 하나이다.
CCM은 카운터 모드(Ctr)와 CBC-MAC을 결합하여 인증과 암호화를 수행합니다.
인증 과정 설명
- 입력값 N, A, P를 블록으로 나눕니다. (B_0, B_1, …, B_r)
- 첫 번째 블록 B_0에는 비표(N), 유관 데이터(A) 및 평문(P)의 길이를 나타내는 형식 비트가 추가됩니다.
- 그 다음으로 0 또는 A를 포함하는 여러 개의 블록이 이어집니다.
- 그리고 그 다음으로 0 또는 P를 포함하는 여러 개의 블록이 이어집니다.
- 이렇게 이어진 블록 열은 CMAC 알고리즘의 입력값으로 사용됩니다.
- 이 알고리즘의 결과로 길이가 Tlen인 MAC 값이 생성됩니다. 이 값은 태그(Tag)라고도 합니다.
암호화 과정 설명
- 카운터 열 생성
- CCM에서는 CTR 모드를 사용하여 평문을 암호화합니다. 이를 위해 카운터 열을 생성해야 합니다. 카운터 열은 다음과 같이 생성됩니다.
- 카운터 Ctr_0 : 인증 태그 생성에 사용됩니다. 카운터 값은 1로 고정합니다.
- 나머지 카운터 : 평문 블록의 개수에 따라 카운터 값을 증가시켜 생성합니다. 예를 들어, 평문이 3개 블록으로 이루어져 있다면 카운터 값은 2, 3, 4가 됩니다.
- CCM에서는 CTR 모드를 사용하여 평문을 암호화합니다. 이를 위해 카운터 열을 생성해야 합니다. 카운터 열은 다음과 같이 생성됩니다.
- 인증 태그 생성
- CTR 모드를 사용하여 Ctr_0 값을 이용하여 인증 태그를 생성합니다.
- 이때, 인증 태그를 생성하기 위해 암호화된 카운터 Ctr_0 값과 비표 N, 유관 데이터 A를 이용하여 메시지 인증 코드를 생성합니다.
- 암호화된 태그 생성 : 출력된 비트 중 Tlen 개의 유효 비트를 Tag와 XOR하여 암호화된 태그를 생성합니다.
- CCM에서는 CBC-MAC을 이용하여 암호화된 태그를 생성합니다.
- CBC-MAC에서는 암호화된 카운터 Ctr_0 값을 먼저 생성합니다. 그 후 에, CBC-MAC을 이용하여 태그를 생성합니다.
- 평문 암호화 및 암호문 생성
- CTR 모드를 이용하여 평문을 암호화하고, 암호화된 태그를 평문과 XOR 연산하여 생성된 평문 암호문에 추가합니다.
- 이후, 최종적으로 암호화된 메시지가 생성됩니다.
레퍼런스
728x90
'Computer Science > Security' 카테고리의 다른 글
RSA는 무엇인가? (0) | 2023.04.05 |
---|---|
공개 키 (0) | 2023.04.05 |
HMAC (0) | 2023.04.04 |
메시지 다이제스트 (0) | 2023.04.03 |
SHA 안전 해시 함수는 무엇인가 (0) | 2023.04.03 |