770 likes | 1.06k Views
I 부. 암호. 3 장. 대칭키 암호. 대칭키 암호 분류. 스트림 암호 일회성 암호 형태 키가 상대적으로 짧다 . 키가 긴 키스트림 으로 쭉 뻗는다 . 그리고 키스트림은 일회성 암호 키 같이 사용된다 . 블록 암호 코드북 개념 형태 블록암호 키가 한 권의 코드북을 결정한다 . 각 키가 다른 코드북을 결정한다 . 혼돈 과 확산 모두가 적용된다 . 3 장 . 대칭키 암호. 스트림 암호. STREAM 암호. 1 Stream 암호 2 RC4 알고리즘. 일반 블럭 암호.
E N D
I부 암호
3장 대칭키 암호
대칭키 암호 분류 • 스트림 암호 일회성 암호 형태 • 키가 상대적으로 짧다. • 키가 긴 키스트림으로 쭉 뻗는다. • 그리고 키스트림은 일회성 암호 키 같이 사용된다. • 블록 암호 코드북 개념 형태 • 블록암호 키가 한 권의 코드북을 결정한다. • 각 키가 다른 코드북을 결정한다. • 혼돈과 확산 모두가 적용된다.
3장. 대칭키 암호 스트림 암호
STREAM 암호 1 Stream 암호 2 RC4 알고리즘
일반 블럭 암호 스트림 암호 m 비트 키 이진 키수열 암호 알고리즘 암호 알고리즘 n 비트 평문 n 비트 암호문 n 비트 초기값 이진 평문 수열 m 비트 키 평문: M=m1m2m3… 암호문: C= EK(m1)EK(m2)EK(m3)… 평문: M=m1m2m3… 암호문: C= EZ1(m1)EZ2(m2)EZ3(m3)… Stream 암호
키계열 키계열 암호문 C 송신자 수신자 평문 M 평문 M Stream 암호 평 문 1 0 1 1 1 0 1 1 암호문 0 1 1 1 1 1 1 0 키계열 1 1 0 0 0 1 0 1 키계열 1 1 0 0 0 1 0 1 암호문 0 1 1 1 1 1 1 0 평 문 1 0 1 1 1 0 1 1
Stream 암호 • 송수신자간에 사전에 공유된 비밀키(secret key)와 현재의 스트림 암호시스템상태(initial state)로부터 도출되는 키 수열(key steam)이 평문과 결합되어 암호문을 생성 • 키 수열의 길이는 평문의 길이와 동일하고 단 한번만 사용됨 예 : I LOVE YOU 메시지 -> 11001001 10100000 11001100 키 -> 01000001 01000010 11000011 (eXclusive OR) 암호문 -> 10001001 11100010 00001111 • 활용 : 블럭암호에 비해서 빠르게 운영 • 이동통신에서 전송되는 data의 암호화에 사용
Stream 암호 • 키 스트림 주기 • 주기적 (periodic) 스트림 암호 : 키 스트림이 어떤 주기를 갖고 반복 • 비주기적 스트림 암호 : 키가 반복 없이 표현되는 일회용 패드(one-time pad)방식 • 평문과 키의 관계 • 동기식 스트림 암호(Synchronous Stream Cipher) • 암호문을 복호화하여 평문을 찾을때 키 스트림과 암호문 사이에 동기가 필요 • 키 스트림이 평문과 관계없이 생성되므로 암호문과 암호문에 들어있는 키 스트림이 독립적이어서 정보유출의 가능성이 적다 • 선형 귀한 치환 레지스터(Linear Feedback Shift Register)
Stream 암호 • 평문과 키의 관계 • 자기 동기식 스트림 암호(Self-Synchronous Stream Cipher) • 키 스트림이 평문과 암호문과 관계를 갖는다. • 키 스트림은 평문 또는 암호문으로 부터 함수 관계에 의해 생성 • 전송 중 암호문의 비트가 손실 또는 변경되더라도 그 오류의 영향이 유한하게 된다. • 오류 정정의 기능을 포함 가능 • 키 스트림과 암호문의 종속성으로 인해 해독하기 쉽다. • 암호문 귀한자동키 (Feedback autokey)암호시스템 • 동기식 스트림 암호 시스템에 자기동기식 스트림암호의 장점을 결합하여 사용가능
Stream 암호 • 스트림 암호 시스템의 장점과 사용 • 군사 및 외교용으로 널리 사용 • 이동통신 환경에서 구현이 용이 • 안전성을 수학적으로 엄밀하게 분석 가능 • 이동통신 등의 무선 통신 데이터 보호에 적합 • 종류 • RC4 • SEAL
RC4 알고리즘 • 1987년 Rivest에 의해 설계된 가변 키 길이 지원 • 원래는 미공개 • 1994년 인터넷 뉴스그룹에 익명으로 공개된 알고리즘 • Netscape Navigator의 데이타 보호용으로 사용되고 있으며, 다른 인터넷 응용들에서도 널리 사용되는 스트림 암호이다.
스트림 암호 • 스트림 암호는 과거에 많이 활용 • H/W에서 효율적 • 음성 암호화 위해서 속도 요구 등. • 오늘날, 프로세스의 속도 증가로 S/W 기반 암호도 충분한 속도 가능 • 스트림 암호의 미래? • 샤미르: “스트림 암호의 사망”논문발표
3장. 대칭키 암호 블록 암호
Simplified DES 3.1 S-DES 개요 3.2 S-DES 키의 생성 3.3 S-DES 암호 알고리즘 3.4 S-DES의 분석
3.1 S-DES 개요 (1/2) • 알고리즘 • 8비트 평문, 10비트 키 • 8비트 암호문 생성 • 알고리즘 구성 • 초기순열(IP) • 순열, 치환 이용 fk • 순열 함수 SW • 역 순열(IP-1) • 암호문 • IP-1(fk2(SW(fk1(IP(평문))))) • 복호문 • IP-1(fk1(SW(fk2(IP(암호문)))))
3.2 S-DES 키의 생성 (1/4) • K1 = P8(Shift(P10(key))) • K2 = P8(Shift(Shift(P10(key))) S-DES를 위한 키 생성
P10 3 5 2 7 4 10 1 9 8 6 예 제 • 10 bit key = ( 1 0 1 0 0 0 0 0 1 0 ) • P10(key) = ( 1 0 0 0 0 0 1 1 0 0 ) 1 2 3 4 5 6 7 8 9 0 3.2 S-DES 키의 생성 (2/4) • 키생성 K1 = P8(Shift(P10(key))) • 10 비트 키 = (k1, k2, k3, k4, k5, k6, k7, k8, k9, k10) • P10 순열 = (k3, k5, k2, k7, k4, k10, k1, k9, k8, k6)
3.2 S-DES 키의 생성 (3/4) • 키 생성 K1 = P8 ( Shift ( P10 ( key ))) • (Shift(P10(key))): LS-1[키의1st 5비트] & LS-1[키의 2nd 5비트] • 앞 다섯 비트와 뒤 다섯 비트 좌로 순환 이동(1bit 좌측 순환이동) • P10 =( k3, k5, k2, k7, k4, k10, k1, k9, k8, k6) • Shift =( k5, k2, k7, k4, k3, k1, k9, k8, k6, k10 ) • 예제) • P10 = ( 1 0 0 0 0 0 1 1 0 0 ) • LS-1 = ( 0 0 0 0 1 1 1 0 0 0 ) 1 2 3 4 5 6 7 8 9 0
3.2 S-DES 키의 생성 (4/4) • 키생성 K1 = P8(Shift(P10(key))) = P8(LS-1) • P8(LS-1) = P8( 0 0 0 0 1 1 1 0 0 0 ) • 10 비트에서 8비트 선택 치환 • K1 = ( 1 0 1 0 0 1 0 0 ) • K2 = P8(Shift(Shift(P10(key)))) = P8(Shift(LS-1))=P8(LS-2) • LS-2 = Shift(LS-1): LS-1의 결과에 2비트 좌측 순환 이동 • K2 = P8(LS-2) = P8( 0 0 1 0 0 0 0 0 1 1 ) = ( 0 1 0 0 0 0 1 1 )
3.3 S-DES 암호 알고리즘 • 초기 및 최종 순열 함수 • 입력: 8비트 블록 평문 • 초기순열(IP) • IP-1(IP(X)) = X • 예제) • X = ( 1 0 1 1 0 0 1 1 ) • IP(X) = ( 0 0 1 1 1 1 0 1 ) • IP-1(IP(X)) = ( 1 0 1 1 0 0 1 1 ) • 최종 순열 1 2 3 4 5 6 7 8
평문 R: (n1, n2, n3, n4) n n n n3 4 1 2 n n3 n4 n 2 1 함수 fk (1/4) • 순열, 치환 함수 조합 • L( Left ) 왼쪽 4비트 • R( Right ) 오른쪽 4비트 • fk( L, R ) = (L F( R, SK ), R ) • F 함수(확장 순열)
n k n k n k n k p p p p 4 11 1 12 2 13 3 14 0,0 0,1 0,2 0,3 n k n k n k n k p p p p 2 15 3 16 4 17 1 18 1,0 1,1 1,2 1,3 함수 fk (2/4) • 8비트 서브키 K1 = (k11, k12, k13, k14, k15, k16, k17, k18) • XOR 연산 • S-Box
함수 fk (3/4) • 예제) • P = (01000111) 이라면 • S0: 행 00, 열 10 ; 1,4 요소 행, 2,3 요소 열 • S1: 행01, 열 11 ; 5,8 요소 행, 6,7 요소 열 • S0 = 11, S1 = 11 이 된다. (치환 효과) • 결과값 1111
함수 fk (4/4) • P4 순열 • P4출력은 함수 F의 출력이 된다. • 스위치 함수(SW) • fk는 왼쪽 4비트만 변경 • SW이용 왼쪽, 오른쪽 교환 • 두 번째 fk에서는 K2만 다름
3.4 S-DES의 분석 • Brute-force 공격 가능 • 10비트 키 210= 1024 • 기지 평문/암호문 쌍 • 평문: ( p1, p2, p3, p4, p5, p6, p7, p8) • 출력 암호문: ( c1, c2, c3, c4, c5, c6, c7, c8 ) • 미지의 키: (k1, k2, k3, k4, k5, k6, k7, k8, k9, k10) • 기지 평문 공격: 각 ci는 pj와 kj의 다항식 함수햐 • 알고리즘은 10개의 미지수를 갖는 8개의 비선형 방정식 • 알고리즘에서 각각의 순열과 합 연산은 선형 사상 • S박스를 통하여 비선형성을 도출 • 선형 사상 비선형 사상: 암호해독을 난해하게 하는 효과
Data Encryption Standard • DES: 1970년대 개발 • IBM Lucifer 암호를 기반 • 미 정부 표준 • DES 개발은 논쟁이 있었음 • NSA 가 비밀리에 관련되었음 • 설계과정이 비공개 • 128bit 에서 64bit로 키 길이가 줄었음 • Lucifer 알고리즘의 교묘한 변경
DES • DES는 페이스텔 암호 • 64 비트 블록 길이 • 56 비트 키 길이 • 16 회전 • 각 회전에서 48 비트의 보조키 사용 • 각 회전은 단순 • 안전성은 주로 “S-box들”에 의존 • 각 S-boxe들은 6비트를 4비트로 매핑
key L R 32 28 28 expand shift shift 48 28 28 32 Ki compress 48 48 S-boxes 28 28 32 P box 32 32 32 key L R DES의 한 회전
DES 확장 순열 • 입력 32 비트 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 • 출력 48 비트 31 0 1 2 3 4 3 4 5 6 7 8 7 8 9 10 11 12 11 12 13 14 15 16 15 16 17 18 19 20 19 20 21 22 23 24 23 24 25 26 27 28 27 28 29 30 31 0
DES S-box • 8 “교환 박스” 또는 S-박스 • 각 S-박스는 6 비트를 4 비트로 매핑 • 1번 S-박스 입력 비트(0,5) 입력 비트 (1,2,3,4) | 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 ------------------------------------------------------------------------------------ 00 | 1110 0100 1101 0001 0010 1111 1011 1000 0011 1010 0110 1100 0101 1001 0000 0111 01 | 0000 1111 0111 0100 1110 0010 1101 0001 1010 0110 1100 1011 1001 0101 0011 1000 10 | 0100 0001 1110 1000 1101 0110 0010 1011 1111 1100 1001 0111 0011 1010 0101 0000 11 | 1111 1100 1000 0010 0100 1001 0001 0111 0101 1011 0011 1110 1010 0000 0110 1101
DES P-box • 입력 32 비트 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 • 출력 32 비트 15 6 19 20 28 11 27 16 0 14 22 25 4 17 30 9 1 7 23 13 31 26 2 8 18 12 29 5 21 10 3 24
DES 보조키 • 56 비트 DES 키: 0,1,2,…,55 • 좌 반쪽 키 비트: LK 49 42 35 28 21 14 7 0 50 43 36 29 22 15 8 1 51 44 37 30 23 16 9 2 52 45 38 31 • 우 반쪽 키 비트: RK 55 48 41 34 27 20 13 6 54 47 40 33 26 19 12 5 53 46 39 32 25 18 11 4 24 17 10 3
DES 보조키 • i=1,2,. . .,16 번째 회전에서 • LK = (LK를 ri 만큼 왼쪽으로 회전 이동) • RK = (RK를 ri 만큼 왼쪽으로 회전 이동) • 보조키 Ki의 왼쪽 절반이 LK 비트 13 16 10 23 0 4 2 27 14 5 20 9 22 18 11 3 25 7 15 6 26 19 12 1 • 보조키 Ki의 오른쪽 절반이 RK 비트 12 23 2 8 18 26 1 11 22 16 4 19 15 20 10 27 5 24 17 13 21 7 0 3
DES 보조키 • 회전 1, 2, 9, 16에서 ri는 1,나머지 회전 ri는 2 • 각 회전 LK의 비트 8,17,21,24 생략 • 각 회전 RK의 비트 6, 9,14, 25 생략 • 압축 순열은56 bits of LK 와 RK의 56 비트에서48 비트 보조키 Ki생산 • 위키 스케줄은보조키를 생산
DES 마지막 • 최초 회전 전의 최초 순열 P • 마지막 회전 후에 반씩을 교환 • 마지막 순열(P의 역)을 (R16,L16)에 적용함으로 암호문 생산 • 위 작업은 보안과는 무관
DES의 안전성 • DES의 안전성은 다수의 S-box에 의존 • DES의 나머지는 모두 선형 • 30년간의 강도 높은 분석으로 “백도어”가 없음을 밝혀 냈음 • 오늘날 공격은 전수키 조사를 사용 • 피할 수 없는 결론 • DES 설계자들은 그들이 무엇을 하고 있는지를 알고 있었다. • DES 설계자들은 그들의 시대를 앞서가고 있었다.
블록 암호 표기 • P = 평문 블록 • C = 암호문 블록 • 암호문 C를 얻기 위해 키 K로 P를 암호화 • C = E(P, K) • 평문 P를 얻기 위해 키 K로 C를 복호화 • P = D(C, K) • 아래 사항을 주의 • P = D(E(P, K), K) 그리고 C = E(D(C, K), K)
삼중 DES • 현재, 56 비트DES 키는 너무 작다 • 하지만 DES가 도처에서 사용중: 어떻게 해야 하나? • 삼중 DES또는 3DES (112 비트 키) • C = E(D(E(P,K1),K2),K1) • P = D(E(D(C,K1),K2),K1) • 왜 2개 키로 암호화-복호화-암호화(EDE) 하는가? • 단독 DES와 호환성: E(D(E(P,K),K),K) = E(P,K) • 그리고 112 비트면 안전성을 위해 충분
3DES • 왜 C = E(E(P,K),K)가 아닌가 ? • 여전히 56 비트 키 • 왜 C = E(E(P,K1),K2)가 아닌가 ? • 현실성이 있는 알려진 평문 공격 • 모든 가능한 키 K1에 대해 E(P,K1) 의 선계산 테이블을 작성 (결과 테이블은 256입력) • 그러면 각 가능한 K2에 대해 D(C,K2)가 테이블 내에 일치하는 요소가 발견될 때까지 계산 • 일치되는 요소가 발견되면, E(P,K1) = D(C,K2)
Advanced Encryption Standard • DES를 대치 • AES 경쟁 (90년대 후반) • NSA 가 공개적으로 관여 • 투명한 진행 • 많은 강력한 알고리즘들이 제안 • 라인댈(Rijndael) 알고리즘이 선정 • “Rain Doll” 또는 “Rhine Doll”로 발음 • 반복되는 블록 암호 (DES와 동일) • 페이스텔 암호가 아님 (DES와 상이)
AES 개요 • 블록 크기: 128, 192 또는 256 비트 • 키 길이: 128, 192 또는 256 비트 (블록크기와는 독립적) • 10 에서 14 회전 (키 길이에 따라) • 각 회전은 4개의 함수들을 사용 (3개“계층) • ByteSub (비선형 계층) • ShiftRow (선형혼합 계층) • MixColumn (비선형 계층) • AddRoundKey (키추가 계층)
AES ByteSub • ByteSub는 AES의 “S-box” • 두 수학적 연산의 비선형합성(그러나 역은 존재) • 192 비트 블록으로 가정: 4x6 바이트
AES “S-box” 입력 뒤의 4 비트 입력 앞의 4비트
AES ShiftRow • 회전 이동
AES MixColumn • (거대한) 룩업 테이블로 구축 • 각 행에 비선형, 역산 연산자 적용
AES AddRoundKey • 회전키(보조키)는 키 스케줄 알고리즘에 의해 결정 • 블록과 보조키의 XOR 블록 보조키
AES 복호화 • 복호화를 위해서, 진행 과정은 역산이 가능해야만 함 • 는 그 자체가 역산이므로 MixAddRoundKey의 역산 가능 • MixColumn은 역산 가능 (역산은 룩업 테이블로 구축됨) • ShiftRow의 역산은 쉽게 됨 (cyclic shift 의 다른 방향) • ByteSub는 역산 가능 (역산은 룩업 테이블로 구축됨)