8. 현대 대칭키 암호를 이용한 암호화 기법 경일대학교 사이버보안학과 김현성 교수
목차 8.1 현대 블록 암호의 사용 8.2 스트림 암호의 사용 8.3 기타
8.1 현대 블록암호의 사용 블록 암호 운영 모드 블록 단위로 데이터를 암호 또는 복호화 예) DES : 64 비트, AES : 128 비트 등 운영 모드 실제 응용 환경에서 임의의 길이의 데이터를 블록 단위로 암호화하는 방법인 운영모드가 필요
8.1 현대 블록암호의 사용 – ECB 모드 Electronic Codebook (ECB) 모드 가장 간단한 모드 평문을 N개의 n비트 블록으로 분할 평문 크기가 블록 크기의 배수가 아니면 패딩(padding) 각 블록을 독립된 것으로 하여 개별적으로 암호화하고 복호화하는 방식
8.1 현대 블록암호의 사용 – ECB 모드(계속) [그림 8.2] Electronic Codebook (ECB) 모드
8.1 현대 블록암호의 사용 – ECB 모드(계속) [예제 8.1] Pi = DK(Ci) = DK(EK(Pi)) = Pi Bob은 Alice가 암호화한 평문 블록을 정확하게 복구할 수 있다. 왜냐하면 암호화와 복호화는 서로 역관계에 있기 때문이다. Pi = DK(Ci) = DK(EK(Pi)) = Pi [예제 8.2] ECB 모드는 두 개의 열에 2n개의 성분을 갖는 2k 개의 코드북을 사전 수집할 수 있으므로 Electronic codebook으로 불린다. 각각의 성분은 평문과 그에 대응하는 암호문을 목록화 할 수 있다. 하지만, k와 n이 커지면 코드북을 사전 수집하고 유지하는 것이 매우 어려워진다.
8.1 현대 블록암호의 사용 – ECB 모드(계속) 안전성 문제 [예제 8.3] 동일한 블록은 동일한 암호문을 생성 Eve는 블록 간의 독립성을 이용해 특정 암호문을 변조 가능 [예제 8.3] Eve가 회사에서 한 달에 단지 몇 시간만 일을 하고 그녀의 급여가 매우 적다고 가정하자. 그리고 Eve는 회사가 각 고용자의 계좌에 지급해야 할 금액에 대한 정보가 17번째 블록에 저장된다는 사실을 알고 있다고 하자. Eve는 월말에 회사가 은행에 보내는 암호문을 가로채서 풀타임 일을 한 동료의 급여 정보를 갖는 블록을 복사하여 자신의 급여 정보를 갖는 블록과 대체할 수 있다. 매달 Eve는 자신이 일한 대가보다 훨씬 더 많은 급여를 받을 수 있다.
8.1 현대 블록암호의 사용 – ECB 모드(계속) 오류 파급 (Error Propagation) 알고리즘 전송 도중에 발생하는 단일 비트의 에러는 대응되는 블록 내의 비트들에만 에러를 발생시킴 알고리즘
8.1 현대 블록암호의 사용 – ECB 모드(계속) 응용 안전하지 않은 채널을 통하여 두 개 이상의 블록을 갖는 메시지를 암호화하여 전송하는 수단으로 적당하지 않음 메시지 크기가 한 블록 이하라면 안전성 및 오류 파급은 문제가 되지 않음 데이터베이스에 암호화된 레코드를 저장하거나 암호화된 레코드를 복호화할 때는 암호문 블록의 독립성이 유용 데이터베이스에 랜덤하게 접근 가능 다른 레코드에 영향을 주지 않고 중간 레코드 수정 가능 큰 데이터베이스를 암호화할 때 병렬적으로 처리 가능
8.1 현대 블록암호의 사용 – CBC모드 Cipher Block Chaining(CBC) 모드 각각의 평문 블록은 암호화되기 전에 이전 블록의 암호문과 XOR됨 암호문은 다음 블록을 암호화할 때 사용되기 위해 메모리에 저장되어야 함 첫 블록을 암호화 할 때는 초기벡터(IV)를 사용
8.1 현대 블록암호의 사용 – CBC모드(계속) [그림 8.3] Cipher block chaining (CBC) 모드
8.1 현대 블록암호의 사용 – CBC모드(계속) [예제 8.4] 초기벡터 (Initialization Vector : IV) Alice가 암호화한 평문 블록을 Bob은 정확하게 복구할 수 있다. 왜냐하면 암호화와 복호화 과정은 서로 역관계에 있기 때문이다. 초기벡터 (Initialization Vector : IV) 송신자와 수신자간에 공유되어야 하지만 반드시 비밀일 필요는 없음 변조되어서는 안됨 효과적인 방법: 송신자가 난수 선택 후 안전하게 전송
8.1 현대 블록암호의 사용 – CBC모드(계속) 오류 파급 (Error Propagation) 안전성 문제 암호문 블록 Cj가 전송 도중 한 비트 오류가 발생하였다고 가정하자. 그러면 복호화 과정에서는 평문 블록 Pj 에서는 대부분의 비트에서 오류가 발생되고, 평문 블록 Pj+1 에서는 Cj 의 오류 비트와 같은 위치에서 한 비트 오류가 발생 Pj+2부터 PN 까지의 평문 블록은 이러한 한 비트 에러에 영향 받지 않음. 그러므로 암호문의 한 비트 에러는 자기 복구가 이루어짐 안전성 문제 한 메시지 내에서 동일한 평문 블록들은 다른 암호문 블록으로 암호화되지만 다른 두 메시지 내의 동일한 평문 블록에서는 IV가 같다면 동일 Eve는 암호문의 끝에 특정 암호문 블록을 덧붙일 수 있음
8.1 현대 블록암호의 사용 – CBC모드(계속) 알고리즘 응용 블록간의 연관성 때문에 병렬처리 불가능 랜덤하게 선택된 파일 레코드(DB)를 암복호할 때 사용 불가능
8.1 현대 블록암호의 사용 – CFB모드 Cipher Feedback (CFB) 모드 블록의 크기가 r(≤n) 단위로 암복호화 가능 평문을 직접 블록암호를 사용하여 암호화하지 않음
8.1 현대 블록암호의 사용 – CFB모드(계속) 평문 블록과 암호문 블록 사이의 관계 SelectLeftr : 입력값의 왼쪽 최상위 r 비트를 출력하는 함수 ShiftLeftr : 입력값을 왼쪽으로 r 비트 이동시키는 함수 (왼쪽 최상위 r비트는 소실됨)
8.1 현대 블록암호의 사용 – CFB모드(계속) 스트림 암호로서의 CFB 모드 블록 암호를 위한 운영 모드이지만 그 결과는 스트림 암호와 동일 키 스트림이 암호문에 의존하는 비동기식 스트림 암호
8.1 현대 블록암호의 사용 – CFB모드(계속) 알고리즘
8.1 현대 블록암호의 사용 – CFB모드(계속) 안전성 오류파급 블록 단위의 패턴이 유지되지 않음 Alice는 메시지를 전송할 때마다 다른 IV를 사용해야 함 Eve는 암호문의 끝에 특정 암호문 블록을 덧붙일 수 있음 오류파급 전송 도중 암호문에 한 비트 오류가 발생하면 복호 시에 평문의 같은 비트 위치에 한 비트 오류 발생하지만 다음 평문 블록에는 대부분의 비트에 오류가 발생
8.1 현대 블록암호의 사용 – OFB모드 Output Feedback(OFB) 모드 모든 암호문 블록의 각 비트는 이전 암호문 비트들과 독립 전송 중 오류가 발생해도 다음 블록 비트에 영향주지 않음
8.1 현대 블록암호의 사용 – OFB모드(계속) 스트림 암호로서의 OFB 모드 CFB와 같이 블록암호를 기반으로 한 스트림 암호 키 스트림은 평문/암호문과는 독립인 동기식 스트림 암호
8.1 현대 블록암호의 사용 – OFB모드(계속) 알고리즘
8.1 현대 블록암호의 사용 – OFB모드(계속) 안전성 오류 파급 블록 단위의 패턴이 유지되지 않음 암호문이 임의로 변조된다면 수신자가 복호화하는 평문에 영향을 줌 오류 파급 암호문의 한 비트 오류는 단지 대응되는 평문의 한 비트에만 영향
8.1 현대 블록암호의 사용 – CTR모드 Counter(CTR) 모드 암호화 시 피드백이 존재하지 않음 키 스트림의 의사난수성은 카운터를 사용함으로써 성취됨 n비트 카운터는 IV 값으로 초기화되고 규칙에 따라 증가 블록 크기는 블록 암호(DES, AES)의 블록 크기와 동일 이전 암호문 블록과 독립인 키 스트림을 생성하지만 피드백을 사용하지 않음 서로 독립인 n 비트 암호문 블록을 생성 실시간 프로세싱에 사용될 수 없고 완전한 n 비트 블록이 입력되어야 암호화 수행 시작 랜덤하게 접근한 파일을 암복호 가능
8.1 현대 블록암호의 사용 – CTR모드(계속)
8.1 현대 블록암호의 사용 – CTR모드(계속) 스트림 암호로서의 Counter (CTR) 모드
8.1 현대 블록암호의 사용 – CTR모드(계속) 알고리즘
8.1 현대 블록암호의 사용 – CTR모드(계속) 안전성 오류 파급 OFB 모드의 안전성과 동일 암호문의 한 비트 오류는 단지 대응되는 평문의 한 비트에만 영향
8.1 현대 블록암호의 사용 – CTR모드(계속) 다른 운영 모드와의 비교
8.2 스트림 암호의 사용 개요 다섯 가지 운영 모드가 메시지나, 큰 단위(ECB, CBC, CTR 모드)의 파일과 작은 단위(CFB, OFB 모드)의 데이터를 암호화하기 위하여 이용될 수 있음 그러나 문자나 비트와 같은 작은 단위의 데이터를 암호화하기 위하여 스트림 암호가 필요 스트림 암호는 real-time 프로세싱에서 좀 더 효율성을 갖음 몇몇 스트림 암호는 지난 수십년 동안 다양한 프로토콜에서 사용되기도 하였음
8.2 스트림 암호의 사용 – RC4 1984년 Ronald Rivest에 의해 설계 현재, 다수의 데이터통신, SSL/TLS, IEEE 802.11 무선 LAN 표준을 포함하는 네트워킹 프로토콜에서 사용 바이트 단위 스트림 암호로서, 평문 1 바이트(8 비트)와 키 1 바이트가 XOR되어 암호문의 1 바이트를 생성 키 스트림을 생성하는 키는 1~256 바이트 사이의 어떤 값이어도 됨
8.2 스트림 암호의 사용 – RC4 (계속) State RC4는 State 개념을 사용 원소의 인덱스는 0~255 사이에 있는 값이고, 각 원소의 항목도 0~255 사이의 값을 갖는 1바이트
8.2 스트림 암호의 사용 – RC4 (계속) RC4 스트림 암호의 개괄적 암호화 과정
8.2 스트림 암호의 사용 – RC4 (계속) 초기화 2 단계로 수행 키 스트림 생성 키 스트림의 키는 한 개씩 생성
8.2 스트림 암호의 사용 – RC4 (계속) 알고리즘
8.2 스트림 암호의 사용 – RC4 (계속) 알고리즘(계속)
8.2 스트림 암호의 사용 – RC4 (계속) 안전성 비밀키 크기가 적어도 128비트(16바이트)라면 RC4는 안전하다고 여겨짐 다른 세션에 대하여 다른 키를 사용하기를 권장 : Eve가 차분 분석법을 이용하여 암호를 분석하는 것으로부터 보호
8.2 스트림 암호의 사용 – A5/1 개요 비트 스트림을 생성하기 위하여 LFSR을 이용 휴대전화 통신을 위한 네트워크 GSM에서 사용 GSM 상에서 전화통신은 228비트 프레임의 수열로서 수행 각 프레임은 4.6 ms 동안 지속
8.2 스트림 암호의 사용 – A5/1 (계속) 키 생성기 각각 길이가 19, 22, 23개의 셀을 갖는 세 개의 LFSR을 사용 [그림 8.12] A5/1의 세 개의 LFSR
8.2 스트림 암호의 사용 – A5/1 (계속) 키 생성기(계속) 초기화 1. 세 개 LFSR의 모든 셀을 0으로 초기화한다. 2. 다음 코드에 따라 레지스터의 값을 64 비트 키로 섞는다. 3. 22 비트 프레임 넘버를 이용하여 이전 과정을 반복한다
8.2 스트림 암호의 사용 – A5/1 (계속) 키 생성기(계속) 초기화(계속) Majority 함수 100 사이클 동안 전체 생성기를 클럭킹(이동) 한다. 그러나 LFSR의 클럭은 Majority 함수를 이용한다. Majority 함수 만약, 클럭킹(clocking) 비트들 중의 2개 이상의 비트가 1이면, Majority(b1, b2, b3) = 1 을 출력. 예) Majority(1, 0, 1) = 1 만약, 클럭킹(clocking) 비트들 중의 2개 이상의 비트가 0이면, Majority(b1, b2, b3) = 0 을 출력 . 예) Majority(0, 0, 1) = 0
8.2 스트림 암호의 사용 – A5/1 (계속) 키 생성기(계속) 키 스트림 비트 키 생성기는 매번 1비트 키 스트림을 생성 키가 생성되기 전에 majority 함수가 계산됨 만약 클럭킹 비트가 majority 함수의 출력값과 일치하면 LFSR이 클럭(이동)됨, 일치하지 않으면 클럭되지 않음 [예제 8.7] 특정 시점에 클럭킹 비트가 1,0,1이다. 어떤 LFSR이 클럭(이동)되는가? majority 함수의 결과값은 Majority(1,0,1)=1을 만족한다. LFSR1과 LFSR3은 이동되고 LFSR2는 이동되지 않는다.
8.2 스트림 암호의 사용 – A5/1 (계속) 암호화/복호화 안전성 키 생성기로부터 생성된 비트 스트림은 암호문 프레임을 생성하기 위하여 평문 프레임과 XOR 하기 위한 228 비트 키를 형성하기 위하여 버퍼에 저장 암호화/복호화는 동시에 한 프레임에 대하여 수행 안전성 2000년 Biryukov 등은 작은 기지 평문으로 1분 안에 키를 찾을 수 있는 실시간 공격을 보임, 그러나 248의 전처리 필요 2003년 Ekdahl 등은 2~5분 사이의 평문을 이용하여 몇분 안에 A5/1을 깰수 있는 공격을 공개
8.3 기타 - 키관리 Alice와 Bob이 대칭키 암호를 이용하여 안전하게 통신을 하기 위해서는 그들 사이에 미리 비밀키를 공유해야 함 만약 커뮤니티에 n명의 구성원이 있다면, 각 구성원은 n-1명과 비밀 통신을 하기 위하여 비밀키가 필요 그러므로 총 n(n − 1)/2 개의 비밀키가 필요 예) 100만명 회원이라면, 5억개의 키 교환 필요
8.3 기타 - 키생성 대칭키 암호는 안전한 키 생성을 위한 효율적인 방법이 필요 키는 랜덤하게 선택되어야만 함 : 난수 생성기가 필요