본문 바로가기

기타/공부하기

[정보보안기사] SECTION 03 대칭키 암호

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)
    • 평문의 반복은 암호문에 반영되지 않음
    • 복호화에서 병렬 처리가 가능.
    • 임의의 암호문 블록을 복호화 가능
    • 비트 단위의 에러가 있는 암호문(C3)을 복호화하면, P3 블록 전체와 다음블록(P4)에서 C3 오류비트와 같은 위치에 있는 비트에서만 에러발생.
    • 암호화에서는 병렬처리 불가능.
    CFB
    (암호 피드백,CipherFeedBack)
    • 패딩이 필요없음
    • 복호화에서만 병렬처리가 가능
    • 임의의 암호문 블록을 복호화할 수 있다.
    • 암호화에서는 병렬 처리를 불가능.
    • 비트 단위의 에러가 있는 암호문(C3)은 평문블록 P3에서 오류비트와 같은 위치에서 오류가 발생
    • 시프트 레지스터에 오류가 존재하면 다음 평문 블록의 대부분의 비트에서 오류가 발생(확률 50%)
    • 재전송 공격이 가능.
    OFB(출력 피드백,OutputFeedBack)
    • 패딩이 필요없음
    • 암/복호화의 사전 준비가능
    • 암호화와 복호화가 같은 구조
    • 비트 단위의 에러가 있는 암호문을 복호화하면 평문에 대응하는 비트만 에러가 됨
    • 병렬 처리 불가능
    • 적극적 공격자가 암호문 블록을 비트 반전시키면 대응하는 평문 블록의 비트 반전된다.
    CTR
    (카운터,CounTeR)
    • 패딩이 필요없음
    • 암/복호화의 사전 준비가능
    • 암호화와 복호화가 같은 구조
    • 비트 단위의 에러가 있는 암호문을 복호화하면 평문에 대응하는 비트만 에러가 됨
    • 병렬 처리 가능
    • 적극적 공격자가 암호문 블록을 비트 반전시키면, 대응하는 평문 블록의 비트 반전된다.
    [하단 이미지 출처 : https://m.blog.naver.com/PostView.nhn?blogId=kookh1&logNo=120188816752&categoryNo=135

    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개 블록에 머문다.


  • IPSec에서 CBC 모드를 사용

    CFB(Cipher FeedBack) 모드

    CBC모드와 유사하게 각각의 평문 블록이 암호화하기 전에 이전 암호문 블록을 암호화 한 출력 값과 XOR 수행. 이때, 첫번째 블록은 초기벡터(IV) 값을 암호화 한 후 그 결과와 XOR를 함


  • ECB, CBC 모드와 CFB 모드 차이

    -ECB, CBC는 평문 블록을 암호화하였으나, CFB는 평문 블록을 직접암호화 하지 않음

    -CBC는 평문블록과 암호문 블록사이에 XOR와 암호알고리즘이 존재하지만, CFB는 XOR연산만 존재

    1비트씩 암호화 할 수도 있기 때문에 스트림 암호로 바꿀 수 있음

    OFB(Output FeedBack) 모드

    암호 알고리즘의 출력을 다음 암호 알고리즘의 입력으로 피드백 함.

    CFB와 유사하게 평문 블록이 직접 암호화 되지 않음. 암호 알고리즘 출력과 XOR 만 수행


  • CFB와 OFB는 암호 알고리즘의 입력만 다르다는 차이

    -CFB는 XOR를 수행한 암호문 블록이 입력이 되지만,

    -OFB는 XOR 전에 암호 알고리즘의 출력이 입력이 됨

    특징

    -초기백터(IV)가 바뀌면 암호문은 모두 변경됨

    -암호알고리즘의 출력은 평문과 무관하기 때문에 미리 키 스트림을 준비 할 수 있고, 따라서 암호문이 오면 XOR 연산만 수행 가능 함.

    -전송 중에 비트 오류가 전파되지 않음(C1에 비트 오류가 발생했다면, 복원된 P1의 값에만 영향)

    -암호문 C1에 비트 손실이 발생하면, 그 다음에 오는 평문은 모두 에러가 발생

    CTR(CounTeR) 모드

    카운터(CTR)을 암호화한 비트열과 평문블록을 XOR하는 모드


  • OFB와 유사하게 암호문 블록과 독립적인 키 스트림을 생성하지만, 암호화시 피드백이 존재하지 않음

    ECB모드처럼 각 블록은 서로 독립적이지만, 동일한 값을 블록이라도 다른 값을 출력함.

    카운터의 초기 값은 암호화 할 때마다 다른 값을 기초로 함.

    128bit(16byte) 기준 앞 암호화할 때 마다 다른 값, 뒤의 8byte는 블록번호로 카운트해서 하나씩 증가시킴

    특징

    -암/복호화가 완전히 같은 구조로 프로그램 구현이 쉬움

    -블록번호를 쉽게 구할 수 있기 때문에 블록을 임의의 순서로 암/복호화 할 수 있음.(병렬처리 가능)

    -ATM 네트워크 보안과 IPSec에 응용됨