PromleeBlog
sitemap
aboutMe
Menu
Welcome to
✨ Promlee Blog ✨
View 📈
Total: -
Today: -
추천 포스트
개인학습
정보보호이론
정보보호이론 개요
일반적인 암호화 기법
일반적인 암호화 기법
Classical Encryption
📅
🚀 표기법 정리
🚀 시프트 암호
🚀 아핀 암호
✅ 암호화
✅ 복호화
🚀 치환 암호
🚀 비제네 암호
🚀 순열 암호
🚀 선형 피드백 시프트 레지스터
🚀 LFSR 암호
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Add commentMore actions
🚀
표기법 정리 (Notation)
🔗
Z
m
=
0
,
1
,
.
.
.
,
m
−
1
g
m
o
d
p
:
g
를
p
로나눈나머지
10
m
o
d
3
=
1
729
m
o
d
31
=
16
(
729
=
23
∗
31
+
16
)
−
7
m
o
d
26
=
19
(
−
7
=
26
∗
(
−
1
)
+
19
)
평문공간
=
암호문공간
=
알파벳문자들
=
Z
26
Z_m = {0, 1, ..., m - 1}\\ g mod p: g를 p로 나눈 나머지\\ 10 mod 3 = 1\\ 729 mod 31 = 16 (729 = 23 * 31 + 16)\\ -7 mod 26 = 19 (-7 = 26 * (-1) + 19)\\ 평문 공간 = 암호문 공간 = 알파벳 문자들 = \mathbb{Z}_{26}
Z
m
=
0
,
1
,
...
,
m
−
1
g
m
o
d
p
:
g
를
p
로나눈나머지
10
m
o
d
3
=
1
729
m
o
d
31
=
16
(
729
=
23
∗
31
+
16
)
−
7
m
o
d
26
=
19
(
−
7
=
26
∗
(
−
1
)
+
19
)
평문공간
=
암호문공간
=
알파벳문자들
=
Z
26
🚀
시프트 암호 (Shift Cipher)
🔗
평문의 각 문자를 고정된 수만큼 이동시키는 암호화 방식
0
<
=
k
<
=
25
E
n
c
(
K
,
x
)
=
(
x
+
K
)
m
o
d
26
(
c
f
.
K
=
3
:
시저암호
)
D
e
c
(
K
,
y
)
=
(
y
−
K
)
m
o
d
26
0 <= k <= 25\\ Enc(K, x) = (x + K) mod \;26 \;\;\;(cf. K = 3: 시저 암호)\\ Dec(K, y) = (y - K) mod \;26\\
0
<=
k
<=
25
E
n
c
(
K
,
x
)
=
(
x
+
K
)
m
o
d
26
(
c
f
.
K
=
3
:
시저암호
)
Dec
(
K
,
y
)
=
(
y
−
K
)
m
o
d
26
예시: K = 9
암호화
shift (18 7 8 5 19) → +9 mod 26 → (1 16 17 14 2) BQROC
복호화
BQROC (1 16 17 14 2) → -9 mod 26 → (18 7 8 5 19) shift
공격
무차별 대입 공격: 비밀키에 대한 후보가 26개뿐이다.
알려진 평문 공격: 예시의 (shift, BQROC)의 경우, K = B - s = (1 - 18) mod 26 = 9
🚀
아핀 암호 (Affine Cipher)
🔗
선형 대수학과 모듈러 연산을 이용한 암호화 방식
F
o
r
K
=
(
α
,
β
)
w
h
e
r
e
α
,
β
∈
Z
26
a
n
d
g
c
d
(
α
,
26
)
=
1
E
n
c
(
K
,
x
)
=
(
α
x
+
β
)
m
o
d
26
D
e
c
(
K
,
y
)
=
α
−
1
(
y
−
β
)
m
o
d
26
For K = (\alpha ,\beta ) where \alpha, \beta \in \mathbb{Z}_{26} and gcd(\alpha, 26) = 1\\ Enc(K, x) = (\alpha x + \beta) mod \;26\\ Dec(K, y) = \alpha^{-1} (y - \beta) mod \;26\\
F
orK
=
(
α
,
β
)
w
h
ere
α
,
β
∈
Z
26
an
d
g
c
d
(
α
,
26
)
=
1
E
n
c
(
K
,
x
)
=
(
αx
+
β
)
m
o
d
26
Dec
(
K
,
y
)
=
α
−
1
(
y
−
β
)
m
o
d
26
✅
암호화
🔗
✅
복호화
🔗
공격 방식
브루트 포스 공격: 26 * 12(
α
\alpha
α
는 26의 약수가 아닌 수만 가능) = 312개의 키 후보
알려진 평문 공격: 예시의 (hot, AXG)의 경우 -> 연립방정식
7
α
+
β
=
0
m
o
d
6
7\alpha + \beta = 0\,mod\,6
7
α
+
β
=
0
m
o
d
6
14
α
+
β
=
23
m
o
d
6
14\alpha + \beta = 23\,mod\,6
14
α
+
β
=
23
m
o
d
6
🚀
치환 암호 (Substitution Cipher)
🔗
평문의 각 문자를 다른 문자로 대체하는 암호화 방식
E
n
c
(
K
,
x
)
=
π
(
x
)
D
e
c
(
K
,
y
)
=
π
−
1
(
y
)
Enc(K, x) = \pi(x)\\ Dec(K, y) = \pi^{-1}(y)\\
E
n
c
(
K
,
x
)
=
π
(
x
)
Dec
(
K
,
y
)
=
π
−
1
(
y
)
예시
π
=
{
A
(
0
)
→
2
,
B
(
1
)
→
7
,
C
(
2
)
→
9
,
.
.
.
,
Z
(
25
)
→
19
}
E
n
c
(
π
,
C
)
=
π
(
C
)
=
9
=
J
D
e
c
(
π
,
J
)
=
π
−
1
(
J
)
=
C
\pi = \{A(0) \rightarrow 2, B(1) \rightarrow 7, C(2) \rightarrow 9, ..., Z(25) \rightarrow 19\}\\ Enc(\pi, C) = \pi(C) = 9 = J Dec(\pi, J) = \pi^{-1}(J) = C
π
=
{
A
(
0
)
→
2
,
B
(
1
)
→
7
,
C
(
2
)
→
9
,
...
,
Z
(
25
)
→
19
}
E
n
c
(
π
,
C
)
=
π
(
C
)
=
9
=
J
Dec
(
π
,
J
)
=
π
−
1
(
J
)
=
C
공격 방식
브루트 포스 공격: 26!개의 키 후보 (약 4 * 10^26)
평문 선택 공격: n개의 평문-암호문 쌍을 이용하여 키를 찾는 방식 -> (26-n)!개의 키 후보
빈도 분석(Statistical Test): 알파벳의 빈도를 분석하여 키를 찾는 방식
🚀
비제네 암호 (Vigenère Cipher)
🔗
Monoalphabetic(단알파벳) -> Polyalphabetic(다알파벳)
K
=
K
1
K
2
.
.
.
K
n
w
h
e
r
e
K
m
∈
Z
26
E
n
c
(
K
,
x
1
x
2
.
.
.
x
m
)
=
(
x
1
+
K
1
)
m
o
d
26
,
(
x
2
+
K
2
)
m
o
d
26
,
.
.
.
,
(
x
n
+
K
m
)
m
o
d
26
D
e
c
(
K
,
y
1
y
2
.
.
.
y
m
)
=
(
y
1
−
K
1
)
m
o
d
26
,
(
y
2
−
K
2
)
m
o
d
26
,
.
.
.
,
(
y
n
−
K
m
)
m
o
d
26
K = K_1 K_2 ... K_n where K_m \in \mathbb{Z}_{26}\\ Enc(K, x_1 x_2 ... x_m) = (x_1 + K_1) mod \;26, (x_2 + K_2) mod \;26, ..., (x_n + K_m) mod \;26\\ Dec(K, y_1 y_2 ... y_m) = (y_1 - K_1) mod \;26, (y_2 - K_2) mod \;26, ..., (y_n - K_m) mod \;26\\
K
=
K
1
K
2
...
K
n
w
h
ere
K
m
∈
Z
26
E
n
c
(
K
,
x
1
x
2
...
x
m
)
=
(
x
1
+
K
1
)
m
o
d
26
,
(
x
2
+
K
2
)
m
o
d
26
,
...
,
(
x
n
+
K
m
)
m
o
d
26
Dec
(
K
,
y
1
y
2
...
y
m
)
=
(
y
1
−
K
1
)
m
o
d
26
,
(
y
2
−
K
2
)
m
o
d
26
,
...
,
(
y
n
−
K
m
)
m
o
d
26
관련 공격
브루트 포스 공격:
26
m
26^m
2
6
m
개의 키 후보
암호문 단독 공격: 카시스키 테스트와 같은 통계적 분석
알려진 평문 공격: 평문이 알려져 있으면 쉬움(m 이 알려져 있을 때)
🚀
순열 암호 (Permutation Cipher)
🔗
키
K
=
π
는
1
,
.
.
.
,
m
의순열
E
n
c
(
K
,
x
1
x
2
.
.
.
x
m
)
=
(
x
π
(
1
)
x
π
(
2
)
.
.
.
x
π
(
m
)
)
D
e
c
(
K
,
Y
1
Y
2
.
.
.
Y
m
)
=
(
Y
π
−
1
(
1
)
Y
π
−
1
(
2
)
.
.
.
Y
π
−
1
(
m
)
)
키 K=\pi\;는 {1,...,m} 의 순열\\ Enc(K, x_1 x_2 ... x_m) =( x_{\pi(1)} x_{\pi(2)} ... x_{\pi(m)})\\ Dec(K, Y_1 Y_2 ... Y_m) =( Y_{\pi^{-1}(1)} Y_{\pi^{-1}(2)} ... Y_{\pi^{-1}(m)})\\
키
K
=
π
는
1
,
...
,
m
의순열
E
n
c
(
K
,
x
1
x
2
...
x
m
)
=
(
x
π
(
1
)
x
π
(
2
)
...
x
π
(
m
)
)
Dec
(
K
,
Y
1
Y
2
...
Y
m
)
=
(
Y
π
−
1
(
1
)
Y
π
−
1
(
2
)
...
Y
π
−
1
(
m
)
)
위의 암호화 알고리즘을 해석하면
(
x
1
,
.
.
.
,
x
m
)
P
=
(
Y
1
,
.
.
.
,
Y
m
)
(x_1, ...,x_m)P=(Y_1, ... ,Y_m)
(
x
1
,
...
,
x
m
)
P
=
(
Y
1
,
...
,
Y
m
)
P
P
P
가 역행렬 일 경우 이것은 Hill 암호화 방식이 된다.
관련 공격
브루트 포스 공격:
m
!
m!
m
!
개의 키 후보
알려진 평문/선택된 평문 공격:
m
m
m
개의
독립적인 암호문
이 필요하여
P
−
1
P^{-1}
P
−
1
을 얻을 수 있다.
🚀
선형 피드백 시프트 레지스터 (Linear Feedback Shift Register, LFSR)
🔗
이전 상태의 선형 함수인 입력 비트를 가진 시프트 레지스터
예시 1)
x
m
+
3
=
x
m
+
1
+
x
m
x_{m+3}=x_{m+1}+x_m
x
m
+
3
=
x
m
+
1
+
x
m
을 만족하는 시프트 레지스터(선형 관계)
예시 2) 초기 값
x
1
=
0
,
x
2
=
1
,
x
3
=
0
,
x
4
=
0
x_1 = 0, x_2 = 1, x_3 = 0, x_4 = 0
x
1
=
0
,
x
2
=
1
,
x
3
=
0
,
x
4
=
0
그리고
x
5
=
0
x_5 = 0
x
5
=
0
을 주고
x
m
+
5
=
x
m
+
x
m
+
2
m
o
d
2
x_{m+5}=x_{m}+x_{m+2} mod 2
x
m
+
5
=
x
m
+
x
m
+
2
m
o
d
2
의 선형 관계를 사용하여 생성된 시퀀스는
0100010100110111100011
0100010100110111100011
0100010100110111100011
이다.
🚀
LFSR 암호 (LFSR Cipher)
🔗
선형함수
f
(
z
1
,
z
2
,
.
.
.
,
z
m
)
=
∑
i
=
1
l
c
i
z
i
에대해
,
상수
c
i
들과
키
K
=
(
k
1
,
.
.
.
,
k
l
)
가
(
Z
2
)
l
에
속함
E
n
c
(
K
,
x
1
,
x
2
,
.
.
.
,
x
m
)
=
(
x
1
,
x
2
,
.
.
.
,
x
m
)
+
(
k
1
,
k
2
,
.
.
.
,
k
l
)
D
e
c
(
K
,
y
1
,
y
2
,
.
.
.
,
y
m
)
=
(
y
1
,
y
2
,
.
.
.
,
y
m
)
+
(
k
1
,
k
2
,
.
.
.
,
k
l
)
k
j
=
f
(
k
j
−
l
,
k
j
−
l
+
1
,
.
.
.
,
k
j
−
1
)
f
o
r
l
+
1
<
=
j
<
=
m
선형 함수 f(z_1, z_2, ..., z_m) = \sum^l_{i=1}c_iz_i에 대해, 상수 c_i들과\;\\ 키 K=(k_1, ... , k_l)가 (\mathbb{Z}_2)^l에\; 속함\\ Enc(K, x_1, x_2, ..., x_m) = (x_1, x_2, ..., x_m) + (k_1, k_2, ..., k_l)\\ Dec(K, y_1, y_2, ..., y_m) = (y_1, y_2, ..., y_m) + (k_1, k_2, ..., k_l)\\ k_j = f(k_{j-l}, k_{j-l+1}, ..., k_{j-1}) for l+1<=j<=m\\
선형함수
f
(
z
1
,
z
2
,
...
,
z
m
)
=
i
=
1
∑
l
c
i
z
i
에대해
,
상수
c
i
들과
키
K
=
(
k
1
,
...
,
k
l
)
가
(
Z
2
)
l
에
속함
E
n
c
(
K
,
x
1
,
x
2
,
...
,
x
m
)
=
(
x
1
,
x
2
,
...
,
x
m
)
+
(
k
1
,
k
2
,
...
,
k
l
)
Dec
(
K
,
y
1
,
y
2
,
...
,
y
m
)
=
(
y
1
,
y
2
,
...
,
y
m
)
+
(
k
1
,
k
2
,
...
,
k
l
)
k
j
=
f
(
k
j
−
l
,
k
j
−
l
+
1
,
...
,
k
j
−
1
)
f
or
l
+
1
<=
j
<=
m
공격 방식
알려진 평문 공격
(
x
1
,
x
2
,
.
.
.
,
x
m
)
,
(
y
1
,
y
2
,
.
.
.
,
y
m
)
에서
k
1
,
.
.
.
,
k
l
를찾음
다음과같이행렬구성
:
[
k
1
k
2
.
.
.
k
l
k
2
k
3
.
.
.
k
l
+
1
.
.
.
.
.
.
.
.
.
.
.
.
k
l
k
l
+
1
.
.
.
k
2
l
−
1
]
[
c
1
c
2
.
.
.
c
l
]
=
[
k
l
+
1
k
l
+
2
.
.
.
k
2
l
]
(x_1, x_2, ..., x_m), (y_1, y_2, ..., y_m)에서 k_1, ... ,k_l를 찾음\\ 다음과 같이 행렬 구성:\\ \begin{bmatrix} k_1 & k_2 & ... & k_l\\ k_2 & k_3 & ... & k_{l+1}\\ ... & ... & ... & ...\\ k_{l} & k_{l+1} & ... & k_{2l-1} \end{bmatrix} \begin{bmatrix} c_1\\ c_2\\ ...\\ c_l \end{bmatrix} = \begin{bmatrix} k_{l+1}\\ k_{l+2}\\ ...\\ k_{2l} \end{bmatrix}
(
x
1
,
x
2
,
...
,
x
m
)
,
(
y
1
,
y
2
,
...
,
y
m
)
에서
k
1
,
...
,
k
l
를찾음
다음과같이행렬구성
:
k
1
k
2
...
k
l
k
2
k
3
...
k
l
+
1
...
...
...
...
k
l
k
l
+
1
...
k
2
l
−
1
c
1
c
2
...
c
l
=
k
l
+
1
k
l
+
2
...
k
2
l
만약 행렬이 역행렬을 가지면, (
c
1
,
.
.
.
,
c
m
c_1, ... ,c_m
c
1
,
...
,
c
m
)를 찾을 수 있다.