1. 스트림(Stream) 암호
1) 특징
- 일회성 암호방식과 같다.
- 길이가 n개인 키를 가지고, 이 키를 긴 키스트림으로 늘인다.
2) 방법
- 암호화 : 키스트림과 평문 P을 XOR연산을 하여 암호문 C를 만든다.
- 복호화 : 암호화에 사용했던 똑같은 키스트림을 생성하고, 암호문과 XOR연산하면 평문이 만들어진다.
ex) P = P0P1P2.., S = S0S1S2.... 일때,
암호문 C는 C0 = P0⊕S0 , C1 = P1⊕S1 , ..... 이되고, C = C0C1C2... 이 된다.
2. A5/1
1) 방식 : X, Y, Z라고 라벨붙인 3개의 선형 피드백 시프트 레지스터를 사용한다. (하드웨어방식)
- 레지스터 X는 19비트, Y는 22비트, Z는 23비트로 구성됨 총 64비트로 구성
① maj(x, y, z)로 다수결 기능 수행 함수로 0 또는 1을 반환
ex) maj(x8, y10, z10) = maj(0,1,0) = 0 (0이 더많으므로)
② 메이저값과 같으면 각 레지스터에서 XOR연산을 수행한다. 수행한 결과는 각 레지스터의 0번째로 들어간다.
(나머지는 값은 오른쪽으로 shift된다.)
x8 = m이면 , t = x13⊕x16⊕x17⊕x18 , xi = xi-1
y10이 m이면, t = y20⊕y21 , , yi = yi-1
z10이 m이면, t = z7⊕z20⊕z21⊕z22, , zi = zi-1
③ 키스트림을 생성한다.
s = x18⊕y21⊕z22 (한 비트) 따라서 1byte라고 하면 8번 반복해야됨.
3. RC4
1) 특징 : 스트림 암호이지만 A5/1은 하드웨어로 설계되어잇으면 RC4는 소프트웨어로 구현되어있다.
2) 방식
- 한번에 한번의 키스트림 Byte를 생성함.
- 256byte의 값의 순열이 들어있는 룩업테이블(검색표)을 만듬 키스트림 한 바이트가 생성될때마다 검색표가 수정됨.
ⓐ 초기화 단계 (The Key-scheduling Algorithm; KSA)
256바이트의 state vector를 0, 1, 2, ... 255로 초기화시킨다.
또한 키배열(K[0] K[1] K[2] ... K[255])도 생성되는데, 이곳에는 키가 복사된다.
만약, 키의 길이가 256바이트라면 그대로 복사시키고, 256바이트보다 짧다면, 키배열이 꽉 찰때까지 반복적으로 복사한다.
이제, 상태 배열과 키배열 256바이트가 준비되어있을 것이다. 이제, 키배열을 이용하여 상태배열을 swap해준다.
4. 블록 암호
- 평문을 일정한 크기의 블록으로 나누고, 고정된 크기를 가지는 블록 단위으 ㅣ암호문을 생성
- 여러번의 회전에 걸쳐 함수 f를 반복 수행하는 과정을 거쳐 평문으로부터 암호문이 생성됨
- 함수 f는 이전 회전의 출력과 키 값에 의해 정해지는데, 각 회전마다 반복적으로 적용되기 때문에 회전함수라고 불림
5. 페이스텔 암호
- 페이스텔 암호는 특정한 암호체계를 지칭하는 게 아니라 일반적인 암호의 설계원리를 의미한다.
- 평문 p는 왼쪽과 오른쪽으로 반반 나뉘어 구성된다. P = (L0, R0)
1) 방법
각 i = 1,2,....,n번 째 회전에서 새로운 왼쪽 반과 오른쪽 반은 다음 규칙에 따라 계산된다.
Li= Ri-1
Ri= Li-1 ⊕ F(Ri-1,Ki)
Ki는 i번째 회전에 사용되는 보조키이고, 키 스케줄 알고리즘에 따라 키로부터 얻어진다.
따라서 최종 암호문 C는 마지막 회전의 출력이다. C = (Ln,Rn)
'Major > Security' 카테고리의 다른 글
[시스템 보안] RC4 알고리즘 구현(C++) (0) | 2021.10.18 |
---|