Computer Science/Cryptography

[Cryptography] 대칭키(Symmetric key)

LeeJaeJun 2023. 12. 27. 00:31
728x90
반응형

- 대칭키(Symmetric key)

키 하나로 암호화(보안성 부여)와 복호화를 모두 수행하는 방식입니다. 암호화와 복호화에 동일한 키를 사용하기 때문에 알고리즘이 간단하고 빠르게 수행됩니다. 비대칭키 방식에 비해 효율적입니다. 대칭키 암호화의 주요한 제한 사항은 키 관리의 어려움과 안전한 키 공유 메커니즘의 필요성입니다. 이를 극복하기 위해 공개키 암호화(비대칭키)와 대칭키 암호화를 혼합한 하이브리드 암호화 방식이 많이 사용됩니다.

대표적인 알고리즘은 다음과 같습니다.

  • DES:  56비트의 키를 사용하여 데이터를 암호화하고 복호화하는 데 사용됩니다. DES는 초기에 널리 사용되었으나 현재는 안전성이 취약한 것으로 간주되어 사용이 제한되고 있습니다. DES는 블록 암호화 방식으로 64비트 블록을 처리하며, 키를 반복적으로 적용하여 암호화를 수행합니다.
  • 3DES: 3DES는 DES 알고리즘을 세 번 반복하여 강화한 대칭키 암호화 알고리즘입니다. 3DES는 112비트 또는 168비트의 키를 사용하며, DES의 보안성 문제를 해결하기 위해 개발되었습니다. 3DES는 여전히 일부 애플리케이션에서 사용되지만, AES와 같은 보다 현대적인 대칭키 알고리즘으로의 전환 추세입니다.
  • SEED-128: 한국정보보호진흥원(KISA)에서 개발한 대칭키 암호화 알고리즘입니다. SEED-128은 128비트의 키를 사용하고, 블록 암호화 방식으로 128비트 블록을 처리합니다. SEED-128은 안전하고 효율적인 암호화를 제공하기 위해 설계되었으며, 한국에서 널리 사용되고 있습니다.
  • ARIA: 대한민국 정보보호산업협회(KIISC)에서 개발한 대칭키 암호화 알고리즘입니다. ARIA는 128비트, 192비트 및 256비트의 키를 지원하며, 블록 암호화 방식으로 128비트 블록을 처리합니다. ARIA는 안전성과 효율성을 모두 고려하여 설계되었으며, 국내 및 국제 표준으로 인정받고 있습니다.
  • AES-128: 대칭키 암호화의 현재 표준으로 사용되는 알고리즘입니다. AES는 128비트, 192비트, 256비트의 키를 지원하며, 블록 암호화 방식으로 128비트 블록을 처리합니다. AES는 안전성과 효율성에서 우수한 성능을 보이며, 다양한 보안 응용에서 널리 사용됩니다. AES는 현재 가장 널리 채택된 대칭키 암호화 알고리즘입니다.
  • AES-256: AES 알고리즘에서 256비트 키를 사용하는 버전입니다. AES-256은 AES-128과 동일한 암호화 알고리즘을 사용하지만, 더 긴 키 길이를 갖고 있어 더 강력한 보안 수준을 제공합니다. AES-256은 AES-128과 비교하여 더 큰 키 공간을 갖고 있으며, 더 복잡한 암호화를 수행할 수 있습니다. AES-256은 민감한 정보를 보호해야 하는 고도로 보안이 요구되는 시스템에서 주로 사용됩니다.

 

- 대칭키 암호 시스템(Symmetric Cryptosystem)

수신자와 송신자가 같은 키를 공유하여 정보를 암호화하고 복호화하는 시스템입니다. 속도가 빠르지만, 키 교환이 어렵다는 단점이 있습니다.(도청 등)

  • 블록 암호(Block Cipher): 평문을 일정 크기의 블록으로 나누고, 각 블록을 암호화하는 방식입니다. 만약 평문의 크기가 블록 크기의 배수가 아니라면 평문 뒤에 데이터를 추가하는 패딩(Padding)이 먼저 수행됩니다. 패딩은 평문이 블록 크기의 배수가 될 때까지 데이터를 추가합니다. 대표적인 블록 암호로는 DES AES가 있습니다.
  • 스트림 암호(Stream Cipher): 수신자와 송신자가 공유하는 스트림을 이용하여 데이터를 암호화하는 방식입니다. 속도는 빠르지만, 블록 암호보다 안전하지 않다고 알려져 있습니다. 일반적으로 성능이 부족한 임베디드 장비나 빠른 속도가 필요한 제한적 환경에서 사용됩니다. 만약 송신자와 수신자가 평문 길이 만큼의 스트림을 매번 공유할 수 있다면, 스트림을 모르는 공격자는 암호문을 복호화할 수 없을 것입니다. 하지만 평문과 같은 길이의 스트림을 안전하게 공유할 수 있다면 굳이 그 채널로 스트림을 공유하는 것이 아니라 평문을 공유하면 될 것입니다.(암호화가 필요하지 않은 환경이라는 뜻) 그렇기에 일반적으로 송신자와 수신자는 스트림을 공유하는 대신, 시드(Seed)라는 작은 값을 공유하고, 이를 사전에 합의된 함수의 인자로 넣어 스트림을 각자 생성하는 방식으로 사용합니다.

스트림 암호

 

- 곱 암호(Product Cipher)

치환, 순열 등의 단순한 연산을 여러 라운드로 반복하여 안전성을 확보하는 암호학적 구조

- 페이스텔 구조(Feistel)

암호화하려는 데이터를 반으로 나누어, 라운드마다 절반씩 라운드 함수를 적용하는 구조. 라운드 함수에 역함수가 존재하지 않아도 된다는 장점이 있으나, 비페이스텔 구조보다 많은 라운드가 필요하다는 단점이 있습니다.

 

- DES(Data Encryption Standard)

DES는 현대 블록 암호 중 하나로, 초기 순열, 16개의 페이스텔 라운드, 그리고 최종 순열로 구성된다.

https://www.youtube.com/watch?v=Y61qn_SQl40 

 

- SPN(Substitution Permutation Network)

S-Box를 사용하는 치환(Substitution)과 P-Box를 사용하는 순열(Permutation)을 여러 라운드에 걸쳐 반복하는 곱 암호의 일종입니다.

페이스텔 구조와 달리 라운드마다 입력 전체에 라운드 함수를 적용하므로, 같은 수의 라운드를 사용할 때 SPN이 페이스텔 구조에 비해 두 배의 암호학적 안전성을 갖는다고 이야기합니다.

 

* S-box: 문자를 수학적인 관계 규칙에 따라 치환하는 장치

* P-box: 문자의 자리를 변경하는 전치 암호 장치

 

- AES

SPN(Substitution Permutation Network) 암호 구조를 사용합니다. DES가 취약해진 뒤, NIST가 공모한 블록 암호의 표준 알고리즘입니다. 키의 길이는 128, 192, 256비트 중 하나를 선택할 수 있고, 라운드 수는 키의 길이에 따라 10, 12, 14로 결정됩니다. 키의 길이가 128비트이면 AES-128, 192비트이면 AES-192, 256비트이면 AES-256이라고 부릅니다. 

  • SubBytes: State의 각 바이트를 S-Box를 참조하여 치환하는 함수
  • ShiftRows: State의 각 행을 구성하는 바이트를 쉬프트하는 함수
  • MixColumns: 열 단위로 치환을 수행하는 함수. 갈루아 필드 내에서의 행렬 연산으로 구해집니다.
  • AddRoundKey: 키 생성 함수(Key Schedule)로 생성된 라운드 키의 state를 각 바이트 별로 XOR합니다. 복호화할 때도 동일한 키를 이용하여 state에 XOR합니다.

 재구성된 입력에 대해 AddRoundKey 함수를 적용하고, 마지막 라운드 전까지 매 라운드마다 SubBytesShiftRowsMixColumnsAddRoundKey함수를 반복하여 적용합니다. 마지막 라운드에서는 MixColumns를 제외한 나머지 함수들만 적용합니다.

https://www.youtube.com/watch?v=mlzxpkdXP58 

 

728x90
반응형