PromleeBlog
sitemap
aboutMe
Menu
Welcome to
✨ Promlee Blog ✨
View 📈
Total: -
Today: -
추천 포스트
개인학습
정보보호이론
해시 함수와 MAC
해시 함수
해시 함수
Hash Function
📅
🚀 해시 함수란
🚀 암호학적 해시 함수
🚀 SHA-1 및 SHA-2의 설계 논리
✅ SHA-1과 SHA-2의 라운드 함수
🚀 SHA-3의 설계 논리
🚀
해시 함수란 (What is a Hash Function)
🔗
임의의 크기의 데이터를 입력받아 고정된 크기의 출력을 반환하는 함수
예시: 비트별 XOR
Bit 1
Bit 2
...
Bit n
Block 1
x
11
x_{11}
x
11
x
12
x_{12}
x
12
...
x
1
n
x_{1n}
x
1
n
Block 2
x
21
x_{21}
x
21
x
22
x_{22}
x
22
...
x
2
n
x_{2n}
x
2
n
...
...
...
...
...
Block m
x
m
1
x_{m1}
x
m
1
x
m
2
x_{m2}
x
m
2
...
x
m
n
x_{mn}
x
mn
Hash Output
y
1
y_1
y
1
y
2
y_2
y
2
...
y
n
y_n
y
n
ex. 두 개의 블록
x
11
,
x
12
,
…
,
x
1
n
x_{11}, x_{12}, \ldots, x_{1n}
x
11
,
x
12
,
…
,
x
1
n
/
x
21
,
x
22
,
…
,
x
2
n
x_{21}, x_{22}, \ldots, x_{2n}
x
21
,
x
22
,
…
,
x
2
n
을 XOR하여
y
1
,
y
2
,
…
,
y
n
y_1, y_2, \ldots, y_n
y
1
,
y
2
,
…
,
y
n
을 반환
🚀
암호학적 해시 함수 (Cryptographic Hash Function)
🔗
임의 길이의 메시지를 입력받아
고정된 길이의 메시지 다이제스트
를 출력하는 함수
h
h
h
암호학적 해시 함수는 다음 조건을 만족해야 함
효율적 계산
(Computational Efficiency)
입력
m
m
m
이 주어지면
h
(
m
)
h(m)
h
(
m
)
을 효율적으로 계산할 수 있어야 함
단방향성
or
원본 숨김 저항성
(One-way or Pre-image Resistance)
y
y
y
가 주어졌을 때
h
(
m
′
)
=
y
h(m')=y
h
(
m
′
)
=
y
를 만족하는
m
′
m'
m
′
을 찾는 것이 계산적으로 불가능해야 함
제2 원본 숨김 저항성
or
약한 충돌 저항성
(Second Pre-image Resistance or Weak Collision Resistance)
m
m
m
이 주어졌을 때
h
(
m
′
)
=
h
(
m
)
h(m')=h(m)
h
(
m
′
)
=
h
(
m
)
을 만족하는
m
′
m'
m
′
을 찾는 것이 계산적으로 불가능해야 함
충돌 저항성
(Collision Resistance)
m
,
m
′
m, m'
m
,
m
′
이 주어졌을 때
h
(
m
)
=
h
(
m
′
)
h(m)=h(m')
h
(
m
)
=
h
(
m
′
)
을 만족하는
m
,
m
′
m, m'
m
,
m
′
을 찾는 것이 계산적으로 불가능해야 함
예시: MD5, HAVAL-128, SHA-1,
SHA-2
, SHA-3
🚀
SHA-1 및 SHA-2의 설계 논리 (Design Rationale of SHA-1 and SHA-2)
🔗
초기화 벡터 (IV: Initialization Vector)
메시지 블록 (Message Block)
압축 함수:c (Compression Function)
해시 출력 (Hash Output)
✅
SHA-1과 SHA-2의 라운드 함수 (Round Function of SHA-1 and SHA-2)
🔗
초기값
A
,
B
,
C
,
D
,
E
A, B, C, D, E
A
,
B
,
C
,
D
,
E
라운드 함수
f
t
(
B
,
C
,
D
)
f_t(B, C, D)
f
t
(
B
,
C
,
D
)
- 라운드 번호
t
t
t
에 따라 다른 논리 연산 수행
비트 순환 이동
A
A
A
와
B
B
B
비트는 각각 5 비트와 30비트 순환 이동
순환 이동은 비트를 왼쪽으로 회전시키며, 가장 왼쪽 비트는 가장 오른쪽 비트로 이동
연산 및 업데이트
각 라운드에서
A
,
B
,
C
,
D
,
E
A, B, C, D, E
A
,
B
,
C
,
D
,
E
는 각각
f
t
f_t
f
t
와 다른 연산을 통해 갱신됨
A
=
f
t
(
B
,
C
,
D
)
+
K
t
+
W
t
+
E
A = f_t(B, C, D) + K_t + W_t + E
A
=
f
t
(
B
,
C
,
D
)
+
K
t
+
W
t
+
E
와 같은 식으로 갱신
예: 첫 라운드에서 다음과 같은 연산 수행
A
=
(
(
A
<
<
5
)
+
f
t
(
B
,
C
,
D
)
+
E
+
K
t
+
W
t
)
A = ((A << 5) + f_t(B, C, D) + E + K_t + W_t)
A
=
((
A
<<
5
)
+
f
t
(
B
,
C
,
D
)
+
E
+
K
t
+
W
t
)
B
=
A
B = A
B
=
A
(기존
A
A
A
값을
B
B
B
에 저장)
C
=
B
<
<
30
C = B << 30
C
=
B
<<
30
D
=
C
D = C
D
=
C
E
=
D
E = D
E
=
D
🚀
SHA-3의 설계 논리 (Design Rationale of SHA-3)
🔗
스펀지 구조 기반: 데이터가 흡수된 후 결과 압축
f
f
f
는 블록 순열을 위한 함수로, XOR, AND, NOT 연산으로 구성됨