검수요청.png검수요청.png

대칭키 암호 알고리즘

해시넷
Asadal (토론 | 기여)님의 2019년 10월 20일 (일) 15:17 판 (참고 자료)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
이동: 둘러보기, 검색

대칭키 암호 알고리즘(symmetric-key algorithm)은 암호화 알고리즘의 한 종류로, 암호화복호화에 같은 암호 키를 쓰는 알고리즘을 의미한다.

개요[편집]

대칭키 암호(Symmetric key)란 암호문을 생성(암호화)할 때 사용하는 키와 암호문으로부터 평문을 복원할 때 사용하는 키가 동일한 암호 시스템으로 일반적으로 알고 있는 암호 시스템이다. 대칭키 암호는 혼돈과 확산의 성질을 이용하여 평문을 암호화 한다. 통상적으로 혼돈(confusion) 효과는 치환(substition)을 통해 형성되고, 확산(diffusion) 효과는 순열(permutation)을 통해 얻는다. 대칭키 암호를 설계할 때 이 치환과 순열 연산을 포함하여 한 개의 라운드(round)를 구성한다. 대칭키 암호에서 라운드를 어떻게 구성할지 결정하였다면, 이 라운드를 반복적으로 사용하는 구조로 대칭키 암호를 완성한다. 이러한 대칭키 암호 방식은 데이터를 변환하는 방법에 따라서 블록암호스트림암호로 구별한다.

특징[편집]

대칭키의 장점과 단점[편집]

대칭키는 송신자와 수신자가 같은 키를 보유하고 그 키를 통해 송신자가 평문을 암호화해서 전송하면 수신자가 같은 키로 복호화한다. 키 크기가 상대적으로 작고 암호 알고리즘 내부 구조가 단순하여, 시스템 개발 환경에 용이하고, 비대칭키에 비해 암호화와 복호화 속도가 빠르다. 하지만 교환 당사자간에 동일한 키를 공유해야 하기 때문에 키관리의 어려움이 있고, 잦은 키 변경이 있는 경우에 불편함을 초래한다. 뿐만 아니라 디지털 서명 기법에 적용이 곤란하고 안전성을 분석하기가 어렵고 중재자가 필요하다.[1]

블록암호[편집]

블록암호(block cipher)는 암호문을 만들기 위하여 암호 키와 알고리즘이 데이터 블록 단위로 적용되는 암호화 방법이다. 평문의 동일 블록들이 하나의 메시지에서 동일한 암호문으로 되지 않도록 하기 위해 이전 암호 블록의 암호문을 다음 블록에 순서대로 적용하는 것이다. 라운드 함수를 사용해 반복적으로 암호화 과정을 행함으로써 암호화 강도를 향상시킨다. 블록암호는 전치대체를 이용한다. 이러한 블록암호 구조에는 페이스텔(Feistel) 구조와 SPN(Substitution-Permutation Network) 구조가 있다.

  • 페이스텔(Feistel) 구조: 암호화와 복호화 과정이 동일하다. 또한, 평문을 좌, 우로 나누어서 뒤집고, XOR과 같은 과정을 지나 혼돈과 확산을 충족한다.
  • SPN(Substitution-Permutation Network) 구조: 대체(substitution)와 치환(permutation)을 이용하여 연산을 실행하다. 병렬연산이 가능하여 페이스텔 구조에 비해 연산속도가 빠르지만 복호화 시에 복호화 루틴을 별도로 구현하여야 한다.[2]

장점[편집]

1. 소프트웨어적으로 구현할 수 있다.

2. 전치와 치환을 반복하여 평문과 암호문으로부터 키에 대한 정보를 쉽게 찾아내기 어렵게 한다.

3. 데이터 전송, 대용량 데이터 저장 시 사용이 가능하다.[3]

단점[편집]

1. 느린 암호화 속도와 에러 전파의 문제가 있다.

2. 데이터의 크기가 작을 경우 효율적으로 암호화하기에는 적합하지 않다.[3]

블록암호의 종류[편집]

DES[편집]

DES(Data Encryption Standard)는 대칭키 암호 중 하나인 64-비트 블록암호이며 56-비트 비밀키를 사용한다. 1977년에 미국 NBS(National Bureau of Standards, 현 NIST)에서 이 알고리즘을 미국 표준 블록암호 알고리즘으로 채택하였다. 64비트 블록 단위의 입력과 64비트의 출력을 수행하며 16라운드의 페이스텔 연산을 실시한다. 16라운드 과정을 통해 더욱 보안성이 향상된다. 64비트 블록의 입력은 32비트로 나누어 좌, 우로 계산을 실시한다. 56비트 키를 사용하여 암호화를 진행한다.[4]

AES[편집]

AES(Advanced Encryption Standard)는 미국 표준 블록암호였던 DES의 안전성에 문제가 제기됨에 따라 2000년 새로운 미국 표준 블록암호로 채택된 128-비트 블록암호이다. AES는 128비트 평문을 128,192,256 비트의 세 가지 키를 가지며, 공개 알고리즘으로 누구나 이용 가능하다. SPN 구조를 사용하여 블록을 나누지 않고 한 번에 변화시키는 구조이다. 128비트 블록 단위로 암호화를 실행한다. 암호화 키로 128, 192, 256 비트의 가변키를 지원한다. AES는 하드웨어와 소프트웨어로 구현하기 쉽다.[4]

  • 라운드(round): AES는 128비트 평문을 128비트 암호문으로 출력하는 알고리즘으로 non-Feitel 알고리즘이다. 10, 12, 14 라운드를 사용하며, 각 라운드에 대응하는 키 크기는 각각 128, 192, 256 비트이다. 어떤 경우라도 키 확장 알고리즘으로부터 생성되는 라운드 키 크기는 평문과 암호문 크기가 동일한 128비트이다.
  • AES 암호: DES에서는 파이텔(Feitel) 네트워크라는 기본구조를 사용하지만, Rijndael에서는 SPN(Substitution-Permutation Network) 구조를 사용한다. AES 암호화 과정 각 라운드에서는 비선형성을 갖는 S-박스를 적용하여 바이트 단위로 치환을 수행하는 SubByte() 연산, 행 단위로 순환 시프트(cycle shift)를 수행하는 ShiftRow() 연산, 라운드 키와 EX-OR하는 AddRoundKey() 연산이라는 연산들로 구성한다.
​암호화의 마지막 라운드에서는 MixColumns() 연산을 수행하지 않는다는 특징이 있다. AES는 블록암호 알고리즘에 대한 모든 공격 방법으로부터 안전하게 설계되었으며, 하드웨어나 소프트웨어 구현 시 속도나 코드 압축성 면에서 효율성이 높아 스마트 카드와 같은 응용에 적합하다.[5]

아리아(ARIA)[편집]

아리아(ARIA; Academy Research Institute Agency)는 대한민국의 국가보안기술연구소(NSRI) 주도로 개발된 암호 알고리즘이다. ARIA의 입출력 크기와 사용 가능한 키 크기는 미국 표준 암호블록인 AES와 동일하다. ISPN(Involutional SPN) 구조의 128비트 블록암호로 128비트, 192비트, 256비트의 3종류의 키 사용을 제공하며 키의 길이에 따라 ARIA-128, ARIA-192, ARIA-256 등으로 나뉜다.[3]

시드(SEED)[편집]

시드(SEED)는 전자상거래, 금융, 무선통신 등에서 전송되는 개인정보와 같은 중요한 정보를 보호하기 위해 1999년 2월 한국인터넷진흥원과 한국의 암호 전문가들이 순수 한국 기술로 개발한 128-비트 블록암호이다. 128비트 비밀키에서 생성된 16개의 64비트 라운드 키를 사용하여 총 16회의 라운드를 거쳐 128비트의 평문 블록을 128비트 암호문 블록으로 암호화하여 출력하는 방식이다. SEED의 F함수는 수정된 64비트 페이스텔 형태로 구성한다.[3]

하이트(HIGHT)[편집]

하이트(HIGHT; HIGh security and light weigHT)는 RFID, USN 등과 같이 저전력, 경량화를 요구하는 컴퓨팅 환경에서 기밀성을 제공하기 위해 2005년 한국인터넷진흥원(KISA), ETRI 부설 연구소 및 고려대학교가 공동으로 개발한 64-비트 블록암호이다. 이후 2010년 ISO/IEC 국제 표준 암호 표준으로 채택되었다.

스트림암호[편집]

스트림암호(stream cipher)는 데이터 흐름인 스트림(stream)을 비트 단위로 순차적으로 처리해가는 암호 알고리즘으로서, 원타임패드(One Time Pad)를 실용적으로 구현할 목적으로 개발되었다. 원-타임 블록 단위로 암호와, 복호화되는 블록암호와 달리 이진화된 평문 스트림과 이진 키 스트림의 배타적 논리합(XOR) 연산으로 암호문을 생성하는 방식이다. 스트림암호는 데이터 흐름(스트림)을 비트 단위로 순차적으로 처리해가는 암호 알고리즘이다. 블록암호의 CFB(Cipher Feedback) 및 OFB(Output Feedback)라는 두 가지 모드는 스트림과 같은 역할을 한다. CFB는 초기 벡터를 암호화한 후 평문에 XOR 연산을 수행해 암호문을 구현한다. 이 암호문을 다시 암호화한 후 평문과 XOR 연산 처리를 하여 암호문을 생성한다. OFB는 초기 벡터를 암호화한 후 평문과 XOR 연산을 수행해 암호문을 만든다. 초기 벡터를 암호화한 값을 다시 암호화해 다음 평문과 XOR 연산을 하여 암호문을 완성한다.[6] LSFR은 소프트웨어적으로나 하드웨어적으로 모두 구현이 가능하지만, 하드웨어적으로 구현하는 것이 훨씬 용이하다. 스트림암호는 동기의 여부에 따라 형태가 두 가지로 나뉜다.[7]

  • 동기식 스트림암호(Synchronous Stream Cipher): 스트림암호의 난수열을 암호화할 입력 값과 독립적으로 생성한다. 암호화와 복호화에서 상호 동기화가 반드시 필요하다. 전송 중 변조되어도 후속 암호문은 오류의 영향을 받지 않는다. 의도적인 변조 복호화 단계에서 검출이 불가능하다.
  • 비동기식 스트림 암호(Asynchronous Stream Cipher): 자기 동기식 스트림 암호라고도 불리며 암호문이 전송 도중 변경되어도 자기 동기화가 가능하다. 변조된 암호문이 후속 암호문에 복호화에 사용되지 않아 오류 파급이 제한적이다.

장점[편집]

  1. 오류 확산의 위험이 없고, 하드웨어적 구현이 가능하다.
  2. 주로 군사 및 외교용으로 사용되었으나, 최근에는 이동통신 환경에서 구현이 용이해 무선 데이터 보호에 이용되고 있다.
  3. 실시간성이 중요하게 생각되는 음성, 영상, 스트리밍 전송에 사용된다.[7]

단점[편집]

  1. 비트 단위로 암호화하기 때문에 시간이 많이 걸린다.
  2. 데이터 흐름에 따라 비트 단위로 순차적으로 처리하기 때문에 내부 상태를 저장하고 있어야 한다.
  3. 평문의 길이가 커지면 키 길이도 커지기 때문에 비효율적이다.
  4. 선형성으로 인해 공격에 취약하다.[7]

스트림 암호의 종류[편집]

A5/1, A5/2, A5/3[편집]

GSM(Global System for Mobile communication)은 유럽 국가를 기준으로 하여 중국, 러시아, 인도 등 전 세계적으로 널리 채택되어 2004년 세계 이동통신 가입자 중 70% 이상이 사용하는 이동통신 방식이다. A5/1, A5/2, A5/3는 GSM에서 데이터를 암·복호화할 때 사용되는 스트림 암호이다. A5/3은 A5/1과 A5/2의 안전성이 취약한 것으로 드러나면서 이들을 대신하여 사용하기 위해 개발되었다. GMS 전송은 버스트의 시퀀스로 구성된다. 일반적인 채널과 한 방향에서 4.615 밀리 초마다 1개의 버스트가 전송되며 114비트가 정보에 이용 가능하다. A5/1은 각 버스트에 대해 114비트 시퀀스를 생성하는 데 사용되며, 이 시퀀스는 변조 전 114비트로 XOR를 처리한다. A5/1은 공식적으로 알려진 22비트 프레임 번호와 함께 64비트 키를 사용하여 초기화된다. 키 생성을 위한 Comp128v1을 사용한 구현 GSM 구현에서는 키 비트 중 10개가 0에 고정되어 있어 유효 키 길이는 54비트가 된다. 이 약점은 적절한 64비트 키를 산출하는 Comp128v3의 도입으로 수정된다. GPRS/EDGE 모드에서 작동할 때 더 높은 대역폭의 무선 변조를 통해 더 큰 348비트 프레임을 사용할 수 있으며, 그 다음 A5/3을 스트림 암호 모드에서 사용하여 기밀성을 유지한다.[8]

RC4[편집]

RC4RSASecurity를 위해 론 리베스트(Ron Rivest)에 의하여 1987년에 고안된 스트림암호 방식이다. 바이트 단위의 작용에 대하여 다양한 키 사이즈를 갖는 스트림암호 방식이다. 이 알고리즘은 랜덤 치환 사용을 기반으로 한다.[9] 쉽게 말한다면, 카드게임에서 카드를 뒤섞는 셔플링(shuffling) 기법을 사용한다. 송신자는 비밀 키를 이용하여 모든 가능한 바이트의 수인 256개를 섞는다. 그 후 특정한 위치의 두 지점을 이용하여 256개의 가능한 바이트 중 하나를 고른 후 그 값을 키 스트림으로 사용하여 평문과 XOR 연산으로 암호화한다. 그리고 다시 두 개의 위치만 바꾸어 섞은 다음 다시 특정 위치의 바이트를 키 스트림으로 반복하여 사용한다. 이러한 연산을 필요한 만큼 수행하여 키 스트림을 얻는 방식이다. 이러한 기법을 테이블 셔플링(Table Shuffling) 방식이라고 한다.[10] RC4는 웹 브라우저와 서버 사이의 통신의 표준으로 규정된 SSL/TLS(Secure Sockets Layer/Transport Layer Security)에서 주로 사용된다.[9]

각주[편집]

  1. 유니, 〈[정보보안기사 암호알고리즘]〉, 《네이버 블로그》, 2018-03-11
  2. hh0712, 〈대칭키 암호〉, 《네이버 블로그》, 2018-12-20
  3. 3.0 3.1 3.2 3.3 어리버리, 〈블록 암호화 방식 정의, 특징, 장점, 단점〉, 《네이버 블로그》, 2016-11-07
  4. 4.0 4.1 엘라이, 〈대칭키 알고리즘 - AES ,DES ,SEED〉, 《네이버 블로그》, 2013-11-14
  5. henry, 〈AES /기타 대칭키 알고리즘〉, 《네이버 블로그》, 2019-02-06
  6. 디비랑, 〈[CISSP 암호학]〉, 《티스토리》, 2012-01-15
  7. 7.0 7.1 7.2 어리버리, 〈스트림 암호화 정의, 특징, 장점, 단점 vs. 블럭 암호화〉, 《네이버 블로그》, 2017-03-08
  8. "A5/1", Wikipedia
  9. 9.0 9.1 신찬섭, 〈RC4알고리즘〉, 《티스토리》, 2009-10-23
  10. 청춘불패, 〈[정보보안 RC4 알고리즘]〉, 《네이버 블로그》, 2013-09-29

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 대칭키 암호 알고리즘 문서는 암호 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.