PromleeBlog
sitemap
aboutMe
Menu
Welcome to
✨ Promlee Blog ✨
View 📈
Total: -
Today: -
추천 포스트
개인학습
정보보호이론
해시 함수와 MAC
MAC: 메시지 인증 코드
MAC: 메시지 인증 코드
MAC: Message Authentication Codes
📅
🚀 메시지 인증 코드: MAC
✅ MAC의 속성
✅ 디지털 서명과의 비교
✅ MAC의 설계
🚀 해시 함수 기반 MAC: HMAC
🚀 HMAC 구성
🚀 HMAC의 보안성
🚀 블록 암호 기반 MAC: CBC-MAC
✅ 복습: CBC 암호화 모드
🚀 CBC-MAC 설명
🚀
메시지 인증 코드: MAC (Message Authentication Code: MAC)
🔗
메시지 무결성과 메시지 인증을 위한 코드
Alice와 Bob은 전송 중인 메시지
x
x
x
가 변조되지 않았음을 보장받고 싶음
Bob은 메시지
x
x
x
와 공유된 비밀 키
k
k
k
의 함수로서 MAC(y)을 생성
y
=
MAC
k
(
x
)
y = \text{MAC}_k(x)
y
=
MAC
k
(
x
)
Alice에게
(
x
,
y
)
(x, y)
(
x
,
y
)
를 전송
Alice는 공유된 비밀 키
k
k
k
와 수신된 메시지
x
x
x
를 사용하여
y
y
y
를 검증
보안 요구사항: 비밀키
k
k
k
가 없으면 MAC을 생성할 수 없어야 함
✅
MAC의 속성 (Properties of MAC)
🔗
암호학적 Checksum
MAC은 메시지의 무결성을 보장
대칭 기술
임의의 입력 길이 / 고정된 출력 길이
메시지 무결성
메시지 인증
부인 방지 없음 (No nonrepudiation)
✅
디지털 서명과의 비교 (Comparison with Digital Signature)
🔗
장점: 디지털 서명보다 빠름
단점: 부인 방지 없음
✅
MAC의 설계 (Design of MAC)
🔗
해시 함수 사용
블록 암호 사용
🚀
해시 함수 기반 MAC: HMAC (Hash-based MAC: HMAC)
🔗
암호학적 해시 함수를 기본 블록으로 활용
IP 보안 스위트, TLS(Transport Layer Security), SET(Secure Electronic Transaction) 등에서 사용
특정 가정 하에 HMAC의 보안 증명 가능
🚀
HMAC 구성 (Construction of HMAC)
🔗
K
K
K
의 왼쪽 끝에 0을 추가하여
b
b
b
비트 문자열
K
+
K^+
K
+
를 만든다.
S
i
=
K
+
⊕
ipad
S_i = K^+ \oplus \text{ipad}
S
i
=
K
+
⊕
ipad
를 계산한다. 여기서 ipad는 0x36이
b
/
8
b/8
b
/8
번 반복된 것이다.
S
i
S_i
S
i
에
M
M
M
을 추가한다.
H
(
S
i
∥
M
)
H(S_i \| M)
H
(
S
i
∥
M
)
을 계산한다.
S
o
=
K
+
⊕
opad
S_o = K^+ \oplus \text{opad}
S
o
=
K
+
⊕
opad
를 계산한다. 여기서 opad는 0x5C가
b
/
8
b/8
b
/8
번 반복된 것이다.
H
(
S
i
∥
M
)
H(S_i \| M)
H
(
S
i
∥
M
)
을
S
o
S_o
S
o
에 추가한다.
H
(
S
o
∥
H
(
S
i
∥
M
)
)
H(S_o \| H(S_i \| M))
H
(
S
o
∥
H
(
S
i
∥
M
))
을 계산하고 출력한다.
🚀
HMAC의 보안성 (Security of HMAC)
🔗
증명 가능한 보안을 제공할 수 있다. (특정 가정 하에 HMAC은 안전)
MAC의 유효한 출력을 생성하는 것은 사용된 해시 함수에 대해 다음 중 하나의 공격과 동일
공격자가 무작위로, 비밀로, 공격자에게 알려지지 않은 Ⅳ로 압축 함수의 출력 계산 가능
공격자가 무작위로, 비밀로, Ⅳ가 설정 된 해시 함수에서 충돌을 찾을 수 있음
⇒
\Rightarrow
⇒
사용된 해시 함수의 충돌을 찾는 것과 관련됨
🚀
블록 암호 기반 MAC: CBC-MAC (Block Cipher-based MAC: CBC-MAC)
🔗
블록 암호와 운영 모드 결합
AES와 CBC는 실무에서 가장 많이 사용됨
✅
복습: CBC 암호화 모드 (Review: CBC Encryption Mode)
🔗
Enc
(
K
,
P
i
)
=
{
EncBlock
(
K
,
I
V
⊕
P
1
)
첫 블록의 경우
EncBlock
(
K
,
C
i
−
1
⊕
P
i
)
다른 블록의 경우
\text{Enc}(K, P_i) =\begin{cases}\text{EncBlock}(K, IV \oplus P_1) & \text{첫 블록의 경우}\\\text{EncBlock}(K, C_{i-1} \oplus P_i) & \text{다른 블록의 경우}\end{cases}
Enc
(
K
,
P
i
)
=
{
EncBlock
(
K
,
I
V
⊕
P
1
)
EncBlock
(
K
,
C
i
−
1
⊕
P
i
)
첫
블록의
경우
다른
블록의
경우
Dec
(
K
,
C
i
)
=
{
DecBlock
(
K
,
C
1
)
⊕
I
V
첫 블록의 경우
DecBlock
(
K
,
C
i
)
⊕
C
i
−
1
다른 블록의 경우
\text{Dec}(K, C_i) =\begin{cases}\text{DecBlock}(K, C_1) \oplus IV & \text{첫 블록의 경우} \\\text{DecBlock}(K, C_i) \oplus C_{i-1} & \text{다른 블록의 경우}\end{cases}
Dec
(
K
,
C
i
)
=
{
DecBlock
(
K
,
C
1
)
⊕
I
V
DecBlock
(
K
,
C
i
)
⊕
C
i
−
1
첫
블록의
경우
다른
블록의
경우
🚀
CBC-MAC 설명 (Description of CBC-MAC)
🔗
CBC-MAC 생성
비밀 키
k
k
k
, 초기 값
I
V
IV
I
V
, 메시지
x
x
x
가
n
n
n
개의 블록
x
1
,
x
2
,
⋯
,
x
n
x_1, x_2, \cdots, x_n
x
1
,
x
2
,
⋯
,
x
n
으로 나누어졌을 때
y
1
=
Enc
B
l
o
c
k
(
k
,
I
V
⊕
x
1
)
y_1 = \text{Enc}_{Block}(k, IV \oplus x_1)
y
1
=
Enc
Bl
oc
k
(
k
,
I
V
⊕
x
1
)
y
i
=
Enc
B
l
o
c
k
(
k
,
y
i
−
1
⊕
x
i
)
y_i = \text{Enc}_{Block}(k, y_{i-1} \oplus x_i)
y
i
=
Enc
Bl
oc
k
(
k
,
y
i
−
1
⊕
x
i
)
2
≤
i
≤
n
2\leq i \leq n
2
≤
i
≤
n
에 대해 계산 후
(
x
,
y
n
)
(x, y_n)
(
x
,
y
n
)
를 전송
CBC-MAC 검증
(
x
,
y
n
)
(x, y_n)
(
x
,
y
n
)
이 주어졌을 때, 다음을 확인
y
n
=
?
CBC-MAC
k
(
x
)
y_n \stackrel{?}{=} \text{CBC-MAC}_k(x)
y
n
=
?
CBC-MAC
k
(
x
)
CBC-MAC은 메시지의
무결성
과
인증
을 보장