본문 바로가기

와사비크래커 IT Tip/보안

[보안] 대칭키(Symmetric key) 암호화

728x90
반응형

1     대칭키(Symmetric key) 암호화

1.1     대칭키 암호의 개념

-      대칭키 암호는 관용 암호, 비밀키 암호, 단일키 암호라고도 한다.

-      암호화하는 키와 복호화하는 키가 같고 암호의 안전성은 키의 비밀 유지에 의존된다.

-      송신자와 수신자는 안전한 채널을 통해서 암호 키가 먼저 교환되어야 한다.

-      블록 암호(Block cipher), 스트림 암호(Stream cipher) 방식이 있다.

-      계산 속도가 빠르지만, 안전한 인증이 힘들고 전자 서명이 불가능하다.

1.2     대칭 암호 원리

1.2.1     대칭 암호 구조의 요소

-      평문 (Plaintext)

원문이나 데이터로서 알고리즘의 입력으로 이용된다.

-      암호 알고리즘 (Encryption algorithm)

암호 알고리즘은 입력으로 들어온 원문을 다양한 방법으로 치환하고 변환한다.

-      비밀키 (Secret key)

비밀키도 알고리즘의 한 입력으로 이용하며 알고리즘에 의해서 정확한 대체와 전환이 이루어진다.

-      암호문 (Ciphertext)

출력으로 나오는 암호화된 메시지로 평문과 비밀키에 따라서 달라진다. 주어진 메시지에 의해 서로 다른 키를 사용하면 두 개의 암호문은 서로 다르게 출력된다.

-      복호 알고리즘 (Decryption algorithm)

알고리즘을 역으로 수행하는 것과 같다. 암호문에 알고리즘과 암호에 사용했던 동일한 키를 적용하여 원문을 복구해내는 것이다

대칭키 암호 시스템

1.2.2     암호

-      평문을 암호문으로 전환하는데 사용되는 연산 유형으로 모든 암호 알고리즘은 두 가지 일반적 원리를 따른다.

s   대체(substitution)

평문의 각 요소(비트, 문자, 비트블록, 문자 블록)를 다른 요소로 바꾸는 것을 의미한다.

s   치환(transposition)

요소의 순서를 재조정하는 것을 의미한다.

-      송신자와 수신자 양측이 동일한 키를 사용하면 그 시스템을 대칭 암호, 단일키 암호, 비밀키 암호, 관용 암호라고 한다. 만일, 송신자와 수신자 양측이 서로 다른 키를 사용하면 그 시스템을 비대칭 암호, 쌍키 암호 혹은 공개키 암호라고 한다.

-      블록암호는 한 번에 한 블록씩 입력하여 처리하고 한 블록씩 출력한다. 스트림 암호는 입력 요소를 연속적으로 처리하여 입력된 요소가 끝날 때까지 한 번에 한 요소씩 출력한다.

1.2.3     Feistel 암호 구조

-      IBMHorst Feistel1973년 최초의 암호 시스템을 개발하였다.

-      Feistel 암호의 특성

s   2번 이상의 기본 대치 및 순환 치환을 연속적으로 수행한다.

s   보통 암호 알고리즘에서 Feistel 연산은 짝수 라운드를 적용한다.

s   키를 각 라운드에서 사용되는 서브키로 변환하는 키 스케줄 알고리즘을 활용한다.

s   라운드 함수에 관계없이 역변환이 가능하다. , 암호화와 복호화 과정이 같다.

s   하드웨어 및 소프트웨어로 구현이 용이하며 알고리즘의 수행 속도가 빠르다.

1.3     블록 암호 (Block cipher)

-      블록 암호는 고정된 크기의 블록 평문을 입력하여 동일한 크기의 블록 암호문을 생성해낸다.

-      DES, 3DES, AES의 블록 암호가 있다.

1.3.1     DES (Data Encryption Standard)

-      DES는 블록 암호의 일종으로 미국표준기술연구소[1]에서 공표하였다.

-      데이터를 64비트 단위의 블록으로 분할 후, 순열, XOR [2],회전 등으로 변경한다.

-      56비트의 키를 이용하는 대칭키 암호 시스템이다.

-      Feistel 네트워크의 변형된 형태로, 라운드 수는 16이다.

-      56비트의 원래 키로부터 16개의 서브 키를 생성하고 그 서브 키를 각 라운드에서 사용한다.

DES  암호화와 복호화 과정

1.3.1.1      DES의 기본 연산

-      순환: 비트를 왼쪽이나 오른쪽으로 회전한다.

s   좌순환: 가장 왼쪽의 비트는 가장 오른쪽으로 이동하며 나머지 비트들은 왼쪽으로 한 비트씩 이동한다.

-      순열: 비트 레벨의 치환이다.

 

1.3.1.2      DES 암호화

-      64비트 평문에 있는 각 비트의 위치를 바꾼다 즉, 초기 치환을 한다.

-      그 후, Round 1~Round 16에서 서로 다른 서브 키를 사용하며 64비트 입력을 32비트로 나누어 위치를 교체한다.

-      역 초기 치환, 즉 최종 치환을 한다. 이 때 출력인 64비트의 각 비트 위치를 바꾼다.

DES  암호화 구조

1.3.1.3      DES 함수

DES  함수

-      DES 함수란 라운드 함수에 사용된 f (RI-1, KI)를 가리킨다.

-      DES 함수는 32비트 출력 값을 산출하기 위하여 가장 오른쪽의 32비트(RI-1)48비트 키를 적용한다.

-      확장 P-박스 (Expansion P-box)

RI-1 32비트 입력 값이고, KI48비트 라운드 키이기 때문에 우선 32비트 RI-148비트 값으로 확장할 필요가 있다.

확장치환

-      XOR

확장 치환을 적용한 이후에 DES는 확장 치환의 출력 값에 라운드 키를XOR 연산한다.이때, 확장 치환의 출력 값과 라운드 키 값은 모두 48비트이다. 라운드 키는 이 연산에서만 사용된다.

-      S-box

S-box는 실제로 섞어주는 역할을 수행한다. , 혼돈 역할을 수행한다. DES는 각각 6비트 입력 값과 4비트 출력 값을 갖는 8개의 S-box를 사용한다.

1.3.1.4      DES 복호화

-      복호화는 암호화와 동일한 치환 테이블을 적용한다.

-      64비트 암호문의 초기 치환을 한다.

-      서브키의 생성 절차는 암호화와 동일하지만 암호화의 역순으로 서브 키를 적용한다.

-      64비트 입력을 32비트로 나누어서 위치를 교체한다.

-      64비트의 최종 치환을 한다.

DES  복호화 구조

1.3.1.5      DES 암호화 vs DES 복호화

-      공통점

s   서브키를 생성하는 부분이 같다.

s   각 라운드의 F 함수 적용과 위치 변환이 같다.

s   초기 치환과 역 초기 치환의 적용 순서가 같다.

-      차이점

s   암호화는 입력으로 평문이 주어지며 출력으로 암호문이 출력되지만, 복호화는 입력으로 암호문이 주어지며 출력으로 평문이 출력된다.

s   보조키 적용 순서는 암호화 과정의 역순으로 적용된다. , 암호화는 라운드 1(K1), 라운드 2(K2), … , 라운드 16(K16)이지만, 복호화는 라운드 1(K16), 라운드 2(K15), … , 라운드 16(K1)이다.

1.3.1.6      DES의 취약성

-      컴퓨터 속도의 비약적 발전으로 DES56비트 키에 대한 안전성 문제가 제기되었다.

-      NISTDES의 취약성을 극복하기 위해 진보된 암호화 표준(AES: Advanced Encryption Standard)의 개발 계획을 발표하였다.

-      DES의 안전한 변형인 3DES를 미국의 국가 표준으로 채택하였다.

-      AES 요구사항

s   형태

강력한 대칭키 블록 암호 알고리즘으로 정부 및 상업 부분에서 사용이 가능해야 한다.

s   효율성

3DES보다 좋아야 한다.

s   비용

알고리즘 공개 및 로열티 없이 무료로 이용 가능해야 한다.

s   안전성

블록의 길이는 적어도 128비트의 크기를 가져야 하며 키의 범위는 128, 192, 256 비트여야 한다.

-      15개의 제안 중, DaemenRijmen이 제안한 Rijndael 알고리즘이 최종 선정되었다.

1.3.2      3DES (Triple Data Encryption Standard).

-      기존 DES 알고리즘을 기반으로 만들어졌으며 각 데이터 블록에 DES를 세 번 적용한 Triple DES 블록 암호에 대한 일반적인 이름이다.

-      DES의 안전한 변형 알고리즘으로 널리 사용되고 있는 64비트 블록 단위의 대칭키 암호 방식 중 가장 안전하며, 세 개의 서로 다른 키를 이용한 3DES는 168비트의 유효 키 길이를 갖는다.

-      알고리즘은 암호-복호-암호(EDE: encrypt-decrypt-encrypt) 순서를 따른다.

-      복호의 사용은 암호적인 효과는 없지만, 3DES 사용자로 하여금 이전의 DES로 암호화된 데이터를 복호화할 수 있게 한다.

-      하드웨어 기반 구현을 목적으로 설계되었기 때문에 소프트웨어 상의 수행 속도가 느리며, DES와 비교 시 3배의 반복 과정을 수행하므로 느리다.

-      암호화: 64비트 평문에서 64비트 암호문을 생성하고, K1, K2, K356비트의 DES 키이다.

s   단계 1

평문을 키 K1로 암호화한다.

s   단계 2

단계 1의 결과를 키 K2로 복호화한다.

s   단계 3

단계 2의 결과를 키 K3으로 암호화한다.

3DES 의 암호화

-      복호화: 64비트 암호문에서 64비트 평문을 유도한다.

s   단계 1

암호문을 키 K3으로 복호화한다.

s   단계 2

단계 1의 결과를 키 K2로 암호화한다.

s   단계 3

단계 2의 결과를 키 K1로 복호화한다

3DES 의 복호화

-      높은 보안을 요구하는 경우 K1, K2, K3은 서로 다른 키를 사용한다. 56*3 , 168비트 길이의 키로 암호화하는 것과 동일한 안전성을 갖는다.

-      일반적인 보안을 요구하는 경우 K1K3은 동일한 키를 사용한다.

1.3.3     AES (Advanced Encryption Standard)

-      암호화와 복호화 과정에서 동일한 키를 사용하는 대칭키 알고리즘이다.

-      2001년 미국표준기술연구소에 의해 제정된 암호화 방식으로, DaemenRijmen에 의해 개발된 Rijndael 암호에 기반하여 AES 공모전에서 선정되었다.

-      DES를 대신하는 대칭 블록 암호방식으로 평문을 128비트 단위로 나누어 암호화, 복호화를 수행한다.

-      Feistel 구조를 사용하지 않지만, AES 알고리즘은 안전성을 제공하기 위해 각 라운드는 4가지 암호화 과정으로 이루어진다.

s   바이트 대체(Substitute bytes)

s   행 이동(Shift rows)

s   열 혼합(Mix columns)

s   라운드 키 더하기(Add round key)

AES  암호화와 복호화

1.3.3.1      AES의 세 가지 특성

-      보안성 (Security)

s   전수조사 공격 (Brute-Force Attack): AESDES보다 큰 사이즈의 키를 사용하기 때문에 DES보다 더 안전하다.

s   통계적 공격 (Statistical Attacks): 수많은 테스트들이 암호문의 통계적인 분석에 실패했다.

s   차분 공격과 선형 공격 (Differential and Linear Attacks): 아직까지 AES에 대한 차분 공격[3]과 선형 공격[4]이 알려지지 않고 있다.

-      구현 (Implementation)

s   AES는 소프트웨어, 하드웨어, 펌웨어로 구현할 수 있다. Table lookup 도는 잘 정의된 대수적 구조를 사용하는 루틴을 사용하여 구현될 수 있다.

-      단순성과 비용 (Simplicity and Cost)

s   AES에 사용하는 알고리즘은 매우 단순하므로 싼 프로세서와 최소 메모리를 이용하여 쉽게 구현 가능하다.

1.3.4     운영 모드

1.3.4.1      ECB(Electronic Codebook) 모드

-      운영 모드 중 가장 간단한 모드이다.

-      평문은 N개의 n비트 블록으로 분할된다.

-      각각의 블록을 암호화 혹은 복호화하기 위하여 사용되는 키는 동일하다.

-      ECB 운영 모드는 안전하지 않은 채널을 통하여 두 개 이상의 블록을 갖는 메시지를 암호화하여 전송하는 수단으로 권장되지 않는다.

-      데이터베이스에 암호화된 레코드를 저장하거나 암호화된 레코드를 복호 해야 하는 분야에서는 암호문 블록의 독립성이 유용하다.

-      블록의 암호화와 복호화 과정의 순서가 ECB 모드에서는 중요하지 않기 때문에 각각의 레코드가 단일 블록이거나 블록의 배수라면 데이터베이스에 랜덤 하게 접근할 수 있다. 뿐만 아니라 다른 레코드에 영향을 주지 않고도 수정된 이후에 레코드는 중간에서부터 암호화되거나 복호화될 수 있다.

1.3.4.2      CBC(Cipher Block Chaining) 모드

-      각각의 평문 블록은 암호화되기 전에 이전 암호문 블록과 XOR 된다.

-      블록이 암호화될 때 암호화된 블록은 전송이 되지만, 다음 블록을 암호화할 때 사용하기 위해서는 메모리에 저장되어야 한다.

-      첫 번째 블록을 암호화할 때에는 이전의 암호문 블록이 존재하지 않으므로 초기 벡터(IV: Initialization Vector)라고 불리는 허구의 블록이 사용된다.

1.3.4.3      CFB(Cipher Feedback) 모드

-      암호화와 복호는 블록 암호의 암호화 함수를 이용한다.

-      고정 길이의 평문을 고정 길이의 암호문으로 변환하는 비밀키 암호 방식을 사용함으로써 송수신에서 같은 길이의 비트 수 단위로 암호화하는 모드이다.

-      송신 측에서 블록 암호의 출력 비트열과 평문의 입력 비트열의 XOR을 취하여 암호문의 비트열을 출력한다.

-      블록 암호의 입력을 설정하는 레지스터에서는 출력된 암호문의 비트열을 하위에서 비트 쉬프트로 값을 갱신한다.

-      수신 측에서는 송신 측의 반대 과정을 거쳐 나온 출력의 일부 비트열과 수신한 암호문의 비트열과의 XOR을 취해 복호 한다.

1.3.4.4      OFB(Output Feedback) 모드

-      블록 암호를 사용하여 블록 간의 의존 관계를 갖는 비트열 암호 운영 모드로 블록 암호의 출력 전부를 입력 레지스터 갱신에 사용하는 비트열 암호화 방법이다.

-      송신 측에서는 입력 레지스터에 기반을 두고 블록 암호화하여 그 출력의 비트열과 평문 비트열의 XOR을 취하여 생성한다.

-      수신 측에서는 송신 측의 암호화 처리와 같은 방법의 역순으로 복호 한다.

1.3.4.5      CTR(Counter) 모드

-      블록 암호를 스트림 암호로 바꾸는 구조를 가진다.

-      CTR 방식에서는 각 블록마다 현재 블록이 몇 번째인지 값을 얻어 그 숫자와 nonce를 결합하여 블록 암호의 입력으로 사용한다. 그렇게 각 블록 암호에서 연속적인 난수를 얻은 다음 암호화하려는 문자열과 XOR 한다.

-      CTR 모드는 각 블록의 암호화 및 복호화가 이전 블록에 의존하지 않는다. 따라서 병렬적으로 동작하는 것이 가능하다. 혹은 암호화된 문자열에서 원하는 부분만 복호화하는 것도 가능하다.

 

 

1.4     스트림 암호 (Stream cipher)RC4

1.4.1     스트림 암호

-      입력되는 요소를 연속적으로 처리하여 지속적으로 한 번에 한 요소씩 배출한다.

-      평문을 한 번에 1비트 단위로 암호화하는 방식이다.

-      키를 Keystream generator라는 알고리즘에 입력하여 발생되는 1비트 키의 무한수열로 평문을 암호화한다.

스트림 암호화

1.4.1.1      스트림 암호 구조

스트림 암호 다이어그램

-      전형적인 스트림 암호는 한 번에 평문을 한 바이트씩 암호화한다.

-      랜덤한 8비트 숫자의 스트림을 만들어내는 의사랜덤 비트생성기에 하나의 키를 입력으로 사용한다.

-      의사랜덤 스트림은 입력되는 키를 알지 못하면 예측할 수 없는 스트림이며 랜덤한 문자로 구성된다.

-      생성기의 출력은 Keystream이라고 불리는데, 한 번에 한 바이트씩 평문 스트림과 비트별로 XOR 연산된다.

스트림 암호화 예시

1.4.2     RC4 알고리즘

-      Ron Rivest1987년에 설계한 스트림 암호이다.

-      RC4에서 사용된 알고리즘은 랜덤 치환에 기초해서 만들어졌다.

-      웹 브라우저와 서버 사이의 통신에 정의된 SSL/TLS(Secure Socket Layer/Transport Layer Security) 표준에서 사용된다. 또한, IEEE 802.11 무선랜 표준인 WEP(Wired Layer Security) 표준에서 사용되며 WPA(WiFi Protocol Access) 프로토콜에서 사용된다

-      RC4 알고리즘은 길이가 1바이트에서 256바이트인 다양한 키를 사용하여 S [0],∙∙∙, S[255]를 원소로 가지는 256바이트의 상태 벡터 S를 초기화한다. 어느 경우이건 S8비트 숫자로 이루어진 모든 가능한 0~256까지의 숫자 치환을 포함하고 있으며, 암호화와 복호화를 위해 대칭을 이루는 형태로 255개의 성분 중에서 한 개를 선택하여 한 개의 바이트k를 S로부터 생성한다. 각각의 k의 값이 생성되면 S의 성분을 다시 한 번 치환한다.


[1] National Institute of Standards and Technology(NIST): 미국상무부 기술관리국 산하의 각종 표준과 관련된 기술을 담당하는 연구소

[2] exclusive OR (배타적 논리합): 입력된 2개의 값 중 1개만 참일 때 참이 되는 논리 연산자

[3] 차분 공격(differential cryptanalysis): 암호해독의 한 방법으로, 입력 값의 변화에 다른 출력 값의 변화를 이용하는 방법이다.

[4] 선형 공격(linear cryptanalysis): 암호 공격의 한 방법으로, 암호화 과정에서 근사적 선형 관계식을 찾는 것을 목적으로 한다.

반응형