평문(plain text, P) : 암호화가 되어 있지 않아 누구나 식별할 수 있는 문장 또는 문자열

암호문(cryptogram 또는 ciphertext, C) :  평문을 일반인이 이해할 수 없는 형태로 변형된 문장

암호화(encryption process) : 평문을 암호문으로 변환하는 과정

복호화(decryption procss) : 암호문을 평문으로 변화하는 방법을 알고 평문으로 바꾸는 과정

해독(analysis process), (attack process) :  변환방법을 모르는 상태에서 평문을 얻는 과정

암호화키(encryption key, EK) : 평문을 암호문으로 바꾸는 데 필요한 키

복호화키(decryption key, DK) : 암호문을 평문으로 바꾸는데 필요한 키

암호화함수(encryption function, E)

복호화함수(decryption function, D)

송신자(sender, alice) : 암호화된 정보를 안전하게 보내기를 원하는 사람 또는 주체

수신자(reciver, bob) : 송신자로부터 합법적으로 정보를 받는 사람 또는 주체

도청자(eavesdropper, trudy)  송신자와 수신자 사이에 전송중인 정보 또는 저장된 정보를 가로채려는 사람 또는 주체

 - 단순히 정보를 가로채려는 사람을 수동적인(passive) 도청자

 - 정보의 변조 또는 차단 등으로 수신자를 혼돈시키는 도청자를 능동적(active) 도청자

 

 

대칭암호와 비대칭 암호

 

 1. 대칭암호 (Sysmmetic cipher) :

암호화를 할 때 사용하는 키와 복호화할 때 사용되는 키가 동일한 암호 알고리즘

  - 비밀키 사전 공유에 대한 문제 존재

  - 대표적으로 DES, AES, SEED가 존재함

 2. 비대칭 암호(Asysmmetic cipher ) :

암호화를 할 때 사용하는 키와 복호화를 할 때 사용하는 키가 서로 다른 암호 알고리즘, 암호화 키를 공개키(public key)라 하고, 복호화 키를 개인키(private key)라고함

 - 대표적으로 RSA, EIGamal가 존재함

 

블록암호와 스트림 암호 

 

 1.  블록암호(block cipher) :

평문을 일정한 블록 단위로 나누어서, 각 단위마다 암호화 과정을 수행하여, 블록단위로 암호문을 얻는 방법

  - 다양한 플랫폼에서 범용적으로 사용, 메모리, 속도 측면에서 제한적, 안전성 분석 용이, 인증과 같은 암호 서비스에 사용

 1) 블록암호의 주요 연산

   ① 순열(Permutation)

     각 비트의 위치를 변경하거나 행렬을 이용하여 섞어주는 선형 연산 수행(단순 P-박스, 축소 P-박스, 확장 P-박스)

      * 축소 P-박스와 확장 P-박스는 역함수가 존재하지 않음

   ② 치환(Substitution)

     m 비트 입력을 n 비트 입력으로 치환(비선형 함수 사용)

     * m과 n이 같을 필요 없음.

   ③ Exclusive-OR(XOR)

     배타적 논리합, 각각의 비트에 XOR 연산 수행, 2개의 비트가 동일한 경우 0, 다른 경우 1 출력

   ④ Circular Shift(Rotation)

      순환 이동, n-비트 입력을 받아 r- 비트 만큼 회전이동하는 연산

   ⑤ Swap

      r=n/2인 형태의 Circular shift 연산

   ⑥ 분할(Split)과 결합(Combine)

 

  2) 블록 암호의 구성

   구성 : 암호화 과정 + 키 생성 과정(키 스케줄)

   - Shannon 이론 : 치환과 순열을 반복적으로 적용하면 안전한 암호를 설계할 수 있음

    ① 혼돈(Confusion) : 암호문과 비밀키 사이의 관계를 숨기는 역할, 주로 치환(Subsititution, S-box)을 이용

    ② 확산(Diffusion) : 평문과 암호문의 관계를 숨기는 역할, 주로 수열(Permutation)을 이용

    ③ 라운드(Rounds) : S-box, P-box, 기타 연산을 이용, Product Cipher를 구성하는 단위 연산

 

 3) 블록암호의 구조

   ① Feistel 구조 : DES, SEED 등

     - 블록 암호의 대표적인 구조, SPN 구조에 비해 설계가 자유로움

     - 암/복호화 과정이 동일, 라운드 함수에 무관하게 복호화(키 순서만 바꾸어 적용)

     - 구조적 취약점이 발견되지 않음

     - 취약한 라운드를 반복 사용함으로써 강한 암호를 설계

   ② SPN 구조 : AES, ARIA 등

     - Shannon의 혼돈(Confusion)과 확산(Diffusion) 이론을 바탕으로 한 구조

     - 치환(Subsititutions)와 순열(Permutation)을 반복하면 암전한 암호를 설계 할 수 있음

     - SPN 구조의 1라운드는 Feistel 구조의 2라운드의 효과를 가짐

     - 암호화와 복호화가 다름

 

 

 2.  스트림 암호(stream cipher) :

평문과 같은 길이의 키스트림을 생성하여 평문과 키를 비트단위로 합하여(XOR) 암호문을 얻는 방법

  - 실시간으로 사용 가능

  - 블록 암호에 비해 경량

  - 암호화 속도가 빠름(하드웨어 환경)

  - 키 수열에 대한 엄격한 동기화 요구

 

 

오류전달암호와 비오류 전달암호

암호화 과정에서 발생한 오류가 뒤에 암호화에 영향을 주는 암호를 오류전달암호(에러확산, error propagation cipher), 영향을 받지 않는 암호를 비오류전달암호라 한다.

 

피드백 암호와 비피드백 암호

스트림 암호계에서 주로 이용되는 방법으로 비트별로 암호화할 떄, 이미 암호화된 비트에 영향을 받아 암호화되는 암호를 피드백 암호(feedback cipher)라하고 그렇지 않은 암호를 비피드백 암호라 한다.

반응형

'Information Security > Cryptography' 카테고리의 다른 글

암호 구분 및 암호 해독  (1) 2023.10.29