1. 암호화의 기본 개념
암호화의 5 가지 요소
1. 평문 : 수신자가 전달하고자 하는 메세지 원문, 암호화 알고리즘의 입력값
2. 암호문 : 암호화된 데이터, 암호화 알고리즘의 출력값
3. 암호화 알고리즘 : 평문을 암호문으로 변환하는 알고리즘
4. 키 : 암호화 알고리즘에서 특정한 형태로 치환하기 위해 사용되는 값
5. 복호화 알고리즘 : 암호문을 평문으로 변환하는 알고리즘
기법
-대칭 암호화 : 암호화, 복호화 알고리즘이 동일한 키를 사용
1. DES1(Feistel) :
0. 평문 L(i) (32bits)
1. expand2( L(i) ) -> L1(i)
3. L1(i) XOR Key3 -> L2(i)
4(중요). S-boxes4( L2(i) ) -> L3(i)
5. P-boxes( L3(i) ) -> L4(i) : 일대일 대칭, 2-3과정 추측을 막아줌.
F. L4(i) -> 평문 R(i+1)

1-1 DES 키 제작 과정
1. key(i) (64bits) -> L(i) (28bits) + R(i) (28bits) + 패리티 비트5 (8bits)
2. L(i), R(i) 에 circular shl value 6 -> L1(i), R1(i)
3. compress( L1(i), R1(i) )7 -> key(i+1)
+) i >= 17부터는 보안성 향상 x
1-2 DES취약점: key의 길이가 56bits밖에 되지않아 경우의 수가 비교적 적어 시간이 지나 점점 전수조사 8 공격에 취약해짐. 현대 컴퓨터로 몇시간 내로 풀 수 있음.
다중(2중), 3중 des 생긴 이유. 결국 DES랑 별로 차이가 없다는 것이 밝혀짐. 이후 AES사용
2. AES 9 (Non-Feistel) :
미국 정부의 요구에 따라
1. 처음부터 알고리즘이 공개적으로 밝혀짐.
2. 128, 192, 256 세가지 크기 key를 가짐.
3. 호환성 우수
라는 특징을 가졌다.
암호화 과정 :
AddRoundKey(state, Key[0])10
for (i in 1..9) {
SubBytes(state, S-box)11
ShiftRows(state) 12
MixColumns(state) 13
AddRoundKey(state, Key[i])
}
SubBytes(state, S-box)
ShiftRows(state)
AddRoundKey(state, Key[10])
+)Feistel ?
1. 평문의 블록을 L(0), R(0)로 나누고, 나눠진 두 블록에 2 연산을 수행.
2. L(i) = R(i-1) , R(i) = L(i) XOR14 F( R(i-1), K(i) ) 15

키가 길어질수록 보안이 높아짐.
ex)
Key size -> 경우의 수
64 bits -> 2의 56승
128 bits -> 2의 128승
256 bits -> 2의 256승
대칭 암호화의 한계점 :
1. how 키를 비밀리에 전달
2. n명과 1:1 통신시 키가 너무많이 필요
-비대칭 : 송신자, 수신자 have 공개키(A+), 개인키(A-)
ex)
A는 B+로 암호화 -> B는 B-로 복호화
ex2 전자서명)
A-로 서명, A+로 확인.
3. RSA
원리 : 아주 큰 소수 p, q
p*q -> N(trivial), N -> ?*?(wtf)
용어 :
Public Key : K+ = (N, e)
private Key: K- = d
암호화 : C = Ek+ (x) = M^e mod N
복호화 : M = Dk- (y) = C^d mod N
알고리즘 :
1. 소수 p, q 선택
2. N = p*q
3. ϕ(N) = (p-1)(q-1) 구한다.
4. 집합 E{e|1, 2, 3, ...ϕ(N)-1} 중 gcd{e, ϕ(N)} = 1 에서 e를 구한다.
5. d*e mod ϕ(N) = 1 에서 d를 구한다.
-> K+ = (N, e), K- = d
RSA는 안전할까?
-> RSA 약점:
해시함수: 큰 크기의 입력을 더 작은 크기의 출력으로 바꾼다.
1. 메세지 압축
2. 계산의 효휼
3. 단방향성
4. 충돌 방지: H(x1), H(x2).. = n일때 n1, n2..를 찾는것이 불가.
입력의 크기가 출력의 크기보다 커서 항상 충돌이 되는 경우가 생김,
눈사태 효과 : 입력이 1bit만 달라도 출력은 원래랑 반 이상이 바뀌어야 한다.
2. 대칭, 비대칭, 기본암호개념
- : DataEnscryptionStandard [본문으로]
- 비트수를 늘려줌 32bits -> 48bits [본문으로]
- 48bits의 크기를 가짐 [본문으로]
- 8개의 Sbox(substitution boxes), 각 Sbox는 6bits를 4bits로 변환 [본문으로]
- "parity bit", 오류를 검출하기 위한 정보이다. [본문으로]
- value = if(i = 1, 2, 9, 16) 1; else 2 [본문으로]
- compress뜻: 압축, 56bits -> 48bits [본문으로]
- 모든 가능한 경우를 전부 테스트하는 방법, brute force [본문으로]
- : AdvencedEnscryptionStandard [본문으로]
- state = state xor Key[0] [본문으로]
-

31 (16)이라는 값을 c7 (16)로 바꿨다. state를 2개의 4bytes데이터로 쪼개서 S-box에서 행, 열의 위치로 놓고 출력값 구함. [본문으로]
- state = state를 각 row마다 row의 값만큼 shift한 값 [본문으로]
- state = state를 행렬곱 연산 [본문으로]
- 두 비트가 같으면 0, 다르면 1을 출력하는 연산 [본문으로]
- K(i)는 Key, F( R(i), K(i) )는 암호화 함수 [본문으로]
- [본문으로]