정보보안 - 블록 암호 / 스트림 암호
대칭키 암호
- 대칭키 암호 = 공통키 암호
- 비대칭키 암호 = 공개키 암호
현대 블록 암호
- 개요
- 기본 개념
- 대칭키 블록 암호는 n-비트 평문 블록을 암호화하거나 n-비트 암호문블록을 복호화, k비트 키를 사용
- 복호화 알고리즘은 암호 알고리즘의 역함수, 동일한 비밀키를 사용
- 메시지의 길이가 n비트보다 작다면 n비트 블록을 만들기 위하여 padding 추가
- 대칭키 암호를 안전하게 사용하는 필수 사항
- 강한 암호 알고리즘이 있어야 함
- 비밀키를 안전한 방법으로 획득하고 보관해야 함
- 치환(Substitution) 과 전치(Transposition)
- 현대 블록 암호는 치환 암호 혹은 전치 암호로 동작
- 암호기법 : 치환, 전치, 블록, 스트림, 합성
- 치환 암호로 설계되면, 평문 비트의 값은 임의의 값으로 대체. (1->0, 0->1)
- 교환
- 평문과 암호문의 0과 1의 개수다 다르다.
- 전치 암호로 설계되면, 각각의 비트는 단지 재배열된다.
- 위치변경
- 0과 1중 하나의 값을 가질 수 있다.
- n비트 평문 혹은 암호문의 개수는 2의 n승이다.
- 평문을 암호화할 경우 전치 암호의 특성(0과 1의 개수가 유지)는 전수조사 공격에 치명적이다.
- 현대 블록 암호의 구성요소
- 개요
- 확산, 혼돈과 같은 성질을 만족시키기 위하여 전치 요소, 치환 요소, 그 밖의 요소로 결합
- 공격 방지 암호를 위해 이동요소(shift), 교환요소(swap), 분할요소(split), 조합요소 뿐만 아니라 전치 장치(transposition, P-box)와 치환 장치(substitution, S-box)와 XOR 연산의 조합으로 만듬.
- 대칭키 암호 : 뒤죽박죽 섞음 > 스크램블드 에그와 유사
- P-Box
- 문자 단위로 암호화를 수행했던 고전 전치 암호를 병렬적으로 수행
- 단순(straight), 확장(extension), 축소(compression) P-박스로 세 가지 종류가 있음.
- 축소 P-박스
- n 비트를 입력받아 m비트를 출력,
n>m
을 만족
- 입력 중에 특정 비트는 소실
- 1, 2, 3, 4, 5 (5종)입력 -> 1, 2, 3 (3종)출력
- 확장 P-박스
n<m
을 만족.
- 입력 비트 중 특정 비트는 한 개 이상의 출력비트와 연결.
- 비트를 치환하고 동시에 다음 단게에서 비트의 양을 증가시키고자 할 때 사용
- 1, 2, 3 (3종)입력 -> 1, 2, 3, 4, 5 (5종)출력
- 역함수의 존재성 : 단순 P-박스는 역함수가 존재하지만 나머지는 존재하지 않는다.
- S-Box
- 치환 암호의 축소 모형. S-박스는 입력과 출력의 개수가 달라도 된다.
- 역함수의 존재성 : 입출력 관계가 테이블 혹은 수학적 관계로 정의되는 암호임. 존재할 수도 있고 없을 수도 있다. 역함수가 존재하면 입출력 비트 개수가 동일하다.
- Substitution, Swap, Split, Shift, Combine, Exclusive-OR 이용
- 합성 암호(product Ciphers)
- 개요
- Shannon이 소개
- 치환, 전치, 그리고 기타의 구성요소를 결합한 복합적인 암호
- 확산(Diffusion) 과 혼돈(Confusion)
- 설계된 블록 암호가 확산과 혼돈 두 가지 중요한 성질을 갖도록 하는 것
- 확산 : 암호문과 평문 사이의 관계를 숨기는 것
- 혼돈 : 암호문과 키의 관계를 숨기는 것
- 키의 단일비트가 변화하면 암호문의 모든 비트가 변화함
- 라운드(Rounds)
- 확산과 혼돈은 각 반복이 S-박스, P-박스 그리고 기타 구성 요소들의 결합을 의미하는 반복적 합성 암호를 사용하여 얻어짐
- 반복적으로 사용되는 합성 암호를 라운드(round) 라고 칭함
- 합성 암호의 종류
- Feistel 암호
- DES를 포함해서 대부분의 대칭 블록 암호 알고리즘은 1973년 IBM 의 Horst Feistel 이 최초로 소개한 구조를 따라 만들어짐
- Feistel 암호 특징
- 페이스텔 구조에서 네트워크라는 이름은 그 구성도가 그물을 짜는 것과 같이 교환되는 형태로 구성되어 있기 때문에 붙여짐
- 원하는 만큼 라운드 수를 늘릴 수 있음. 라운드 수를 아무리 늘려도 복호화할 수 없게 될 염려가 없음
- 암호화/복호화 알고리즘을 따로 구현할 필요가 없음
- Feistel 암호 예시
-
64비트 평문을 32비트 2개 (L1 |
R1) 로 쪼갬 |
- Round1
- Mixer 과정
- R1 을 F(Round 함수)를 거쳐 결과값을 구함
- Key 사용 (K1 : Round 마다 값이 틀림)
- L1 과 결과값을 XOR
- Swaper 과정
- 위 결과를 새로운 R2로 함
- 과정을 거치지 않은 R1을 L2로 함
- Round2…
- (라운드가 3라운드 이상일 것)
- (짝수 라운드 구성)
- (역변환이 가능할 것 -> 별도의 복호화 과정이 필요 없음)
- (속도가 빠름)
- 대칭 블록 암호 구현
- 블록 크기(Block Size)
- 블록 길이가 크다는 것은 더 강한 보안을 의미하지만 암/복호화 속도는 떨어짐
- 128비트의 블록 크기는 이를 조화시키는 합리적인 크기임
- 키 길이(Key Size)
- 키 길이가 길다는 것은 더 강한 보안을 의미하지만 속도가 떨어짐
- 보통 128비트의 길이를 사용
- 라운드 수(Number of rounds)
- 라운드 수를 증가하면 보안을 강화할 수 있다. 페이스텔 암호의 핵심
- 보통 16 라운드
- 서브키 생성 알고리즘(Subkey generation algorithm)
- 이 알고리즘이 복잡하면 복잡할수록 암호해독이 어려워짐
- 라운드 함수(round function)
- 이 알고리즘이 복잡하면 복잡할수록 암호해독이 어려워짐
- SPN (Substitution Permutation Network)
- S-Box : 치환 암호의 축소형
- 64bit => 16bit * 4 (4행 16열)
- 6개의 입력값을 받아 4개의 출력값을 출력
- 3행 6열의 값 1
- b1, b6 = 행
- b2, b3, b4, b5 = 열
- 3행 6열 : 101101
- 값 1 : 0001
- SPN 암호 예시
- Plain Text 를 Key0 와 XOR 수행
- S1, S2, S3, S4
- P box (S1, S2, S3, S4 결과 내 각각을 자리이동)
- 위 결과를 Key1 와 XOR 수행
- …
- 현대 스트림 암호
- 개요
- 현대 스트림 암호에서 암호화와 복호화는 한 번에 비트를 생성함
- 스트림 암호는 블록 암호보다 빠름
- 하드웨어 구현 또한 블록 암호보다 용이
- 키 스트림을 어떻게 생성하는지가 주 관심사
- 동기식과 비동기식
- 예시
- P => Pn, Pn-1 … P2, P1
- K => Kn, Kn-1 … K2, K1
- 의사난수 생성기 이용-PRNG / 언젠가 반복되나 난수의 효과
- 보통 128bit
- C => Cn, Cn-1 … C2, C1
- 동기식 스트림 암호
- 개요
- 동기식 스트림 암호에서 키 스트림은 평문 혹은 암호문 스트림과 독립적
- 비동기식 스트림암호:이전 평문이나 암호문에 종속적 (자기동기식)
- 키 스트림은 평문 혹은 암호문 비트와 키 비트 사이에 어떠한 관계도 없이 생성
- One-Time Pad
- 동기식 스트림 암호중에서 가장 간단하고 안전한 암호
- Gilbert Vernam에 의해 설계됨
- 암호화를 수행할 때마다 랜덤하게 선택된 키스트림을 사용
- 해독 불가능하다는 것이 증명됨
- 암호화/복호화 알고리즘은 각각 배타적 논리합 연산을 사용
- 한번에 한 비트씩 사용
- 귀환 쉬프트 레지스터 (Feedback Shift Register)
- One-Time Pad 의 절충안
- FSR은 소프트웨어, 하드웨어 환경에서 모두 구현될 수 있지만 하드웨어가 좀 더 용이
- 쉬프트 레지스터와 귀환 함수로 구성
- 선형 귀환 쉬프트 레지스터 (LFSR, Linear Feedback Shift Register)
- 비선형 귀환 쉬프트 레지스터 (NLFSR, NonLinear Feedback Shift Register)
- LFSR은 선형성으로 공격에 취약, 따라서 더 안전한 스트림 암호 설계를 위해 사용
- 비선형으로 설계되는 것 외에는 LSFR 와 동일
- 비동기식 스트림 암호
- 키 스트림의 각 비트는 이전의 평문이나 암호문에 종속적으로 결정
- 블록 암호에서 다른 운영 모드를 생성하기 위해 사용되는 한 가지 방법인 CFB모드 (Cipher Feedback Mode) 는 실제로 스트림 암호를 생성함
댓글남기기