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

대칭키

위키원
leejia1222 (토론 | 기여)님의 2019년 7월 31일 (수) 14:06 판 (블록 암호)
이동: 둘러보기, 검색

대칭키는 정보를 암호화할 때 사용하는 키(Key)와 암호를 정보로 복호화할 때 사용되는 키(key)가 같아 양쪽 다 사용한다는 뜻에서 이 키를 대칭키라고 칭한다.[1]

개요

대칭키는 대칭 암호화 방식에서 둘 혹은 그 이상의 사용자 사이에 공듀된 단일 키를 의미한다. 대칭키를 이용하는 대칭키 암호는 암·복호화에 같은 아호 키를 사용하는 알고리즘이며, 송신자와 수신자는 암호 키가 노출되지 않도록 비밀로 관리해야 한다. 대칭키 암호는 내부 구조가 간단한 치환과 전치의 조합으로 되어 있어 연산 속도가 빠르다는 장점이 있다. 하지만 송·수신자 간에 동일한 키를 공유해야 하므로 많은 사람들과의 정보 교환 시 많은 키를 관리해야 하는 어려움이 있다. 이러한 정보 인코딩 방식은 정부와 군대 사이의 기밀 대화를 가능하게 하는 수십 년 간 사용되어 왔다. 현재 대칭키 알고리즘은 데이터 보안을 강화하기 위해 다양한 컴퓨터 시스템 전반에 적용되고 있다.[2]

역사

현대 암호는 1970년대 후반 스탠퍼드 대학MIT 대학에서 시작되었다. 1976년 스탠퍼드 대학의 휫필드 디피(Whitfield Diffie)와 마틴 헬만(Martin Hellman)은 ‘암호의 새로운 방향(New Directions in Cryptography)’이라는 논문에서 처음으로 공개키 암호의 개념을 발표하였다.[3] 종래의 관용 암호 방식 또는 대칭키 암호 방식에서는 암호화키와 복호화키가 동일한 비밀키를 사용하기 때문에 송신자와 수신자는 비밀 통신을 하기 전에 비밀키를 공유하고 있어야 한다. 반면 공개키 암호 방식에서는 하나의 쌍이 되는 공개키와 비밀키를 생성하여 암호화에 사용되는 공개키는 공개하고, 복호화에 사용되는 비밀키는 사용자가 안전하게 보관하도록 한다. 공개키 암호 방식에서는 송신자와 수신자가 사전에 키를 공유할 필요가 없기 때문에 불특정 다수 사용자 간에 사전 준비가 없이도 암호 통신망을 구축하는데 유용하게 사용할 수 있다.

이어 1978년 MIT 대학의 로널드 라이베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레너드 애들먼(Leonard Adleman)은 소인수 분해 문제에 기반을 둔 RSA 공개키 암호를 개발했는데, 이것은 오늘까지도 가장 널리 사용되는 공개키 암호 방식이다. 공개키 암호의 도입은 현대 암호의 발전에 중요한 계기가 되었다.[4] 한편, 1977년 미국 상무성 표준국(NBS, 현 NIST)은 전자계산기 데이터 보호를 위한 암호 알고리즘을 공개 모집하여, IBM 사가 제안한 DES(Data Encryption Standard)를 표준 암호 알고리즘으로 채택했다. DES의 표준화를 계기로 하여 금융 시스템을 중심으로 상업용 암호화의 이용이 증가하게 되었고 컴퓨터 통신망을 이용한 문서 전송, 전자 자금 이체 등이 활성화되었으며 암호 방식이 일반인들에게 알려지고 널리 사용되는 계기가 되었다.

이전의 암호 방식에서는 사용하는 키뿐만 아니라 암호 알고리즘도 비밀로 하여 암호문의 비밀을 지키려고 하는 경우도 있었으나, 현대 암호에서는 암호 알고리즘을 공개하도록 하고 있다. 1883년 아우후스트 케르크호프스(Auguste Kerckhoff)는 암호 시스템의 안전성에 대해 ‘키 이외에 암호 시스템의 모든 것이 공개되어도 안전해야 한다’고 했는데 이것을 케르크호프스의 원리(Kerckhoff’s principle)라고 한다.[5] 이렇게 함으로써 암호 방식의 안전성을 공개적으로 검토하게 하여 안전성을 확인하는 것이다.

표준화된 암호와 표준화된 컴퓨팅 기기들을 사용하는 현대 암호에서는 암호 알고리즘을 감추기가 매우 어렵다. 또한 암호 알고리즘을 감춘다고 해서 암호의 보안성이 높아지는 것도 아니다. 비밀로 다루어진 암호 알고리즘이 일단 공개되고 나면 그 안전성에 문제가 발견되는 사례가 많다. 그러므로 암호 분야에서는 어떤 암호 알고리즘이 많은 암호 학자들에 의해 장기간 세부적으로 수행된 분석에서도 잘 견디어 낼 때까지는 그 알고리즘을 안전하다고 인정하지 않는다. 즉, 암호 체계는 ‘무죄가 증명될 때까지는 유죄’이다.[6]

특징

대칭키 암호

대칭 암호화 방식은 둘 혹은 그 이상의 사용자 사이에 공유된 단일 키를 기반으로 한다. 대칭 암호화는 평문(plaintext)을 암호화하고 해독하는 데 사용된다. 암호화 과정에는 사이퍼(cipher)라 불리는 암호화 알고리즘에 평문을 실행하는 것으로 구성되며, 이는 암호문을 생성한다. 만약 암호화 체계가 충분히 강력하다면, 암호문에 포함된 정보를 읽거나 이에 접근할 수 있는 유일한 방법은 이를 해독하기 위한 상응하는 키를 사용하여 암호를 풀어내는 것이다. 암호 해독 과정은 암호문을 평문으로 다시 바꾸는 과정을 의미한다.[2]

대칭키 암호 방식에서는 키가 짧고 속도가 빨라서 효율적인 암호 시스템을 구축할 수 있다. 이 암호 방식은 알고리즘의 내부 구조가 간단한 치환(대치)과 전치(뒤섞기)의 조합으로 되어 있어서 알고리즘을 쉽게 개발할 수 있고, 컴퓨터 시스템에서 빠르게 동작한다. 그러나 송수신자 간에 동일한 키를 공유해야 하므로 많은 사람들과의 정보교환 시 많은 키를 생성, 유지, 관리해야 하는 어려움이 있다. 대칭 암호화 시스템의 보안성은 대응하는 키를 무작위로 추측해 대입하기가 얼마나 어려운지에 달려있다. 암호화 키의 길이가 길어질수록 난이도는 높아진다. 가장 많이 사용되는 일반적인 대칭 암호화 체계는 데이터를 변경하는 방법에 따라 블록 사이퍼와 스트림 사이퍼로 구분된다.[7]

기밀성있는 정보를 정해진 블록 단위로 암호화 하는 대칭키 암호 시스템이다. 만약 암호화하려는 정보가 블록 길이보다 길 경우에는 특정한 운용 모드가 사용된다. 블록 암호에 대한 안전성 증명 방법으로는 선택평문공격인 차분공격(Differential Cryptanalysis)과 알려진평문공격인 선형공격(Linear Cryptanalysis)등이 있다. 차분 공격(differential cryptanalysis)은 암호해독(cryptanalysis)의 한 방법으로, 입력값의 변화에 따른 출력값의 변화를 이용하는 방법이며, 선형 공격(linear cryptanalysis)은 암호 공격의 한 방법으로, 암호화 과정에서의 근사적 선형 관계식을 찾는 것을 목적으로 한다. 선형 공격은 차분 공격은 블록 암호를 공격하는 방법으로 널리 응용된다.
블록 암호 구조에는 페스탈(Feistel)구조와 SPN구조가 있다. 페스탈 구조는 암복호화 과정에서 역함수가 필요 없다는 장점이 있지만 구현시 스왑(Swap)단계 때문에 연산량이 많이 소요 되며 암호에 사용되는 라운드 함수를 안전하게 설계해야 한다는 단점이 있다. 대표적인 암호로는 DES가 있으며 Single DES는 안전성 문제로 현재 사용하고 있지 않다. 한국에서는 개발된 암호 중에서는 페스탈 구조기반으로 설계된 SEED가 있다. SPN 구조는 암복호화 과정에서 역함수가 필요하도록 설계되어야 한다는 단점이 있지만 중간에 비트의 이동없이 한번에 암복호화가 가능하기 때문에 페스탈 구조에 비해 효율적으로 설계할 수 있다. 대표적인 암호로는 AES가 있으며 AES는 현재 널리 상용되고 있다.[8]
블록 단위로 암호화·복호화되는 블록암호와는 달리 이진화된 평문 스트림과 이진 키스트림의 배타적 논리합(XOR) 연산으로 암호문을 생성하는 방식이다. 이러한 스트림 암호는 키스트림이 평문과 관계없이 생성되어 동기식으로 사용해야만 하는 동기식 스트림 암호, 키스트림이 평문 혹은 암호문의 함수관계에 의해 생성되기 때문에 복호화 시 동기가 흐트러졌더라도 스스로 동기화가 이루어져서 복호화가 가능한 자기 동기식 스트림 암호가 있다. [9]
스트림 암호는 이진 수열 발생기로 평문을 일련의 비트열로 취급하여 한 번에 1비트씩 암호화시키는 암호 시스템이다. 스트림 암호는 빠르게 디자인될 수 있고 실제로 어떠한 블록 암호보다도 빠르기 때문에 무선통신 기기에 주로 사용된다. 블록 암호는 큰 블록 데이터를 사용하지만 스트림 암호는 일반적으로 평문의 작은 단위인 비트를 사용한다. 암호화는 일반적으로 비트 단위 배타적 논리합(XOR) 연산으로 평문과 키 스트림과의 결합에 의해서 생성된다.[10]
1970년대부터 유럽을 중심으로 발달한 스트림 암호는 주기, 선형복잡도 등 안전성과 관련된 수학적 분석이 가능하고, 알고리즘 구현이 쉬워 군사 및 외교용으로 많이 사용되고 있다. 또한 구현 여건이 제약되는 이동통신 환경에서도 구현이 용이하여 이동통신 등의 무선데이터 보호에 많이 사용된다.

종류

블록 암호

  • SEED : 전자상거래, 금융, 무선통신 등에서 전송되는 개인정보와 같은 중요한 정보를 보호하기 위해 1999년 2월 한국인터넷진흥원과 국내 암호전문가들이 순수 국내기술로 개발한 128비트 블록 암호 알고리즘이다. 1999년 9월 정보통신단체표준(TTA)으로 제정되었으며, 2005년에 국제 표준화 기구인 ISO/IEC 국제 블록 암호 알고리즘 IETF 표준으로 제정되었다.
  • HIGHT(HIGH security and light weigHT) : RFID, USN 등과 같이 저전력 및 경량화를 요구하는 컴퓨팅 환경에서 기밀성을 제공하기 위해 2005년 KISA, ETRI 부설연구소 및 고려대가 공동으로 개발한 64비트 블록암호 알고리즘이다. HIGHT는 2006년 12월 정보통신단체표준으로 제정되었으며, 2010년 12월 ISO/IEC 국제 블록 암호 알고리즘 표준으로 제정되었다.
  • ARIA : 경량 환경 및 하드웨어 구현을 위해 최적화된, Involutional SPN 구조를 갖는 범용 블록 암호 알고리즘이다. ARIA가 사용하는 대부분의 연산은 XOR과 같은 단순한 바이트 단위 연산으로 구성되어 있다. ARIA라는 이름은 학계(Academy), 연구소(Research Institute), 정부 기관(Agency)의 첫 글자들을 딴 것으로, ARIA 개발에 참여한 학계, 연구소, 정부 기관의 공농 노력을 표현하고 있다.
  • LEA(lightweight encryption algorithm) : 빅데이터, 클라우드 등 고속 환경 및 모바일기기 등 경량 환경에서 기밀성을 제공하기 위해 개발된 128비트 블록암호 알고리즘이다.
  • DES(Data Encryption Standard)  : 64비트의 평문을 46비트의 암호문으로 만드는 블록 암호 시스템으로 64비트의 키를 사용한다. 데이터 암호화 표준이라고 한다. 64비트의 키(외부 키)중에서 56비트는 실제의 키(내부 키)가 되고 나머지는 거사용 비트로 사용된다.
  • AES(Advanced Encryption Standard) : DES의 암호화 강도가 약해지면서 개발되었으며 향후 30년 정도 사용할 수 있는 안정성, 128비트 암호화 블록, 다양한 키의 길이(128/192/256 비트)를 갖추었으며 대칭형 암호화이다.

스트림 암호

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

문제점과 대안

대칭키 방식의 문제점은 송수신자가 동일한 키를 가지고 있어야 하며 이는 키 분배, 보관에 큰 문제가 있다. 데이터를 암호화 하고 해독하는 데 사용되는 키를 전송해야 하는데 해당 키가 안전하지 않은 접속을 통해 공유된다면, 악의적인 3자에 의해 도난당할 위험이 있다. 키 1개로 암/복호화가 다 가능하니 키가 탈취되거나 복사된다면 보안 측면에서 굉장이 불안하다. [14] 이와 더불어 인가되지 않은 사용자가 대칭 키에 접근하게 되면, 해당 키를 사용해 암호화된 모든 데이터 보안이 위태롭게 된다.[2] 또한 이러한 방식을 다양한 사람이 사용하게된다면 송신자와 수신자간의 신뢰를 지키기 위해서라도 키가 서로 달라야하는데 그 개수가 무한정으로 늘어날 수 있고 그 늘어진 키의 갯수 만큼 관리하기도 힘들 것이다.

이러한 대칭키의 문제점을 해결하기 위해 비대칭키가 고안되었는데 암호화, 복호화 키가 서로 다른 경우로 키가 2개인 방식이다. 대칭키 방식에서 암호키의 노출은 결과적으로 암호화가 무의미 해진다는 것을 뜻했다. 케르크호프스는 이같은 키나 알고리즘이 노출되더라도 암호화된 데이터에 문제가 없어야 된다고 주장을 가지고 있었으며, 이에 맞는 암호화 방식은 키르크호프스법칙에 준한다고 볼 수 있다. 이 비대칭키 암호화 방식의 예로 RSA 공개키 암호화 방식이 있다. RSA방식은 큰 수에 대해 소인수 분해의 난해함을 기반으로 공개키만으로는 비밀키를 짐작할 수 없는 알고리즘이다. 쉽게 말해서 한 쌍의 비대칭적인 공개키(A)와 비밀키(B)가 존재하고, A로 잠근 자물쇠는 B로만 열수 있고, B로 잠긴 자물쇠는 A로만 열 수 있도록 되어있는 것이다. 하지만 이러한 비대칭키 방식은 리소스가 많이 소모된다는 단점도 있어서 대칭키의 장점과 비 대칭키의 장점을 합쳐 대칭키를 공유할 때 RSA의 공개키 방식을 사용하고, 대칭키가 공유되면, 리소스 소모가 덜 큰 대칭키 방식으로 암호화하여 통신하는 방법으로 고안되었다.[15]

각주

  1. 재리, 〈대칭키와 비대칭키, 공유키, 비밀키〉, 《네이버 블로그》, 2019-03-22
  2. 2.0 2.1 2.2 대칭 키 암호 방식이란 무엇인가요?〉, 《바이낸스 아카데미》, 2019-04-08
  3. 하늘바다영재교육원, 〈제 57회 Arduino_조이스틱_암호〉, 《네이버 블로그》, 2016-01-25
  4. duck1201, 〈암호의 역사〉,《네이버 블로그》, 2017-02-22
  5. 이충국, 〈암호는 수학이다〉, 《월간조선 뉴스룸》, 2016-06
  6. 현대 암호〉, 《KISA 암호이용활성화》
  7. 훤히 보이는 정보보호, 〈대칭키 암호〉, 《네이버 지식백과》
  8. 블록암호〉, 《위키백과》
  9. 훤히 보이는 정보보호, 〈스트림 암호〉, 《네이버 지식백과》
  10. it용어사전, 〈스트림 암호〉, 《네이버 지식백과》
  11. 11.0 11.1 신찬섭, 〈RC4알고리즘〉, 《티스토리》, 2009-10-23
  12. 청춘불패, 〈[정보보안 RC4 알고리즘]〉, 《네이버 블로그》, 2013-09-29
  13. "A5/1", Wikipedia
  14. 얏구, 〈대칭키,비대칭키 쉽게 이해하자, 왜 등장했는가?〉, 《네이버 블로그》, 2019-03-06
  15. 주호,〈정보통신-ssl/tls,대칭키,비대칭키〉, 《네이버 블로그》, 2019-01-05

참고자료

같이 보기


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