SECTION 03 대칭키 암호
1. 현대 대칭키 암호
■현대 대칭키 암호의 개요
○혼돈(confusion)과 확산(diffusion)이라는 두가지 개념을 만족시키기 위해서 전치 요소(P-박스)와 치환 요소(S박스)로 그리고 그 밖의 구성요소를 결합하여 설계함
-혼돈 : 암호문과 키의 상관관계를 숨김
-확산 : 평문의 통계적 성질을 암호문 전반에 퍼트려 숨김
○대칭키 알고리즘의 구성 : 이동요소(Shift), 교환요소(Swap), 분할요소(Split), 조합요소, 전치장치(Transposition, P-box), 치환 장치(Substitution, S-Box), XOR(Exclusive-OR)연산
■P-BOX
○문자의 자리를 변경하는 자리를 바꾸는 전치암호 장치
○단순(Straight) P-box
-입력개수: N / 출력개수: M, N=M을 만족하며, 역함수(변경한 값을 원래의 값으로 돌리는 함수)가 존재
-그림을 예로, HELLO라는 메시지가 첫번째 자리인 H가 4번째 자리로 이동한다 이렇게 각 문자의 위치 변경하여 EOLHL 가 된다.
○축소 P-Box
-입력개수: N / 출력개수: M, N > M을 만족하며 역함수가 존재하지 않음
-입력비트 중 특정 비트가 소실 됨
-그림을 예로, HELLO에서 2번쨰, 4번째 문자는 소실되고 1,3,5 번째 문자의 위치가 치환되어 HLO가 출력됨
○확장 P-Box
-입력개수: N / 출력개수: M, N < M을 만족하며 역함수가 존재하지 않음
-입력비트 중 특정비트는 한 개 이상의 출력비드와 연결된다.
-그림을 예로, DOG라는 단어가 에서 첫번째 문자는 1과 4번째, 3번째 문자는 2와 3에 출력된다. 이렇게 치환하여 DGGDO가 됨
■S-BOX
○문자를 수학적인 관계 규칙에 의해 치환(H -> A)하는 장치
○입력개수(N)과 출력개수(M)은 달라도 가능함.
○P-Box 마찬가지로 입출력 개수가 동일한 경우에만 역함수가 존재함
○종류
-XOR
-Shift
-Swap
-Split(분할), Combine(결합)
[그림 출처 : http://72006300-storage.blogspot.kr/]
■합성 암호(Product Ciphers)
○치환(S-Box)과 전치(P-Box) 그리고 그 밖의 구성요소를 결합한 암호
-혼돈 : 암호문과 키의 상관관계를 숨김
-확산 : 평문의 통계적 성질을 암호문 전반에 퍼트려 숨김
-라운드(Rounds) : 반복적으로 사용되는 합성암호를 일컬음
■Feistel(페이스텔) 암호
○Feistel 구조에서 네트워크라는 이름은 그물을 짜는 것과 같이 교환되는 형태로 구성되어 있기 때문에 붙여짐
○암호 강도 요소 : 평문 블록의 길이(최소 128bit), 키(K)의 길이(최소 128bit), 라운드 수(16라운드 이상)
○Feistel Network는 3라운드 이상의 짝수 라운드로 구성되어 있고, 원하는 만큼 라운드 수를 늘릴 수 있다. 라운드 수를 늘려도 복호화 할 수 없게 될 염려가 없다.
○Feistel암호는 역이 존재하지 않는 구성요소를 결합하고 암호/복호 알고리즘에서 동일한 구성요소를 사용하기 때문에 서로 다른 알고리즘을 구현할 필요가 없음
○복호화 과정을 암호화 과정의 역순으로 작용하면 됨
○DES, SEED, FEAL 등 대부분의 블록암호에 채택됨(AES는 사용안함)
■SPN(Substitution – permutation Network) 구조
○여러 개의 함수를 중첩하면 개별 함수로 이루어진 암호보다 안전하다는 Shannon의 이론에 근거
○Substitution Cipher와 Permutation Cipher를 중첩하는 행태로 개발한 암호
○AES, ARIA, SHAR 등 은 이 구조를 사용함
○장점 : Feistel과 반대로 병렬연산이 가능
○단점 : 별도의 복호화 모듈을 구현해 줘야 함
○입력을 여러 개의 소블록으로 나누고 각 소블록을 S-Box에서 대치시키고 그 결과를 다시 P-Box를 전치하는 과정을 반복함
[출처 : https://crypto.stackexchange.com/questions/10605/why-is-aes-not-a-feistel-cipher]
■블록암호에 대한 공격
○전수공격(Exhaustive Key Search)
-1977년 Diffe와 Hellman이 제안
-암호화 할 때 일어날 수 있는 모든 가능한 경우에 대하여 조사해 키를 찾는 방법
○통계적 분석 공격(Statistical Analysis)
-암호문에 대한 평문의 각 단어별 빈도에 관한 자료와 더불어 지금까지 알려진 모든 통계적인 자료를 이용하여 찾는 방법
-Ex) 영어 문장에서 가장 많이 나오는 단어는 “E”라는 근거가 있다면, 암호문에서 가장 많이 나오는 것을 E로 변경하여 적용 함
○차분분석(Differential Cryptanalysis)
-1990년 Biham과 Shamir에 의하여 개발된 [선택된 평문 공격법]
-2개 이상의 평문 블록을 이용하며, 평문의 1비트라도 달라지면 뒤 평문에 해당하는 암호문은 전혀 다른 비트 패턴으로 변화하는데 이 차이를 이용하여 사용된 암호 키를 찾아내는 방법
○선형분석(Linear Cryptanalysis)
-1993년 마츠이(Matsuj)에 의하여 알려진 평문 공격법으로 알고리즘 내부의 비선형 구조를 선형화시켜 키를 찾는 방법
-암호화 함수가 평문 P와 암호와 키 K를 받아 암호문 C를 출력한다면, 평문비트 P와 암호문 비트 C를 XOR하면 암호화 키 K가 되는 관계식들이 어떤 확률로 성립하는지 관측한다.
-즉, 평문 비트 P와 암호문비트 C를 XOR하여 결과가 0이 되는 확률은 정상적르로는 1/2이어야 하지만, 암호화 방법에 따라 확룰이 다를 수 있으며 이렇게 크게 벗어난 비트의 개수를 조사하여 키의 정보를 얻는 방법
○수학적 분석
-통계적인 방법과 수학적 이론을 이용하여 해독하는 방법
■현대 스트림 암호화
○스트림 암호는 암호와와 복호화, 암호화 키 값을 1비트씩 처리하는 구조
-현대 스트림 암호는 암호화와 복호화에 한번에 r비트를 생성
-동기식 스트림 암호화와 비동기식 스트림 암호화가 존재
■동기식 스트림 암호화
○키 스트림이 평문 혹은 암호 스트림과 독립적으로 키 비트 사이에 어떠한 관계도 없이 생성되고 사용됨
○키 스트림을 생성하기 위해 내부 상태(internal state)를 유지하며, 이전 내부 상태에서 새로운 내부 상태와 유사난수를 얻음
○OTP(One Time Pad)
-암호화를 수행할 때마다 랜덤하게 선택된 키 스트림을 사용
-길버트 버냄(Gillbert Vernam)에 의해 설계되고, 샤논(C.E. Shannon)에 의해 수학적으로 해독이 불가능하다는 것을 증명)
-암호화 알고리즘과 복호화 알고리즘은 각각 배타적 논리합 연산을 사용
-안전성을 위한 조건
ㆍ패드는 한번만 사용되야 함
ㆍ패드는 매시지 길이 만큼 길어야 함
ㆍ패드는 목적지로 안전하게 배포되고 보호되어야함
ㆍ패드는 순수하게 임의값으로 만들어져야 함
○귀한 시프트 레지스터(FSR, Feedback Shift Register)
-One-Time pad의 절충안
-시프트(Shift)레지스터와 귀환(Feedback) 함수로 구성
-선형 귀한 시프트 레지스터(LFSR, Linear FeedBack Shift Register)
-비선형 귀한 시프트 레지스터(NLFSR, NonLinear FeedBack Shift Register)
■비동기식 스트림 암호(자기동기식)
○키 스트림은 각 비트의 이전의 평문이나 암호문에 종속적으로 결정됨
○암호화 문자열을 전송할 시에 일부 비트가 값이 바뀌거나, 혹은 비트가 사라지고 추가되는 오류가 발생하여도, 일부분만이 복호화에 실패하며 그 이후에는 다시 정상적인 복호화 값을 얻을 수 있는 자기 동기성을 가짐
○블록암호의 CFB 운영 모드가 포함
2. DES(Data Encryption Standard)
■역사 및 개념
○1973년 미국 국립기술표준원에서 제안하여 IBM의 제안이 채택
○평문 하나의 블록크기는 64bit이고 키 길이는 56bit이며, 56bit의 키는 48bit의 16개의 서브키(라운드 키)를 생성하고 그 서브 키를 각 라운드에서 사용
○구조 : 두개의 전치(P-box)와 16개의 Feistel 라운드 함수로 구성.
○연산
-이전라운드 함수(또는 초기 전치박스)의 출력 값(64bit)를 받아서 32bit씩 분할함
-분할한 입력 값 중 오른쪽(R)은 다음 입력으로 전송할 L 값으로 그대로 내림
-분할한 입력 값 중 왼쪽(L)은 오른쪽(R)과 같이 DES 함수 연산을 한 후, 그 결과를 다음 라운드에 R 입력으로 전송
ㆍ1) 오른쪽 32bit를 확장 P-Box를 거쳐 48bit로 변경
ㆍ2) 라운드 키 48bit와 XOR연산을 수행
ㆍ3) 8개의 S-Box를 이용하여 32bit로 치환
ㆍ4) 단순 P-Box로 전치하여 32bit의 결과를 출력
[DES함수 출처 : http://manansingh.github.io/Cryptolab-Offline/c13-des-block.html]]
■DES의 복호화
○ 알고리즘과 라운드 키들을 역순으로 적용되어야 함 (K16 부터 K1까지 사용함)
■DES의 취약점
○키의 크기가 56bit로 전수조사 공격에 취약
■다중 DES(3DES)
○종류 : 두 개의 키를 갖는 3중 DES와 세 개의 키를 갖는 3중 DES
○하드웨어에서는 매우 효과적이지만, 소프트웨어에 대해서는 효율적이지 못하고 속도가 빠르지 못함.
○전자 여권, 바이오 정보 보호, 금융 분야에 많이 사용(국내 제외)
3. AES
■역사
○1997년 미국 국립기술표준원에서 DES를 대체하기 위해 공모
○안전성(Security), 비용(Cost), 구현 효율성(Implementation) 을 기준으로 최종 레인달(Rijndael)이 선정
■개념
○128bit 평문을 128bit 암호문으로 출력하는 알고리즘
○Non-Feistel 알고리즘. SPN(Substitution-Permutation Network) 구조
○구성 : 10라운드(Key Size: 128bit), 12라운드(Key Size: 192bit), 14라운드(Key Size: 256bit)를 사용
■연산
○AES 연산 설명 플래시 : http://www.formaestudio.com/rijndaelinspector/archivos/Rijndael_Animation_v4_eng.swf
○각 라운드 구성
-1) SubBytes() : S-Box를 적용하여 바이트 단위로 치환하는
-2) ShiftRow() : 행단위로 순환 시프트를 수행, 1행은 그대로, 2행은 2Byte Shift, 2행은 4Byte, 3행은 12byte Shift
-3) MixColums() : 열 단위로 혼합(Mixing)
ㆍ마지막 라운드는 MixColums 를 수행하지 않음
-4) AddRoundKey() : 라운드 키와 EX-OR 연산을 수행
■특징
○모든 공격 방법으로 안전하도록 설계
○하드웨어나 소프트웨어 구현시 속도나 코드 압축성 면에서 효율적
■라운드 키 생성 연산
○AES 연산 설명 플래시 : http://www.formaestudio.com/rijndaelinspector/archivos/Rijndael_Animation_v4_eng.swf
4. 기타 대칭키 암호 알고리즘
■IDEA(International Data Encryption Algorithem)
○DES를 대체하기 위해 스위스 연방기술에서 개발한 알고리즘
○64bit 블록, 128bit 암호화 키, 총 9라운드(8라운드 후, 마지막에 1라운드에 키를 새로운 키를 한벅더 적용)
■RC5
○1994년 미국 RSA 연구소에서 개발
○비교적 간단한 연산으로 빠른 암복호화 기능을 제공
○32/64/128 bit의 키를 가짐
■SEED
○1999년 한국정보진흥원에서 개발
○128bit 블록, 128bit 비밀키, 16라운드 수행
○128bit 비밀키에서 16개의 64bit 라운드 키 생성
■ARIA(Academy Research Institute Agency)
○국내 국가보안기술연구소에서 개발
○Involutional SPN 구조, 128비트 블록, 128/192/256 bit 키 사용
○ARIA의 입출력 크기와 사용가능한 키 크기는 AES와 동일
■HIGHT(HIGh Security and light WeigHT)
○RFID, USN 등 같이 저전력/경량화를 요구하는 컴퓨팅 환경에 제공하기 위해 2005년 KISA, ETRI, 고려대 가 공동개발
○64bit 블록 암호
■LEA(Lightweight Encryption Algorithm)
○2012년 국가보안기술연구소에서 개발한 128bit 경량 고속 블록 암호화
○AES보다 1.5~2배 빠름
5. 현대 대칭키 암호를 이용한 암호화 기법
모드 | 장점 | 단점 |
EBC (전자 부호표,Electric CodeBlock) |
|
|
ECBC (암호 블록 연쇄,CipherBlockChaining) |
|
|
CFB (암호 피드백,CipherFeedBack) |
|
|
OFB(출력 피드백,OutputFeedBack) |
|
|
CTR (카운터,CounTeR) |
|
|
■EBC(Electronic CodeBook) 모드
○운영모드 중 가장 간단함
○평문을 N개의 n 비트 블록으로 분할하고, 마지막 블록에 패딩이 필요함
○동일한 평문 블록은 동일한 암호문 블록을 갖음.
-예) [my ma][ther ][and fa][ther ][are …] 일때 2번째, 4번째 블록인 [ther ] 은 동일한 암호문임
○한 블록에서 에러가 발생하면 대응되는 평문 블록에서만 에러가 발생
■CBC(Cipher Block Chaining) 모드
○각각의 평문블록이 암호화하기 전에 이전 암호문 블록과 XOR 수행. 첫번째 블록을 암호화 할 때에는 초기벡터(IV)라고 불리는 허구 블록 사용
-
○초기벡터(IV) : 사전에 송/수신자가 모두 알고 있어야 하며, 제 3자가 예측 불가능 해야함
○특징 : 암호화시 평문 블록의 한 비트 오류는 모든 암호블록이 바뀌는 영향을 미치지만, 복호화시 암호블록 1개가 손상된 경우, 평문 블록에 미치는 영향은 2개 블록에 머문다.
■CFB(Cipher FeedBack) 모드
○CBC모드와 유사하게 각각의 평문 블록이 암호화하기 전에 이전 암호문 블록을 암호화 한 출력 값과 XOR 수행. 이때, 첫번째 블록은 초기벡터(IV) 값을 암호화 한 후 그 결과와 XOR를 함
-ECB, CBC는 평문 블록을 암호화하였으나, CFB는 평문 블록을 직접암호화 하지 않음
-CBC는 평문블록과 암호문 블록사이에 XOR와 암호알고리즘이 존재하지만, CFB는 XOR연산만 존재
○1비트씩 암호화 할 수도 있기 때문에 스트림 암호로 바꿀 수 있음
■OFB(Output FeedBack) 모드
○암호 알고리즘의 출력을 다음 암호 알고리즘의 입력으로 피드백 함.
○CFB와 유사하게 평문 블록이 직접 암호화 되지 않음. 암호 알고리즘 출력과 XOR 만 수행
-CFB는 XOR를 수행한 암호문 블록이 입력이 되지만,
-OFB는 XOR 전에 암호 알고리즘의 출력이 입력이 됨
○특징
-초기백터(IV)가 바뀌면 암호문은 모두 변경됨
-암호알고리즘의 출력은 평문과 무관하기 때문에 미리 키 스트림을 준비 할 수 있고, 따라서 암호문이 오면 XOR 연산만 수행 가능 함.
-전송 중에 비트 오류가 전파되지 않음(C1에 비트 오류가 발생했다면, 복원된 P1의 값에만 영향)
-암호문 C1에 비트 손실이 발생하면, 그 다음에 오는 평문은 모두 에러가 발생
■CTR(CounTeR) 모드
○카운터(CTR)을 암호화한 비트열과 평문블록을 XOR하는 모드
○ECB모드처럼 각 블록은 서로 독립적이지만, 동일한 값을 블록이라도 다른 값을 출력함.
○카운터의 초기 값은 암호화 할 때마다 다른 값을 기초로 함.
○128bit(16byte) 기준 앞 암호화할 때 마다 다른 값, 뒤의 8byte는 블록번호로 카운트해서 하나씩 증가시킴
○특징
-암/복호화가 완전히 같은 구조로 프로그램 구현이 쉬움
-블록번호를 쉽게 구할 수 있기 때문에 블록을 임의의 순서로 암/복호화 할 수 있음.(병렬처리 가능)
-ATM 네트워크 보안과 IPSec에 응용됨
'기타 > 공부하기' 카테고리의 다른 글
[정보보안기사] SECTION 07 키, 난수 (0) | 2018.03.06 |
---|---|
[정보보안기사] SECTION 05 해시함수와 응용 (0) | 2018.03.06 |
[정보보안기사] SECTION 04 비대칭키 암호 (0) | 2018.03.06 |
[정보보안기사] SECTION 02 암호학 개요 (0) | 2018.03.06 |
[정보보안기사] Section01. 정보보호 관리의 개념 (0) | 2018.03.02 |