"대칭키"의 두 판 사이의 차이
wlgns12244 (토론 | 기여) |
잔글 (→문제점과 대안) |
||
(사용자 3명의 중간 판 23개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
− | '''대칭키'''는 정보를 암호화 | + | '''대칭키'''는 정보를 [[암호화]]할 때 사용하는 [[키]](Key)와 [[암호]]를 정보로 [[복호화]]할 때 사용되는 키가 같아 양쪽 다 사용한다는 뜻에서 대칭키라고 칭한다.<ref>재리, |
〈[https://blog.naver.com/jsisterj/221495058318 대칭키와 비대칭키, 공유키, 비밀키]〉, 《네이버 블로그》, 2019-03-22</ref> | 〈[https://blog.naver.com/jsisterj/221495058318 대칭키와 비대칭키, 공유키, 비밀키]〉, 《네이버 블로그》, 2019-03-22</ref> | ||
== 개요 == | == 개요 == | ||
− | 대칭키는 대칭 암호화 방식에서 둘 혹은 그 이상의 사용자 사이에 | + | 대칭키는 대칭 암호화 방식에서 둘 혹은 그 이상의 사용자 사이에 공유된 단일 키를 의미한다. 대칭키를 이용하는 대칭키 암호는 암·복호화에 같은 암호 키를 사용하는 알고리즘이며, 송신자와 수신자는 암호 키가 노출되지 않도록 비밀로 관리해야 한다. 대칭키 암호는 내부 구조가 간단한 [[치환]]과 [[전치]]의 조합으로 되어 있어 연산 속도가 빠르다는 장점이 있다. 하지만 송·수신자 간에 동일한 키를 공유해야 하므로 많은 사람들과의 정보 교환 시 많은 키를 관리해야 하는 어려움이 있다. 이러한 정보 인코딩 방식은 정부와 군대 사이의 기밀 대화를 가능하게 하는 기술로서, 수십 년 간 사용되어 왔다. 현재 대칭키 알고리즘은 데이터 보안을 강화하기 위해 다양한 컴퓨터 시스템 전반에 적용되고 있다.<ref name="바이낸스 아카데미">〈[https://www.binance.vision/ko/security/what-is-symmetric-key-cryptography 대칭 키 암호 방식이란 무엇인가요?]〉, 《바이낸스 아카데미》, 2019-04-08</ref> |
==역사== | ==역사== | ||
− | 현대 암호는 1970년대 후반 스탠퍼드 | + | 현대 암호는 1970년대 후반 미국 [[스탠퍼드 대학교]]과 [[MIT 대학교]]에서 시작되었다. 1976년 스탠퍼드 대학의 [[휫필드 디피]](Whitfield Diffie)와 [[마틴 헬만]](Martin Hellman)은 "암호의 새로운 방향"(New Directions in Cryptography)이라는 논문에서 처음으로 [[공개키]] 암호의 개념을 발표하였다.<ref name="하늘바다">하늘바다영재교육원, 〈[https://blog.naver.com/jcic/220608097828 제 57회 Arduino_조이스틱_암호]〉, 《네이버 블로그》, 2016-01-25</ref> 종래의 관용 암호 방식 또는 대칭키 암호 방식에서는 암호화키와 복호화키가 동일한 비밀키를 사용하기 때문에 송신자와 수신자는 비밀 통신을 하기 전에 비밀키를 공유하고 있어야 한다. 반면 공개키 암호 방식에서는 하나의 쌍이 되는 공개키와 비밀키를 생성하여 암호화에 사용되는 공개키는 공개하고, 복호화에 사용되는 비밀키는 사용자가 안전하게 보관하도록 한다. 공개키 암호 방식에서는 송신자와 수신자가 사전에 키를 공유할 필요가 없기 때문에 불특정 다수 사용자 간에 사전 준비가 없이도 암호 통신망을 구축하는데 유용하게 사용할 수 있다. |
− | 1976년 스탠퍼드 대학의 | + | |
− | 종래의 관용 암호 방식 또는 대칭키 암호 방식에서는 암호화키와 복호화키가 동일한 비밀키를 사용하기 때문에 송신자와 수신자는 비밀 통신을 하기 전에 비밀키를 공유하고 있어야 한다. | + | 이어 1978년 MIT 대학의 [[로널드 라이베스트]](Ron Rivest), [[아디 샤미르]](Adi Shamir), [[레너드 애들먼]](Leonard Adleman)은 [[소인수 분해]] 문제에 기반을 둔 [[RSA]] 공개키 암호를 개발했는데, 이것은 오늘까지도 가장 널리 사용되는 공개키 암호 방식이다. 공개키 암호의 도입은 현대 암호의 발전에 중요한 계기가 되었다.<ref name="덕">duck1201, 〈[https://blog.naver.com/duck1201/220942194662 암호의 역사]〉,《네이버 블로그》, 2017-02-22</ref> 한편, 1977년 미국 상무성 표준국(NBS, 현 [[NIST]])은 전자계산기 데이터 보호를 위한 암호 알고리즘을 공개 모집하여, [[IBM]] 사가 제안한 [[DES]](Data Encryption Standard)를 표준 암호 알고리즘으로 채택했다. DES의 표준화를 계기로 하여 금융 시스템을 중심으로 상업용 암호화의 이용이 증가하게 되었고 컴퓨터 통신망을 이용한 문서 전송, 전자 자금 이체 등이 활성화되었으며 암호 방식이 일반인들에게 알려지고 널리 사용되는 계기가 되었다. |
− | 반면 공개키 암호 방식에서는 하나의 쌍이 되는 공개키와 비밀키를 생성하여 암호화에 사용되는 공개키는 공개하고, 복호화에 사용되는 비밀키는 사용자가 안전하게 보관하도록 한다. 공개키 암호 방식에서는 송신자와 수신자가 사전에 키를 | + | |
− | 공유할 필요가 없기 때문에 불특정 다수 사용자 간에 사전 준비가 없이도 암호 통신망을 구축하는데 유용하게 사용할 수 있다 | + | 이전의 암호 방식에서는 사용하는 키뿐만 아니라 암호 알고리즘도 비밀로 하여 암호문의 비밀을 지키려고 하는 경우도 있었으나, 현대 암호에서는 암호 알고리즘을 공개하도록 하고 있다. 1883년 [[아우후스트 케르크호프스]](Auguste Kerckhoff)는 암호 시스템의 안전성에 대해 ‘키 이외에 암호 시스템의 모든 것이 공개되어도 안전해야 한다’고 했는데 이것을 케르크호프스의 원리(Kerckhoff’s principle)라고 한다.<ref>이충국, 〈[http://monthly.chosun.com/client/news/viw.asp?ctcd=I&nNewsNumb=201612100066&page=8 암호는 수학이다]〉, 《월간조선 뉴스룸》, 2016-06</ref> 이렇게 함으로써 암호 방식의 안전성을 공개적으로 검토하게 하여 안전성을 확인하는 것이다. |
− | + | ||
− | + | 표준화된 암호와 표준화된 컴퓨팅 기기들을 사용하는 현대 암호에서는 암호 알고리즘을 감추기가 매우 어렵다. 또한 암호 알고리즘을 감춘다고 해서 암호의 보안성이 높아지는 것도 아니다. 비밀로 다루어진 암호 알고리즘이 일단 공개되고 나면 그 안전성에 문제가 발견되는 사례가 많다. 그러므로 암호 분야에서는 어떤 암호 알고리즘이 많은 암호 학자들에 의해 장기간 세부적으로 수행된 분석에서도 잘 견디어 낼 때까지는 그 알고리즘을 안전하다고 인정하지 않는다. 즉, 암호 체계는 ‘무죄가 증명될 때까지는 유죄’이다.<ref name="윤태섭">〈[https://seed.kisa.or.kr/kisa/intro/EgovHistory.do 현대 암호]〉, 《KISA 암호이용활성화》</ref> | |
− | 이어 1978년 MIT 대학의 Rivest, Shamir, | ||
− | 한편, 1977년 미국 상무성 표준국(NBS, 현 NIST)은 전자계산기 데이터 보호를 위한 암호 알고리즘을 공개 모집하여, IBM 사가 제안한 DES (Data Encryption Standard)를 표준 암호 알고리즘으로 채택했다. DES의 표준화를 계기로 하여 | ||
− | 금융 시스템을 중심으로 상업용 암호화의 이용이 증가하게 되었고 컴퓨터 통신망을 이용한 문서 전송, 전자 자금 이체 등이 활성화되었으며 암호 방식이 일반인들에게 알려지고 널리 사용되는 계기가 되었다. | ||
− | 이전의 암호 방식에서는 사용하는 키뿐만 아니라 암호 알고리즘도 비밀로 하여 암호문의 비밀을 지키려고 하는 경우도 있었으나, 현대 암호에서는 암호 알고리즘을 공개하도록 하고 있다. 1883년 Auguste | ||
− | |||
− | 표준화된 암호와 표준화된 컴퓨팅 기기들을 사용하는 현대 암호에서는 암호 알고리즘을 감추기가 매우 어렵다. 또한 암호 알고리즘을 감춘다고 해서 암호의 보안성이 높아지는 것도 아니다. 비밀로 다루어진 암호 알고리즘이 일단 공개되고 나면 그 | ||
− | 안전성에 문제가 발견되는 사례가 많다. 그러므로 암호 분야에서는 어떤 암호 알고리즘이 많은 암호 학자들에 의해 장기간 세부적으로 수행된 분석에서도 잘 견디어 낼 때까지는 그 알고리즘을 안전하다고 인정하지 않는다. 즉, 암호 체계는 | ||
− | |||
== 특징 == | == 특징 == | ||
− | + | ===대칭키 암호=== | |
+ | 대칭 암호화 방식은 둘 혹은 그 이상의 사용자 사이에 공유된 단일 키를 기반으로 한다. 대칭 암호화는 평문(plaintext)을 암호화하고 해독하는 데 사용된다. 암호화 과정에는 사이퍼(cipher)라 불리는 암호화 알고리즘에 평문을 실행하는 것으로 구성되며, 이는 암호문을 생성한다. 만약 암호화 체계가 충분히 강력하다면, 암호문에 포함된 정보를 읽거나 이에 접근할 수 있는 유일한 방법은 이를 해독하기 위한 상응하는 키를 사용하여 암호를 풀어내는 것이다. 암호 해독 과정은 암호문을 평문으로 다시 바꾸는 과정을 의미한다.<ref name="바이낸스 아카데미"></ref> | ||
− | + | 대칭키 암호 방식에서는 키가 짧고 속도가 빨라서 효율적인 암호 시스템을 구축할 수 있다. 이 암호 방식은 알고리즘의 내부 구조가 간단한 치환(대치)과 전치(뒤섞기)의 조합으로 되어 있어서 알고리즘을 쉽게 개발할 수 있고, 컴퓨터 시스템에서 빠르게 동작한다. 그러나 송수신자 간에 동일한 키를 공유해야 하므로 많은 사람들과의 정보교환 시 많은 키를 생성, 유지, 관리해야 하는 어려움이 있다. 대칭 암호화 시스템의 보안성은 대응하는 키를 무작위로 추측해 대입하기가 얼마나 어려운지에 달려있다. 암호화 키의 길이가 길어질수록 난이도는 높아진다. 가장 많이 사용되는 일반적인 대칭 암호화 체계는 데이터를 변경하는 방법에 따라 블록 사이퍼와 스트림 사이퍼로 구분된다.<ref>훤히 보이는 정보보호, 〈[https://terms.naver.com/entry.nhn?docId=3432484&cid=58445&categoryId=58445 대칭키 암호]〉, 《네이버 지식백과》</ref> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ====블록 암호==== | |
− | + | 블록 암호(block cipher)는 기밀성있는 정보를 정해진 블록 단위로 암호화 하는 대칭키 암호 시스템이다. 만약 암호화하려는 정보가 블록 길이보다 길 경우에는 특정한 운용 모드가 사용된다. 블록 암호에 대한 안전성 증명 방법으로는 선택평문공격인 차분공격(Differential Cryptanalysis)과 알려진평문공격인 선형공격(Linear Cryptanalysis)등이 있다. 차분 공격(differential cryptanalysis)은 암호해독(cryptanalysis)의 한 방법으로, 입력값의 변화에 따른 출력값의 변화를 이용하는 방법이며, 선형 공격(linear cryptanalysis)은 암호 공격의 한 방법으로, 암호화 과정에서의 근사적 선형 관계식을 찾는 것을 목적으로 한다. 선형 공격은 차분 공격은 블록 암호를 공격하는 방법으로 널리 응용된다. | |
− | |||
− | |||
− | + | 블록 암호 구조에는 페스탈(Feistel)구조와 SPN구조가 있다. 페스탈 구조는 암복호화 과정에서 역함수가 필요 없다는 장점이 있지만 구현시 스왑(Swap)단계 때문에 연산량이 많이 소요 되며 암호에 사용되는 라운드 함수를 안전하게 설계해야 한다는 단점이 있다. 대표적인 암호로는 DES가 있으며 Single DES는 안전성 문제로 현재 사용하고 있지 않다. 한국에서는 개발된 암호 중에서는 페스탈 구조기반으로 설계된 SEED가 있다. SPN 구조는 암복호화 과정에서 역함수가 필요하도록 설계되어야 한다는 단점이 있지만 중간에 비트의 이동없이 한번에 암복호화가 가능하기 때문에 페스탈 구조에 비해 효율적으로 설계할 수 있다. 대표적인 암호로는 AES가 있으며 AES는 현재 널리 상용되고 있다.<ref>〈[https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D_%EC%95%94%ED%98%B8 블록암호]〉, 《위키백과》</ref> | |
− | |||
− | + | * '''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 개발에 참여한 학계, 연구소, 정부 기관의 공농 노력을 표현하고 있다. | |
− | |||
− | * | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | ARIA라는 이름은 Academy | ||
− | |||
− | + | * '''LEA'''(lightweight encryption algorithm) : [[빅데이터]], [[클라우드]] 등 고속 환경 및 모바일기기 등 경량 환경에서 기밀성을 제공하기 위해 개발된 128비트 블록암호 알고리즘이다. | |
− | * | ||
− | |||
− | |||
− | |||
− | |||
− | * | + | * '''DES'''(Data Encryption Standard) : 64비트의 평문을 46비트의 암호문으로 만드는 블록 암호 시스템으로 64비트의 키를 사용한다. 데이터 암호화 표준이라고 한다. 64비트의 키(외부 키)중에서 56비트는 실제의 키(내부 키)가 되고 나머지는 거사용 비트로 사용된다. |
− | |||
− | |||
− | |||
− | |||
− | + | * '''AES'''(Advanced Encryption Standard) : DES의 암호화 강도가 약해지면서 개발되었으며 향후 30년 정도 사용할 수 있는 안정성, 128비트 암호화 블록, 다양한 키의 길이(128/192/256 비트)를 갖추었으며 대칭형 암호화이다. | |
− | |||
− | |||
− | * | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | ====스트림 암호==== | ||
+ | 스트림 암호(stream cipher)는 블록 단위로 암호화·복호화되는 블록암호와는 달리 이진화된 평문 스트림과 이진 키스트림의 배타적 논리합([[XOR]]) 연산으로 암호문을 생성하는 방식이다. 이러한 스트림 암호는 키스트림이 평문과 관계없이 생성되어 동기식으로 사용해야만 하는 동기식 스트림 암호, 키스트림이 평문 혹은 암호문의 함수관계에 의해 생성되기 때문에 복호화 시 동기가 흐트러졌더라도 스스로 동기화가 이루어져서 복호화가 가능한 자기 동기식 스트림 암호가 있다.<ref>훤히 보이는 정보보호, 〈[https://terms.naver.com/entry.nhn?docId=3432486&cid=58445&categoryId=58445 스트림 암호]〉, | ||
+ | 《네이버 지식백과》</ref> | ||
+ | 스트림 암호는 이진 수열 발생기로 평문을 일련의 비트열로 취급하여 한 번에 1비트씩 암호화시키는 암호 시스템이다. 스트림 암호는 빠르게 디자인될 수 있고 실제로 어떠한 블록 암호보다도 빠르기 때문에 무선통신 기기에 주로 사용된다. 블록 암호는 큰 블록 데이터를 사용하지만 스트림 암호는 일반적으로 평문의 작은 단위인 비트를 사용한다. 암호화는 일반적으로 비트 단위 배타적 논리합(XOR) 연산으로 평문과 키 스트림과의 결합에 의해서 생성된다.<ref>it용어사전, 〈[https://terms.naver.com/entry.nhn?docId=853014&cid=42346&categoryId=42346 스트림 암호]〉, 《네이버 지식백과》</ref> | ||
+ | 1970년대부터 유럽을 중심으로 발달한 스트림 암호는 주기, 선형복잡도 등 안전성과 관련된 수학적 분석이 가능하고, 알고리즘 구현이 쉬워 군사 및 외교용으로 많이 사용되고 있다. 또한 구현 여건이 제약되는 이동통신 환경에서도 구현이 용이하여 이동통신 등의 무선데이터 보호에 많이 사용된다. | ||
+ | * '''RC4''' | ||
+ | : RC4는 RSASecurity를 위해 [[론 리베스트]](Ron Rivest)에 의하여 1987년에 고안된 스트림 암호 방식이다. 바이트 단위의 작용에 대하여 다양한 키 사이즈를 갖는 스트림 암호방식이다. 이 알고리즘은 랜덤 치환 사용을 기반으로 한다.<ref name=“ RC4알고리즘”>신찬섭, 〈[https://ggamzang.tistory.com/298 RC4알고리즘]〉, 《티스토리》, 2009-10-23</ref> 쉽게 말한다면, 카드 게임에서 카드를 뒤섞는 [[셔플링]](Shuffling) 기법을 사용한다. 송신자는 비밀 키를 이용하여 모든 가능한 바이트의 수인 256개를 섞는다. 그후 특정한 위치의 두 지점을 이용하여 256개의 가능한 바이트 중 하나를 고른 후 그 값을 키 스트림으로 사용하여 평문과 XOR 연산으로 암호화한다. 그리고 다시 두 개의 위치만 바꾸어 섞은 다음 다시 특정 위치의 바이트를 키 스트림으로 반복하여 사용한다. 이러한 연산을 필요한 만큼 하여 키 스트림을 얻는 방식이다. 이러한 기법을 테이블 셔플링(Table Shuffling) 방식이라고 한다.<ref>청춘불패, 〈[https://blog.naver.com/parkjy1917/120198936887 [정보보안] RC4 알고리즘]〉, 《네이버 블로그》, 2013-09-29</ref> RC4는 웹 브라우저와 서버 사이의 통신의 표준으로 규정된 SSL/TLS(Secure Sockets Layer/Transport Layer Security)에서 주로 사용된다.<ref name=“ RC4알고리즘”></ref> | ||
+ | * '''A5/1, A5/2, A5/3''' | ||
+ | : 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을 스트림 암호 모드에서 사용하여 기밀성을 유지한다.<ref>"[https://en.wikipedia.org/wiki/A5/1 A5/1]", ''Wikipedia''</ref> | ||
+ | ==문제점과 대안== | ||
+ | ===문제점=== | ||
+ | 대칭키 방식의 문제점은 송수신자가 동일한 키를 가지고 있어야 하는데, 이때 키 분배, 보관에 큰 문제가 있다는 것이다. 데이터를 암호화하고 해독하는 데 사용되는 키를 전송해야 하는데 해당 키가 안전하지 않은 접속을 통해 공유된다면, 악의적인 3자에 의해 도난당할 위험이 있다. 키 한 개로 암·복호화가 다 가능하니 키가 탈취되거나 복사된다면 보안 측면에서 굉장이 불안하다.<ref>얏구, 〈[https://blog.naver.com/ehcibear314?Redirect=Log&logNo=221481250592 대칭키,비대칭키 쉽게 이해하자, 왜 등장했는가?]〉, 《네이버 블로그》, 2019-03-06</ref> 이와 더불어 인가되지 않은 사용자가 대칭 키에 접근하게 되면, 해당 키를 사용해 암호화된 모든 데이터 보안이 위태롭게 된다.<ref name="바이낸스 아카데미"></ref> 이러한 방식을 다양한 사람이 사용하게 된다면 송신자와 수신자간의 신뢰를 지키기 위해서라도 키가 서로 달라야 하는데 그 개수가 무한정으로 늘어날 수 있고 그 늘어진 키의 갯수 만큼 관리하기도 힘들어질 것이다. | ||
+ | ===대안=== | ||
+ | 이러한 대칭키의 문제점을 해결하기 위해 [[비대칭키]]가 고안되었다. 비대칭키는 암호화할 때와 복호화할 때의 키가 다른 방식으로, 타인에게 절대 노출되어서는 안 되는 개인키를 토대로 만든 공개키가 쌍을 이룬 형태이다. 비대칭키를 이용한 암호 알고리즘은 [[공개키 알고리즘]]이라고 불리기도 한다. 비대칭키는 [[공개키]](Public Key)와 [[개인키]](Private Key)가 축을 이룬다. 사람들에게 공개된 키로써 정보를 암호화 할 수 있는 공개키와 사용자만 알고 있는 암호를 풀 수 있는 키인 개인키는 쌍을 이루고 있다. 비대칭키를 사용한 암호화 방식에는 공개키로 암호화를 하는 경우와 개인키로 암호화를 하는 경우로 구분할 수 있다. 공개키로 암호화를 선택했다면 데이터 보안에 중점을 둔 것이고 개인키로 암호화를 진행했다면 인증 과정에 중점을 둔 것으로 해석할 수 있다. 비대칭키의 대표 알고리즘은 [[RSA]], [[디피-헬만]](Diffie-Hellman), [[타원곡선암호]](ECC), [[타원곡선 디지털서명 알고리즘]](ECDSA) 등이 있다.<ref name="chodahi">chodahi, 〈[https://blog.naver.com/chodahi/221406287669 암호화 기법 (대칭키, 비대칭키)]〉, 《네이버 블로그》, 2018-11-26</ref> | ||
{{각주}} | {{각주}} | ||
143번째 줄: | 63번째 줄: | ||
* 재리, 〈[https://blog.naver.com/jsisterj/221495058318 대칭키와 비대칭키, 공유키, 비밀키]〉, 《네이버 블로그》, 2019-03-22 | * 재리, 〈[https://blog.naver.com/jsisterj/221495058318 대칭키와 비대칭키, 공유키, 비밀키]〉, 《네이버 블로그》, 2019-03-22 | ||
*〈[https://www.binance.vision/ko/security/what-is-symmetric-key-cryptography 대칭 키 암호 방식이란 무엇인가요?]〉, 《바이낸스 아카데미》, 2019-04-08 | *〈[https://www.binance.vision/ko/security/what-is-symmetric-key-cryptography 대칭 키 암호 방식이란 무엇인가요?]〉, 《바이낸스 아카데미》, 2019-04-08 | ||
+ | *〈[https://seed.kisa.or.kr/kisa/intro/EgovHistory.do 현대 암호]〉, 《KISA 암호이용활성화》 | ||
* 훤히 보이는 정보보호, 〈[https://terms.naver.com/entry.nhn?docId=3432484&cid=58445&categoryId=58445 대칭키 암호]〉, 《네이버 지식백과》 | * 훤히 보이는 정보보호, 〈[https://terms.naver.com/entry.nhn?docId=3432484&cid=58445&categoryId=58445 대칭키 암호]〉, 《네이버 지식백과》 | ||
− | |||
− | |||
* it용어사전, 〈[https://terms.naver.com/entry.nhn?docId=853014&cid=42346&categoryId=42346 스트림 암호]〉, 《네이버 지식백과》 | * it용어사전, 〈[https://terms.naver.com/entry.nhn?docId=853014&cid=42346&categoryId=42346 스트림 암호]〉, 《네이버 지식백과》 | ||
− | |||
* 얏구, 〈[https://blog.naver.com/ehcibear314?Redirect=Log&logNo=221481250592 대칭키,비대칭키 쉽게 이해하자, 왜 등장했는가?]〉, 《네이버 블로그》, 2019-03-06 | * 얏구, 〈[https://blog.naver.com/ehcibear314?Redirect=Log&logNo=221481250592 대칭키,비대칭키 쉽게 이해하자, 왜 등장했는가?]〉, 《네이버 블로그》, 2019-03-06 | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== 같이 보기 == | == 같이 보기 == | ||
+ | * [[대칭키 암호 알고리즘]] | ||
* [[비대칭키]] | * [[비대칭키]] | ||
+ | * [[공개키]] | ||
− | {{암호 알고리즘| | + | {{암호 알고리즘|검토 필요}} |
2019년 10월 20일 (일) 14:03 기준 최신판
대칭키는 정보를 암호화할 때 사용하는 키(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]
블록 암호[편집]
블록 암호(block cipher)는 기밀성있는 정보를 정해진 블록 단위로 암호화 하는 대칭키 암호 시스템이다. 만약 암호화하려는 정보가 블록 길이보다 길 경우에는 특정한 운용 모드가 사용된다. 블록 암호에 대한 안전성 증명 방법으로는 선택평문공격인 차분공격(Differential Cryptanalysis)과 알려진평문공격인 선형공격(Linear Cryptanalysis)등이 있다. 차분 공격(differential cryptanalysis)은 암호해독(cryptanalysis)의 한 방법으로, 입력값의 변화에 따른 출력값의 변화를 이용하는 방법이며, 선형 공격(linear cryptanalysis)은 암호 공격의 한 방법으로, 암호화 과정에서의 근사적 선형 관계식을 찾는 것을 목적으로 한다. 선형 공격은 차분 공격은 블록 암호를 공격하는 방법으로 널리 응용된다.
블록 암호 구조에는 페스탈(Feistel)구조와 SPN구조가 있다. 페스탈 구조는 암복호화 과정에서 역함수가 필요 없다는 장점이 있지만 구현시 스왑(Swap)단계 때문에 연산량이 많이 소요 되며 암호에 사용되는 라운드 함수를 안전하게 설계해야 한다는 단점이 있다. 대표적인 암호로는 DES가 있으며 Single DES는 안전성 문제로 현재 사용하고 있지 않다. 한국에서는 개발된 암호 중에서는 페스탈 구조기반으로 설계된 SEED가 있다. SPN 구조는 암복호화 과정에서 역함수가 필요하도록 설계되어야 한다는 단점이 있지만 중간에 비트의 이동없이 한번에 암복호화가 가능하기 때문에 페스탈 구조에 비해 효율적으로 설계할 수 있다. 대표적인 암호로는 AES가 있으며 AES는 현재 널리 상용되고 있다.[8]
- 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 비트)를 갖추었으며 대칭형 암호화이다.
스트림 암호[편집]
스트림 암호(stream cipher)는 블록 단위로 암호화·복호화되는 블록암호와는 달리 이진화된 평문 스트림과 이진 키스트림의 배타적 논리합(XOR) 연산으로 암호문을 생성하는 방식이다. 이러한 스트림 암호는 키스트림이 평문과 관계없이 생성되어 동기식으로 사용해야만 하는 동기식 스트림 암호, 키스트림이 평문 혹은 암호문의 함수관계에 의해 생성되기 때문에 복호화 시 동기가 흐트러졌더라도 스스로 동기화가 이루어져서 복호화가 가능한 자기 동기식 스트림 암호가 있다.[9]
스트림 암호는 이진 수열 발생기로 평문을 일련의 비트열로 취급하여 한 번에 1비트씩 암호화시키는 암호 시스템이다. 스트림 암호는 빠르게 디자인될 수 있고 실제로 어떠한 블록 암호보다도 빠르기 때문에 무선통신 기기에 주로 사용된다. 블록 암호는 큰 블록 데이터를 사용하지만 스트림 암호는 일반적으로 평문의 작은 단위인 비트를 사용한다. 암호화는 일반적으로 비트 단위 배타적 논리합(XOR) 연산으로 평문과 키 스트림과의 결합에 의해서 생성된다.[10]
1970년대부터 유럽을 중심으로 발달한 스트림 암호는 주기, 선형복잡도 등 안전성과 관련된 수학적 분석이 가능하고, 알고리즘 구현이 쉬워 군사 및 외교용으로 많이 사용되고 있다. 또한 구현 여건이 제약되는 이동통신 환경에서도 구현이 용이하여 이동통신 등의 무선데이터 보호에 많이 사용된다.
- RC4
- 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
- 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자에 의해 도난당할 위험이 있다. 키 한 개로 암·복호화가 다 가능하니 키가 탈취되거나 복사된다면 보안 측면에서 굉장이 불안하다.[14] 이와 더불어 인가되지 않은 사용자가 대칭 키에 접근하게 되면, 해당 키를 사용해 암호화된 모든 데이터 보안이 위태롭게 된다.[2] 이러한 방식을 다양한 사람이 사용하게 된다면 송신자와 수신자간의 신뢰를 지키기 위해서라도 키가 서로 달라야 하는데 그 개수가 무한정으로 늘어날 수 있고 그 늘어진 키의 갯수 만큼 관리하기도 힘들어질 것이다.
대안[편집]
이러한 대칭키의 문제점을 해결하기 위해 비대칭키가 고안되었다. 비대칭키는 암호화할 때와 복호화할 때의 키가 다른 방식으로, 타인에게 절대 노출되어서는 안 되는 개인키를 토대로 만든 공개키가 쌍을 이룬 형태이다. 비대칭키를 이용한 암호 알고리즘은 공개키 알고리즘이라고 불리기도 한다. 비대칭키는 공개키(Public Key)와 개인키(Private Key)가 축을 이룬다. 사람들에게 공개된 키로써 정보를 암호화 할 수 있는 공개키와 사용자만 알고 있는 암호를 풀 수 있는 키인 개인키는 쌍을 이루고 있다. 비대칭키를 사용한 암호화 방식에는 공개키로 암호화를 하는 경우와 개인키로 암호화를 하는 경우로 구분할 수 있다. 공개키로 암호화를 선택했다면 데이터 보안에 중점을 둔 것이고 개인키로 암호화를 진행했다면 인증 과정에 중점을 둔 것으로 해석할 수 있다. 비대칭키의 대표 알고리즘은 RSA, 디피-헬만(Diffie-Hellman), 타원곡선암호(ECC), 타원곡선 디지털서명 알고리즘(ECDSA) 등이 있다.[15]
각주[편집]
- ↑ 재리, 〈대칭키와 비대칭키, 공유키, 비밀키〉, 《네이버 블로그》, 2019-03-22
- ↑ 2.0 2.1 2.2 〈대칭 키 암호 방식이란 무엇인가요?〉, 《바이낸스 아카데미》, 2019-04-08
- ↑ 하늘바다영재교육원, 〈제 57회 Arduino_조이스틱_암호〉, 《네이버 블로그》, 2016-01-25
- ↑ duck1201, 〈암호의 역사〉,《네이버 블로그》, 2017-02-22
- ↑ 이충국, 〈암호는 수학이다〉, 《월간조선 뉴스룸》, 2016-06
- ↑ 〈현대 암호〉, 《KISA 암호이용활성화》
- ↑ 훤히 보이는 정보보호, 〈대칭키 암호〉, 《네이버 지식백과》
- ↑ 〈블록암호〉, 《위키백과》
- ↑ 훤히 보이는 정보보호, 〈스트림 암호〉, 《네이버 지식백과》
- ↑ it용어사전, 〈스트림 암호〉, 《네이버 지식백과》
- ↑ 11.0 11.1 신찬섭, 〈RC4알고리즘〉, 《티스토리》, 2009-10-23
- ↑ 청춘불패, 〈[정보보안 RC4 알고리즘]〉, 《네이버 블로그》, 2013-09-29
- ↑ "A5/1", Wikipedia
- ↑ 얏구, 〈대칭키,비대칭키 쉽게 이해하자, 왜 등장했는가?〉, 《네이버 블로그》, 2019-03-06
- ↑ chodahi, 〈암호화 기법 (대칭키, 비대칭키)〉, 《네이버 블로그》, 2018-11-26
참고자료[편집]
- 재리, 〈대칭키와 비대칭키, 공유키, 비밀키〉, 《네이버 블로그》, 2019-03-22
- 〈대칭 키 암호 방식이란 무엇인가요?〉, 《바이낸스 아카데미》, 2019-04-08
- 〈현대 암호〉, 《KISA 암호이용활성화》
- 훤히 보이는 정보보호, 〈대칭키 암호〉, 《네이버 지식백과》
- it용어사전, 〈스트림 암호〉, 《네이버 지식백과》
- 얏구, 〈대칭키,비대칭키 쉽게 이해하자, 왜 등장했는가?〉, 《네이버 블로그》, 2019-03-06
같이 보기[편집]