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

"암호키"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
 
(사용자 4명의 중간 판 12개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''암호키'''(Encryption Key)는 평문을 [[암호화]], [[복호화]]하는 핵심 가변 정보 값으로 암호 알고리즘 수행 시 반드시 주어져야 할 값이다. 키 공간이 커지면 보안성은 증가되며 그 키의 길이는 사용된 알고리즘의 bit의 수에 결정된다.
+
'''암호키'''(Encryption Key)는 [[암호화]] 또는 [[복호화]]를 위하여 하나의 [[알고리즘]]과 함께 쓰이는 값이다.  
  
 
==개요==
 
==개요==
평문에서 암호기술을 적용하여 암호문으로 변환할 때 암호키가 필요하며, 암호문을 평문으로 변환할 때에는 복호키가 필요하다. [[제3자]]가 알 수 없도록 안전성을 유지하기 위해서는 암호키는 비밀을 유지하여야 한다. <ref> 〈[https://seed.kisa.or.kr/kisa/intro/EgovDefinition.do 암호기술의 정의]〉, 《KISA 암호이용활성화》 </ref>
+
암호키는 [[평문]]을 암호화, 복호화하는 핵심 가변 정보 값으로, [[암호 알고리즘]] 수행 시 반드시 주어져야 할 값이다. 평문에서 암호기술을 적용하여 암호문으로 변환할 때 암호키가 필요하며, 암호문을 평문으로 변환할 때에는 [[복호키]]가 필요하다. 키 공간이 커지면 [[보안성]]은 증가되며 그 키의 길이는 사용된 알고리즘의 [[비트]](bit)의 수에 결정된다. [[제3자]]가 알 수 없도록 안전성을 유지하기 위해서는 암호키는와 관련된 비밀을 유지하여야 한다.<ref> 〈[https://seed.kisa.or.kr/kisa/intro/EgovDefinition.do 암호기술의 정의]〉, 《KISA 암호이용활성화》</ref>
  
 
==역사==
 
==역사==
1970년대 후반 미국 [[스탠퍼드 대학교]]과 [[MIT 대학교]]에서 시작되었다. 1976년 스탠퍼드 대학교의 [[휫필드 디피]](Whitfield Diffie)와 [[마틴 헬만]](Martin Hellman)은 '''암호의 새로운 방향'''(New Directions in Cryptography)이라는 논문에서 처음으로 [[공개키]] 암호의 개념을 발표하였다. 종래의 관용 암호 방식 또는 대칭키 암호 방식에서는 암호화키와 복호화키가 동일한 비밀키를 사용하기 때문에 송신자와 수신자는 비밀 통신을 하기 전에 비밀키를 공유하고 있어야 한다. 반면 공개키 암호 방식에서는 하나의 쌍이 되는 공개키와 비밀키를 생성하여 암호화에 사용되는 공개키는 공개하고, 복호화에 사용되는 비밀키는 사용자가 안전하게 보관하도록 한다. 공개키 암호 방식에서는 송신자와 수신자가 사전에 키를 공유할 필요가 없기 때문에 불특정 다수 사용자 간에 사전 준비가 없이도 암호 통신망을 구축하는데 유용하게 사용할 수 있다.
+
암호키는 1970년대 후반 미국 [[스탠퍼드 대학교]]과 [[매사추세츠 공과대학교]]에서 개발되었다. 1976년 스탠퍼드 대학교의 [[휫필드 디피]](Whitfield Diffie)와 [[마틴 헬만]](Martin Hellman)은 '암호의 새로운 방향(New Directions in Cryptography)'이라는 논문에서 처음으로 공개키 암호의 개념을 발표하였다. 종래의 관용 암호 방식 또는 대칭키 암호 방식에서는 암호화 키와 복호화 키가 동일한 비밀키를 사용하기 때문에 송신자와 수신자는 비밀 통신을 하기 전에 비밀키를 공유하고 있어야 한다. 반면 공개키 암호 방식에서는 하나의 쌍이 되는 공개키와 비밀키를 생성하여 암호화에 사용되는 공개키는 공개하고, 복호화에 사용되는 비밀키는 사용자가 안전하게 보관하도록 한다. 공개키 암호 방식에서는 송신자와 수신자가 사전에 키를 공유할 필요가 없기 때문에 불특정 다수 사용자 간에 사전 준비가 없이도 암호 통신망을 구축하는데 유용하게 사용할 수 있다. 이어 1978년 MIT 대학의 [[로널드 리베스트]](Ron Rivest), [[아디 샤미르]](Adi Shamir), [[레너드 애들먼]](Leonard Adleman)은 [[소인수 분해]] 문제에 기반을 둔 [[RSA]] 공개키 암호를 개발했는데, 이것은 오늘까지도 가장 널리 사용되는 공개키 암호 방식이다. 공개키 암호의 도입은 현대 암호의 발전에 중요한 계기가 되었다.<ref name="역사">〈[https://seed.kisa.or.kr/kisa/intro/EgovHistory.do 암호기술의 역사]〉, 《KISA 암호이용활성화》</ref>
 
 
이어 1978년 MIT 대학의 [[로널드 라이베스트]](Ron Rivest), [[아디 샤미르]](Adi Shamir), [[레너드 애들먼]](Leonard Adleman)은 [[소인수 분해]] 문제에 기반을 둔 [[RSA]] 공개키 암호를 개발했는데, 이것은 오늘까지도 가장 널리 사용되는 공개키 암호 방식이다. 공개키 암호의 도입은 현대 암호의 발전에 중요한 계기가 되었다.<ref name="역사">〈[https://seed.kisa.or.kr/kisa/intro/EgovHistory.do 암호기술의 역사]〉, 《KISA 암호이용활성화》</ref>
 
  
 
==종류==
 
==종류==
 +
===대칭키===
 +
[[대칭키]](Symmetric key) 방식은 암호문을 생성(암호화) 할 때 사용하는 키와 암호문으로부터 평문을 복원(복호화) 할 때 사용하는 키가 동일한 암호 시스템으로 일반적으로 알고 있는 암호 시스템이다. 송신자와 수신자가 동일한 하나의 키로 암호화와 복호화를 수행하므로 대칭키 또는 비밀키(secret Key) 방식의 암호화라고 한다. 데이터를 [[블록]](block) 단위로 처리하는 블록 암호(block cipher) 와 연속된 스트림으로 처리하는 [[스트림암호]](Stream cipher) 가 있으며 일반적으로 대칭키 암호화라고 하면 블록 방식의 암호화를 의미한다.<ref>〈[https://lesstif.gitbooks.io/web-service-hardening/content/encryption.html 대칭키 암호화]〉, 《깃북》</ref> 알고리즘 구조가 간단하여 대용량 자료를 암/복호화 하는데 유리하다는 장점이 있지만 교환 당사자 간의 동일한 키를 공유하므로 키를 관리하기 어렵게 된다.
  
===대칭키 알고리즘===
+
====블록키====
[[대칭키]](Symmetric key) 방식은 암호문을 생성(암호화)할 때 사용하는 키와 암호문으로부터 평문을 복원(복호화)할 때 사용하는 키가 동일한 암호 시스템으로 일반적으로 알고 있는 암호 시스템이다. 송신자와 수신자가 동일한 하나의 키로 암호화와 복호화를 수행하므로 대칭키(Symmetric key) 또는 비밀키(Secret Key) 방식의 암호화라고 한다. 데이터를 블록(Block) 단위로 처리하는 블록암호(Block cipher) 와 연속된 스트림으로 처리하는 스트림 암호(Stream cipher) 가 있으며 일반적으로 대칭키 암호화라고 하면 블록 방식의 암호화를 의미한다.<ref>〈[https://lesstif.gitbooks.io/web-service-hardening/content/encryption.html 대칭키 암호화]〉, 《깃북》</ref> 알고리즘 구조가 간단하여 대용량 자료를 암/복호화 하는데 유리하다는 장점이 있지만 교환 당사자 간의 동일한 키를 공유하므로 키를 관리하기 어렵게 된다.
+
[[블록 암호]](block cipher)는 [[기밀성]](confidentiality) 있는 정보를 정해진 블록 단위로 암호화하는 대칭키 암호 시스템이다. 만약 암호화하려는 정보가 블록 길이보다 길 경우에는 특정한 운용 모드가 사용된다. 블록 암호에 대한 안전성 증명 방법으로는 선택평문공격인 [[차분공격]](differential cryptanalysis)과 알려진 평문 공격인 [[선형공격]](linear cryptanalysis) 등이 있다. 차분 공격은 [[암호해독]](cryptanalysis)의 한 방법으로, 입력값의 변화에 따른 출력값의 변화를 이용하는 방법이며, 선형공격은 암호 공격의 한 방법으로, 암호화 과정에서의 근사적 선형 관계식을 찾는 것을 목적으로 한다. 선형 공격은 차분 공격은 블록 암호를 공격하는 방법으로 널리 응용된다. 블록 암호 구조에는 [[페스탈]](Feistel)구조와 [[SPN]] 구조가 있다. 페스탈 구조는 암복호화 과정에서 역함수가 필요 없다는 장점이 있지만 구현 시 [[스왑]](swap) 단계 때문에 연산량이 많이 소요되며 암호에 사용되는 라운드 함수를 안전하게 설계해야 한다는 단점이 있다. 대표적인 암호로는 [[DES]]가 있으며 [[싱글 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>
  
====블록 암호화====
+
====세션키====
[[블록암호]](block cipher)는 기밀성있는 정보를 정해진 블록 단위로 암호화 하는 대칭키 암호 시스템이다. 만약 암호화하려는 정보가 블록 길이보다 길 경우에는 특정한 운용 모드가 사용된다. 블록 암호에 대한 안전성 증명 방법으로는 선택평문공격인 차분공격(Differential Cryptanalysis)과 알려진평문공격인 선형공격(Linear Cryptanalysis)등이 있다. 차분 공격(differential cryptanalysis)은 암호해독(cryptanalysis)의 한 방법으로, 입력값의 변화에 따른 출력값의 변화를 이용하는 방법이며, 선형 공격(linear cryptanalysis)은 암호 공격의 한 방법으로, 암호화 과정에서의 근사적 선형 관계식을 찾는 것을 목적으로 한다.  선형 공격은 차분 공격은 블록 암호를 공격하는 방법으로 널리 응용된다.
+
[[세션키]](session key)는 하나의 통신 [[세션]](Session)에서 모든 메시지를 암호화하기 위해 사용되는 1회용 대칭키이다. 하나의 키를 사용한 암호문이 많으면 이를 분석하는 키를 계산할 가능성이 있으므로 이를 막기 위해 사용하는 임시적인 키이다. 예를 들어 구인구직 애플리케이션이 있다고 가정했을 때, 애플리케이션 로그인 시 통신 세션을 시작하는 시작점이 되고, 이후에 회사 검색과 댓글을 달며 활동하는 동안 세션키의 작용으로 따로 다시 로그인할 필요 없이 처음 로그인한 계정으로 댓글을 달 수 있게 된다. 그 계정과 애플리케이션 사이에서 이루어질 수 있는 침입을 막기 위하여 존재하는 것이다. 세션키는 세션 동안 모든 통신에 사용된 다음 종료되면 키는 삭제된다. 이 단순성으로 한 번에 너무 많은 키를 작동하거나 오래 사용되면 보안에 문제가 발생할 수 있다.<ref>〈[https://ko.wikipedia.org/wiki/%EC%84%B8%EC%85%98_%ED%82%A4 세션 키]〉, 《위키백과》</ref><ref>〈[https://www.netinbag.com/ko/internet/what-is-a-session-key.html 세션 키란 무엇입니까?]〉, 《Netinbag》</ref> 한편 세션은 통신에서 사용자와 컴퓨터, 또는 두 대의 컴퓨터 간의 활성 된 접속을 의미한다. 프로그램 사용과 관련해서는 한 응용 프로그램의 기동을 시작해서 종료할 때까지의 시간을 나타낸다.<ref name="세션"> UDpark kingllzn, 〈[https://udpark.tistory.com/110 (Dictionary) 세션(Session)과 세션키(Session Key)의 정의 와 개념에 대한 설명]〉, 《티스토리》, 2018-10-24 </ref>
  
블록암호 구조에는 페스탈(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>
+
====마스터 키====
 +
[[마스터키]](Master key)세션 키가 마스터키에 의해 암호화되어 전달이 된다. 이때, 하나의 마스터키는 동일 사용자에게 여러 세션의 개설에도 사용이 가능하다.<ref>Skogkatt, 〈[https://skogkatt.tistory.com/40 암호키(Encryption Key)]〉, 《티스토리》, 2019-08-30</ref> 마스터카는 개인의 원장화된 [[디지털 자산]]을 보호하기 위한 프라이빗키, 즉 비밀번호 키 값 복구 및 회수 서비스에 사용된다. 주요한 디지털 자산 정보에 접근할 수 있는 매개에 대한 디지털 및 사이버 공격, 분실 위험, 행정적 실수, 탈취로부터 안전하게 보호하고 분실의 우려를 갖지 않도록 하는 보안적 기능의 의미를 가진다.
  
====세션키 암호화====
+
====스트림 키====
[[세션키]](session key)는 하나의 통신 [[세션]]에서 모든 메시지를 암호화 하기 위해 사용되는 1회용 대칭키 이다. 하나의 키를 사용한 암호문이 많으면 이를 분석하는 키를 계산할 가능성이 있으므로 이를 막기위해 사용하는 임시적인 키이다. 예를 들어, 구인구직 어플리케이션이 있다고 가정하자. 어플리케이션 로그인시 통신세션을 시작하는 시작점이 되고, 이후에 회사검색과 댓글을 달며 활동하는 동안 세션키의 작용으로 따로 다시 로그인 할 필요없이 처음 로그인한 계정으로 댓글을 달 수 있게된다. 그 계정과 어플리케이션 사이에서 이루어 질 수 있는 침입을 막기위하여 존재하는 것이다.  세션키는 세션 동안 모든 통신에 사용된 다음 종료되면 키는 삭제된다. 이 단순성으로 한 번에 너무 많은 키를 작동하거나 오래 사용되면 보안에 문제가 발생할 수 있다. ref> UDpark kingllzn〈[https://udpark.tistory.com/110 [Dictionary] 세션(Session)과 세션키(Session Key)의 정의 와 개념에 대한 설명]〉, 《티스토리》, 2018.10.24 </ref>
+
[[스트림 암호]](stream cipher)는 대칭키 암호의 구조 중 하나로, 유사 난수를 연속적(스트림)으로 생성하여 암호화하려는 자료와 결합하는 구조를 가진다. 일반적인 스트림 암호는 유사 난수를 1비트 단위로 생성하고, 생성된 값과 암호화하려는 각 값을 XOR 하여 1비트의 암호화된 자료를 얻는다. 스트림 암호는 일회용 [[난수표]](OTP)를 유사 난수로 대체한 것으로 볼 수 있다. 스트림 암호는 하드웨어 구현이 간편하며 속도가 빠르기 때문에 무선 통신 등의 환경에 주로 사용된다. 대표적으로 RC4가 널리 사용되며, 이외에도 A5/1, A5/2 등의 알고리즘이 존재한다.<ref>〈[https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%8A%B8%EB%A6%BC_%EC%95%94%ED%98%B8 스트림 암호]〉, 《위키백과》</ref>
<ref>〈[https://ko.wikipedia.org/wiki/%EC%84%B8%EC%85%98_%ED%82%A4 세션 키]〉, 《위키백과》</ref>
 
<ref>〈[https://www.netinbag.com/ko/internet/what-is-a-session-key.html 세션 키란 무엇입니까?]〉, 《Netinbag》</ref>
 
  
*'''세션''': 통신에서 사용자와 컴퓨터, 또는 두 대의 컴퓨터간의 활성된 접속을 의미한다. 프로그램 사용과 관련해서는 한 응용 프로그램의 기동을 시작해서 종료할 때까지의 시간을 나타낸다. <ref> UDpark kingllzn〈[https://udpark.tistory.com/110 [Dictionary] 세션(Session)과 세션키(Session Key)의 정의 와 개념에 대한 설명]〉, 《티스토리》, 2018.10.24 </ref>
+
===비대칭키===
 +
[[비대칭키]](Asymmetric Key)는 공개키라고 흔히 부르며 비대칭형 암호는 암호화 키와 복호화 키가 다르기에 하나의 키 쌍을 이룬다. 이 두 개의 키는 수학적으로 밀접한 관계를 가지고 있는데 두 개의 키를 각각 키 A, 키 B라고 했을 때 키 A로 암호화한 암호문은 키 B로만 복호화 할수 있고 키 B로 암호화한 암호문은 키 A로만 복호화 할 수 있다. 따라서 이중 하나의 키만 비밀로(비밀키, 개인키) 보호하고 다른 하나의 키는 공중에게 공개(공개키) 해도 관계가 없다. 공개키로 암호화한 암호문은 대체로 개인키를 가진 사람만이 복호가 가능하기 때문에 키 교환에 있어서 대칭키 알고리즘보다 안전하다는 장점이 있다.<ref> JAVA/프로그래밍 이론, 〈[https://javaplant.tistory.com/26 암호화 양방향, 단방향, 공개키(비댕칭키), 비공개키(대칭키) 개념/분류 알고리즘 정리]〉, 《자바공작소》, 2018-05-08 </ref>
  
====마스터키 암호화====
+
====공캐키====
[[마스터키]]는 세션 키가 마스터 키에 의해 암호화되어 전달이 된다. 이때, 하나의 마스터키는 동일 사용자에게 여러 세션의 개설에도 사용이 가능하다.
+
[[공개키]](public key)서로 다른 키로 데이터를 암호화하고 복호화 한다. 데이터를 암호화할 때 사용되는 키는 공개(공개키) 하고, 복호화 할 때의 키는 비밀(비밀키)로 하게 된다. 보통은 비대칭 암호 기법이라고 한다. 대표적으로 [[RSA]](Rivest Shamir Adleman)가 있으며, 서로 다른 데이터를 암호화하고 복호화 한다. 평문을 공개키로 암호화함으로써 기밀성과 [[인증]](certification)의 기능을 갖게 된다. 또한, 관리해야 할 키의 개수가 적고, 키 전달, 교환이 적합하다. 하지만 키의 알고리즘이 복잡해지며 암호화 복호화 속도가 느려지고 중간에 다른 사용자가 인증 과정 없기에 공격에 취약하다는 단점을 가지고 있다.<ref>어리버리, 〈[https://nologout.blog.me/220956646308 대칭키 VS 공개키(비대칭키)암호화 시스템]〉, 《네이버 블로그》, 2017-03-13 </ref>
  
====스트림 암호화====
+
====개인키====
[[스트림암호]](stream cipher)는 대칭 키 암호의 구조 하나로, 유사난수를 연속적(스트림)으로 생성하여 암호화하려는 자료와 결합하는 구조를 가진다. 일반적인 스트림 암호는 유사난수를 1비트 단위로 생성하고, 생성된 값과 암호화하려는 각 값을 XOR하여 1비트의 암호화된 자료를 얻는다. 스트림 암호는 일회용 [[난수표]](OTP)를 유사난수로 대체한 것으로 볼 수 있다. 스트림 암호는 하드웨어 구현이 간편하며 속도가 빠르기 때문에 무선 통신 등의 환경에 주로 사용된다. 대표적으로 RC4가 널리 사용되며, 이외에도 A5/1, A5/2 등의 알고리즘이 존재한다.<ref>〈[https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%8A%B8%EB%A6%BC_%EC%95%94%ED%98%B8 스트림 암호]〉, 《위키백과》</ref>
+
[[개인키]](Private Key)는 개인만이 알고, 소유하고 있는 키이며 비대칭키 방식(공개키) 하나이다. 개인키의 소유자는 개인키로 데이터를 암호화하고 공개키와 함께 전달한다. 이 방법은 보호의 목적보다는 공개키가 데이터의 신원을 보장해 주게 된다. 이 방법이 공인인증 체계의 기본 바탕이 되는 [[전자 서명]](electronic signature)이다. 단점은 만약 한쪽 편이 키를 잃어버리거나 도난당하면, 그 암호화 시스템은 깨지고 만다. 최근의 대안은, 공개키와 개인키의 조합 [[공개키 기반구조]](PKI)을 사용하는 것이다.<ref> 김선우, 〈[https://brunch.co.kr/@artiveloper/24 공개키, 비공개 키 원리]〉, 《브런치》, 2016-08-26 </ref><ref>〈[http://www.terms.co.kr/privatekey.htm private or secret key ; 개인키 또는 비밀키]〉, 《텀즈》</ref> 한편 공개키 기반 구조는 [[인증기관]](CA)에서 공개키와 개인키를 포함하는 [[인증서]](Certificate)를 발급받아 네트워크상에서 안전하게 비밀통신을 가능하게 하는 기반 구조이다.<ref> 꿈꾸는 개발자, 〈[https://m.blog.naver.com/scw0531/221457983852 정보보안 - PKI]〉, 《네이버 블로그》, 2019-02-03</ref>
  
===비대칭키 알고리즘===
+
==취약점==
====공캐키 암호화====
+
암호키의 관리 미숙, 유실, 교환 간의 착오 및 유출, 암호화 키가 물리적으로 안전하게 분리되어 있지 않다는 점을 이용하여 암호키를 가로채어 데이터가 유출/침해되는 경우가 있다. 업무의 크기의 증가에 따라 암호키의 크기가 증가하고 관리가 점점 어려워지고 있다. 암호키를 공격하는 유형 크게 두 가지로 나누면 [[암호화 알고리즘]](encryption algorithm), 암호화 키로 나뉜다. 암호화 알고리즘의 패턴을 분석하고 약점을 찾아내여 공격을 하여 탈취하거나, 알고리즘의 자체적인 보안 [[취약점]](weakness)을 이용하는 경우도 있다. 그러기에는 [[해커]](hacker)는 많은 시간이 소요되며 알고리즘의 대한 지식이 바탕이 되어야 한다. 암호화 키의 경우 교환 도중 중간자가 키를 가로채거나 받는 사람으로 위장하여 키가 노출되면 해커는 노출된 키로 암호화된 자료를 무단 열람, 도청, 변조를 할 수 있게 된다. 또한 암호키에 대한 [[백업]]이 없는 상태에서 키가 훼손됨에 따라 자료를 열람할 수 없는 상황이 생긴다. 해커들은 암호화 알고리즘 보다 암호화키에 대한 취약점을 이용한 공격이 더 쉽기에 선호한다.<ref name="취약점"> 젬알토 코리아, 〈[https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=safenetkor&logNo=220192972201 암호화와 키 관리 해법 - 원칙만 지키면 되는 간단한 일]〉, 《네이버 블로그》, 2014-11-26 </ref>
[[공개키]]는 서로 다른 키로 데이터를 암호화하고 복호화한다. 데이터를 암호화할 때 사용되는 키는 공개(공개키)하고, 복호화할 때의 키는 비밀(비밀키)로 하게 된다.보통은 비대칭 암호 기법이라고 한다. 대표적으로 RSA(Rivest Shamir Adleman)가 있으며, 서로 다른 데이터를 암호화하고 복호화한다. 평문을 공개키로 암호화 하므로써 [[기밀성]][[인증]]의 기능을 갖게 된다. 또한, 관리해야 할 키의 개수가 적고, 키 전달,교환이 적합하다. 하지만 키의 알고리즘이 복잡하지며 암호화 복호화 속도가 느려지고 중간에 다른 사용자가 [[인증]]과정 없기에 공격에 취약하다는 단점을 가지고 있다.<ref>어리버리〈[https://nologout.blog.me/220956646308 대칭키 VS 공개키(비대칭키)암호화 시스템]〉, 《네이버 블로그》, 2017.3.13 </ref>
 
  
====개인키 암호화====
+
==관리==
[[개인키]]는 개인만이 알고, 소유하고 있는 키이며 비대칭키 방식(공개키)중 하나이다. 개인키의 소유자는 개인키로 데이터를 암호화하고 공개키와 함께 전달한다. 이 방법은 보호의 목적보다는 공개키가 데이터의 신원을 보장해주게 된다. 이 방법이 공인인증체계의 기본 바탕이 되는 전자서명이다. 단점은 만약 한쪽 편이 키를 잃어버리거나 도난 당하면, 그 암호화 시스템은 깨지고 만다.최근의 대안은, 공개키와 개인키의 조합 [[공개키 기반구조]](PKI)을 사용하는 것이다. <ref> 김선우〈[https://brunch.co.kr/@artiveloper/24 공개키, 비공개 키 원리]〉, 《브런치》, 2016.8.26 </ref>
+
암호의 기술 도입이 활발히 진행하고 있음에 불가하고, 보안 사고가 종종 생기면서 데이터를 암호화하는 것뿐만 아니라 관리 또한 중요성이 점점 커지고 있다. 이유를 살펴보자면 근대에 암호화가 키를 중심으로 진행되어 알고리즘에 더 신경 쓰게 되었다. 하지만 점점 알고리즘이 표준화되면서 보안에 취약점이 생기고, 키의 관리가 소홀해지면서 키를 어떻게 저장하고 관리할 것인지가 더 중요해지고 있다.<ref name="취약점"></ref><ref>〈[http://unet.kr/wp-content/uploads/2020/03/TrustKMS-%EC%A0%9C%ED%92%88%EC%86%8C%EA%B0%9C_2020.pdf 암호키 관리의 중요성]〉, 《UNET 유넷시스템》</ref> 관리 유형에 따른 취약점은 다음과 같다.
<ref>〈[http://www.terms.co.kr/privatekey.htm private or secret key ; 개인키 또는 비밀키]〉, 《텀즈》</ref>
 
  
*'''공개키 기반 구조(PKI)''': 인증기관(CA)에서 공개키와 개인키를 포함하는 인증서(Certificate)를 발급받아 네트워크상에서 안전하게 비밀통신을 가능하게하는 기반구조
+
===하드 코딩 형태의 저장===
<ref> 꿈꾸는 개발자〈[https://m.blog.naver.com/scw0531/221457983852 정보보안 - PKI]〉, 《네이버 블로그》, 2019.2.3</ref>
+
애플리케이션내에 [[하드 코딩]] 형태로 넣어 관리하면 소스 코드 수준의 해킹이 아닌 이상 키가 안전하지 않을까 하는 생각을 갖게 된다. 하지만 키 관리의 속성을 놓고 보면 결코 안전하지 않다. 대칭키의 경우 암호문과 평문간의 분석하는 알고리즘 공격에 쉽게 무너질 수 있다. 이런 공격에 대응하기 위해서는 키를 주기적으로 바꿔야 하는데 애플리케이션 내에 하드 코딩이 되어 있다 보니 일일이 수작업으로 처리를 해야 한다는 것이다. 이를 또 행하다 보면 수정하는 과정에서 키가 외부에 노출될 수 있기 때문에 다른 문제점이 발생하게 된다.<ref name="취약점"></ref>
  
 +
===파일 시스템 상의 저장===
 +
암호화된 파일이 저장된 서버나 관리자 PC에 키를 저장하는 것으로 x86 서버를 별도로 마련해 키 관리 전용으로 쓰이는 경우가 있다. 이 경우 키를 저장할 때 [[패스워드]](password)로 암호화되어 보관되어 키 파일 만으로는 해독이 불가능하다. 하지만 이것은 해당 시스템에 접근할 수 있는 권한만 갖게 되면 해당 파일을 임의로 지울 수 있게 된다. 키 파일의 삭제로 암호화된 데이터를 열어볼 수 없게 할 수 있으므로 외부에 유출은 하지 않았지만 영구적으로 손실될 위험성이 크기에 보다 큰 피해이다.<ref name="취약점"></ref>
  
 +
{{각주}}
  
 
+
==참고자료==
 
+
* 〈[https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D_%EC%95%94%ED%98%B8 블록암호]〉, 《위키백과》
{{각주}}
+
* 〈[https://ko.wikipedia.org/wiki/%EC%84%B8%EC%85%98_%ED%82%A4 세션 키]〉, 《위키백과》
 +
* 〈[https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%8A%B8%EB%A6%BC_%EC%95%94%ED%98%B8 스트림 암호]〉, 《위키백과》
 +
* 〈[https://seed.kisa.or.kr/kisa/intro/EgovDefinition.do 암호기술의 정의]〉, 《KISA 암호이용활성화》
 +
* 〈[https://seed.kisa.or.kr/kisa/intro/EgovHistory.do 암호기술의 역사]〉, 《KISA 암호이용활성화》
 +
* 〈[https://lesstif.gitbooks.io/web-service-hardening/content/encryption.html 대칭키 암호화]〉, 《깃북》
 +
* 〈[http://www.terms.co.kr/privatekey.htm private or secret key ; 개인키 또는 비밀키]〉, 《텀즈》
 +
* 〈[https://www.netinbag.com/ko/internet/what-is-a-session-key.html 세션 키란 무엇입니까?]〉, 《Netinbag》
 +
* 〈[http://unet.kr/wp-content/uploads/2020/03/TrustKMS-%EC%A0%9C%ED%92%88%EC%86%8C%EA%B0%9C_2020.pdf 암호키 관리의 중요성]〉, 《UNET 유넷시스템》
 +
* 젬알토 코리아, 〈[https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=safenetkor&logNo=220192972201 암호화와 키 관리 해법 - 원칙만 지키면 되는 간단한 일]〉, 《네이버 블로그》, 2014-11-26
 +
* 김선우, 〈[https://brunch.co.kr/@artiveloper/24 공개키, 비공개 키 원리]〉, 《브런치》, 2016-08-26
 +
* 어리버리, 〈[https://nologout.blog.me/220956646308 대칭키 VS 공개키(비대칭키)암호화 시스템]〉, 《네이버 블로그》, 2017-03-13
 +
* JAVA/프로그래밍 이론, 〈[https://javaplant.tistory.com/26 암호화 양방향, 단방향, 공개키(비댕칭키), 비공개키(대칭키) 개념/분류 알고리즘 정리]〉, 《자바공작소》, 2018-05-08
 +
* UDpark kingllzn, 〈[https://udpark.tistory.com/110 (Dictionary) 세션(Session)과 세션키(Session Key)의 정의 와 개념에 대한 설명]〉, 《티스토리》, 2018-10-24
 +
* 꿈꾸는 개발자, 〈[https://m.blog.naver.com/scw0531/221457983852 정보보안 - PKI]〉, 《네이버 블로그》, 2019-02-03
 +
*  Skogkatt, 〈[https://skogkatt.tistory.com/40 암호 키(Encryption Key)]〉, 《티스토리》, 2019-08-30
  
 
==같이 보기==
 
==같이 보기==
 
* [[암호]]
 
* [[암호]]
* [[키 (데이터베이스)]]
+
* [[키 (데이터베이스)|키]]
  
{{보안|토막글}}
+
{{보안|검토 필요}}
 +
{{암호 알고리즘}}

2021년 8월 4일 (수) 10:44 기준 최신판

암호키(Encryption Key)는 암호화 또는 복호화를 위하여 하나의 알고리즘과 함께 쓰이는 값이다.

개요[편집]

암호키는 평문을 암호화, 복호화하는 핵심 가변 정보 값으로, 암호 알고리즘 수행 시 반드시 주어져야 할 값이다. 평문에서 암호기술을 적용하여 암호문으로 변환할 때 암호키가 필요하며, 암호문을 평문으로 변환할 때에는 복호키가 필요하다. 키 공간이 커지면 보안성은 증가되며 그 키의 길이는 사용된 알고리즘의 비트(bit)의 수에 결정된다. 제3자가 알 수 없도록 안전성을 유지하기 위해서는 암호키는와 관련된 비밀을 유지하여야 한다.[1]

역사[편집]

암호키는 1970년대 후반 미국 스탠퍼드 대학교매사추세츠 공과대학교에서 개발되었다. 1976년 스탠퍼드 대학교의 휫필드 디피(Whitfield Diffie)와 마틴 헬만(Martin Hellman)은 '암호의 새로운 방향(New Directions in Cryptography)'이라는 논문에서 처음으로 공개키 암호의 개념을 발표하였다. 종래의 관용 암호 방식 또는 대칭키 암호 방식에서는 암호화 키와 복호화 키가 동일한 비밀키를 사용하기 때문에 송신자와 수신자는 비밀 통신을 하기 전에 비밀키를 공유하고 있어야 한다. 반면 공개키 암호 방식에서는 하나의 쌍이 되는 공개키와 비밀키를 생성하여 암호화에 사용되는 공개키는 공개하고, 복호화에 사용되는 비밀키는 사용자가 안전하게 보관하도록 한다. 공개키 암호 방식에서는 송신자와 수신자가 사전에 키를 공유할 필요가 없기 때문에 불특정 다수 사용자 간에 사전 준비가 없이도 암호 통신망을 구축하는데 유용하게 사용할 수 있다. 이어 1978년 MIT 대학의 로널드 리베스트(Ron Rivest), 아디 샤미르(Adi Shamir), 레너드 애들먼(Leonard Adleman)은 소인수 분해 문제에 기반을 둔 RSA 공개키 암호를 개발했는데, 이것은 오늘까지도 가장 널리 사용되는 공개키 암호 방식이다. 공개키 암호의 도입은 현대 암호의 발전에 중요한 계기가 되었다.[2]

종류[편집]

대칭키[편집]

대칭키(Symmetric key) 방식은 암호문을 생성(암호화) 할 때 사용하는 키와 암호문으로부터 평문을 복원(복호화) 할 때 사용하는 키가 동일한 암호 시스템으로 일반적으로 알고 있는 암호 시스템이다. 송신자와 수신자가 동일한 하나의 키로 암호화와 복호화를 수행하므로 대칭키 또는 비밀키(secret Key) 방식의 암호화라고 한다. 데이터를 블록(block) 단위로 처리하는 블록 암호(block cipher) 와 연속된 스트림으로 처리하는 스트림암호(Stream cipher) 가 있으며 일반적으로 대칭키 암호화라고 하면 블록 방식의 암호화를 의미한다.[3] 알고리즘 구조가 간단하여 대용량 자료를 암/복호화 하는데 유리하다는 장점이 있지만 교환 당사자 간의 동일한 키를 공유하므로 키를 관리하기 어렵게 된다.

블록키[편집]

블록 암호(block cipher)는 기밀성(confidentiality) 있는 정보를 정해진 블록 단위로 암호화하는 대칭키 암호 시스템이다. 만약 암호화하려는 정보가 블록 길이보다 길 경우에는 특정한 운용 모드가 사용된다. 블록 암호에 대한 안전성 증명 방법으로는 선택평문공격인 차분공격(differential cryptanalysis)과 알려진 평문 공격인 선형공격(linear cryptanalysis) 등이 있다. 차분 공격은 암호해독(cryptanalysis)의 한 방법으로, 입력값의 변화에 따른 출력값의 변화를 이용하는 방법이며, 선형공격은 암호 공격의 한 방법으로, 암호화 과정에서의 근사적 선형 관계식을 찾는 것을 목적으로 한다. 선형 공격은 차분 공격은 블록 암호를 공격하는 방법으로 널리 응용된다. 블록 암호 구조에는 페스탈(Feistel)구조와 SPN 구조가 있다. 페스탈 구조는 암복호화 과정에서 역함수가 필요 없다는 장점이 있지만 구현 시 스왑(swap) 단계 때문에 연산량이 많이 소요되며 암호에 사용되는 라운드 함수를 안전하게 설계해야 한다는 단점이 있다. 대표적인 암호로는 DES가 있으며 싱글 DES(Single DES)는 안전성 문제로 현재 사용하고 있지 않다. 한국에서는 개발된 암호 중에서는 페스탈 구조 기반으로 설계된 SEED가 있다. SPN 구조는 암복호화 과정에서 역함수가 필요하도록 설계되어야 한다는 단점이 있지만 중간에 비트의 이동 없이 한 번에 암복호화가 가능하기 때문에 페스탈 구조에 비해 효율적으로 설계할 수 있다. 대표적인 암호로는 AES가 있으며 AES는 현재 널리 상용되고 있다.[4]

세션키[편집]

세션키(session key)는 하나의 통신 세션(Session)에서 모든 메시지를 암호화하기 위해 사용되는 1회용 대칭키이다. 하나의 키를 사용한 암호문이 많으면 이를 분석하는 키를 계산할 가능성이 있으므로 이를 막기 위해 사용하는 임시적인 키이다. 예를 들어 구인구직 애플리케이션이 있다고 가정했을 때, 애플리케이션 로그인 시 통신 세션을 시작하는 시작점이 되고, 이후에 회사 검색과 댓글을 달며 활동하는 동안 세션키의 작용으로 따로 다시 로그인할 필요 없이 처음 로그인한 계정으로 댓글을 달 수 있게 된다. 그 계정과 애플리케이션 사이에서 이루어질 수 있는 침입을 막기 위하여 존재하는 것이다. 세션키는 세션 동안 모든 통신에 사용된 다음 종료되면 키는 삭제된다. 이 단순성으로 한 번에 너무 많은 키를 작동하거나 오래 사용되면 보안에 문제가 발생할 수 있다.[5][6] 한편 세션은 통신에서 사용자와 컴퓨터, 또는 두 대의 컴퓨터 간의 활성 된 접속을 의미한다. 프로그램 사용과 관련해서는 한 응용 프로그램의 기동을 시작해서 종료할 때까지의 시간을 나타낸다.[7]

마스터 키[편집]

마스터키(Master key)는 세션 키가 마스터키에 의해 암호화되어 전달이 된다. 이때, 하나의 마스터키는 동일 사용자에게 여러 세션의 개설에도 사용이 가능하다.[8] 마스터카는 개인의 원장화된 디지털 자산을 보호하기 위한 프라이빗키, 즉 비밀번호 키 값 복구 및 회수 서비스에 사용된다. 주요한 디지털 자산 정보에 접근할 수 있는 매개에 대한 디지털 및 사이버 공격, 분실 위험, 행정적 실수, 탈취로부터 안전하게 보호하고 분실의 우려를 갖지 않도록 하는 보안적 기능의 의미를 가진다.

스트림 키[편집]

스트림 암호(stream cipher)는 대칭키 암호의 구조 중 하나로, 유사 난수를 연속적(스트림)으로 생성하여 암호화하려는 자료와 결합하는 구조를 가진다. 일반적인 스트림 암호는 유사 난수를 1비트 단위로 생성하고, 생성된 값과 암호화하려는 각 값을 XOR 하여 1비트의 암호화된 자료를 얻는다. 스트림 암호는 일회용 난수표(OTP)를 유사 난수로 대체한 것으로 볼 수 있다. 스트림 암호는 하드웨어 구현이 간편하며 속도가 빠르기 때문에 무선 통신 등의 환경에 주로 사용된다. 대표적으로 RC4가 널리 사용되며, 이외에도 A5/1, A5/2 등의 알고리즘이 존재한다.[9]

비대칭키[편집]

비대칭키(Asymmetric Key)는 공개키라고 흔히 부르며 비대칭형 암호는 암호화 키와 복호화 키가 다르기에 하나의 키 쌍을 이룬다. 이 두 개의 키는 수학적으로 밀접한 관계를 가지고 있는데 두 개의 키를 각각 키 A, 키 B라고 했을 때 키 A로 암호화한 암호문은 키 B로만 복호화 할수 있고 키 B로 암호화한 암호문은 키 A로만 복호화 할 수 있다. 따라서 이중 하나의 키만 비밀로(비밀키, 개인키) 보호하고 다른 하나의 키는 공중에게 공개(공개키) 해도 관계가 없다. 공개키로 암호화한 암호문은 대체로 개인키를 가진 사람만이 복호가 가능하기 때문에 키 교환에 있어서 대칭키 알고리즘보다 안전하다는 장점이 있다.[10]

공캐키[편집]

공개키(public key)는 서로 다른 키로 데이터를 암호화하고 복호화 한다. 데이터를 암호화할 때 사용되는 키는 공개(공개키) 하고, 복호화 할 때의 키는 비밀(비밀키)로 하게 된다. 보통은 비대칭 암호 기법이라고 한다. 대표적으로 RSA(Rivest Shamir Adleman)가 있으며, 서로 다른 데이터를 암호화하고 복호화 한다. 평문을 공개키로 암호화함으로써 기밀성과 인증(certification)의 기능을 갖게 된다. 또한, 관리해야 할 키의 개수가 적고, 키 전달, 교환이 적합하다. 하지만 키의 알고리즘이 복잡해지며 암호화 복호화 속도가 느려지고 중간에 다른 사용자가 인증 과정 없기에 공격에 취약하다는 단점을 가지고 있다.[11]

개인키[편집]

개인키(Private Key)는 개인만이 알고, 소유하고 있는 키이며 비대칭키 방식(공개키) 중 하나이다. 개인키의 소유자는 개인키로 데이터를 암호화하고 공개키와 함께 전달한다. 이 방법은 보호의 목적보다는 공개키가 데이터의 신원을 보장해 주게 된다. 이 방법이 공인인증 체계의 기본 바탕이 되는 전자 서명(electronic signature)이다. 단점은 만약 한쪽 편이 키를 잃어버리거나 도난당하면, 그 암호화 시스템은 깨지고 만다. 최근의 대안은, 공개키와 개인키의 조합 공개키 기반구조(PKI)을 사용하는 것이다.[12][13] 한편 공개키 기반 구조는 인증기관(CA)에서 공개키와 개인키를 포함하는 인증서(Certificate)를 발급받아 네트워크상에서 안전하게 비밀통신을 가능하게 하는 기반 구조이다.[14]

취약점[편집]

암호키의 관리 미숙, 유실, 교환 간의 착오 및 유출, 암호화 키가 물리적으로 안전하게 분리되어 있지 않다는 점을 이용하여 암호키를 가로채어 데이터가 유출/침해되는 경우가 있다. 업무의 크기의 증가에 따라 암호키의 크기가 증가하고 관리가 점점 어려워지고 있다. 암호키를 공격하는 유형 크게 두 가지로 나누면 암호화 알고리즘(encryption algorithm), 암호화 키로 나뉜다. 암호화 알고리즘의 패턴을 분석하고 약점을 찾아내여 공격을 하여 탈취하거나, 알고리즘의 자체적인 보안 취약점(weakness)을 이용하는 경우도 있다. 그러기에는 해커(hacker)는 많은 시간이 소요되며 알고리즘의 대한 지식이 바탕이 되어야 한다. 암호화 키의 경우 교환 도중 중간자가 키를 가로채거나 받는 사람으로 위장하여 키가 노출되면 해커는 노출된 키로 암호화된 자료를 무단 열람, 도청, 변조를 할 수 있게 된다. 또한 암호키에 대한 백업이 없는 상태에서 키가 훼손됨에 따라 자료를 열람할 수 없는 상황이 생긴다. 해커들은 암호화 알고리즘 보다 암호화키에 대한 취약점을 이용한 공격이 더 쉽기에 선호한다.[15]

관리[편집]

암호의 기술 도입이 활발히 진행하고 있음에 불가하고, 보안 사고가 종종 생기면서 데이터를 암호화하는 것뿐만 아니라 관리 또한 중요성이 점점 커지고 있다. 이유를 살펴보자면 근대에 암호화가 키를 중심으로 진행되어 알고리즘에 더 신경 쓰게 되었다. 하지만 점점 알고리즘이 표준화되면서 보안에 취약점이 생기고, 키의 관리가 소홀해지면서 키를 어떻게 저장하고 관리할 것인지가 더 중요해지고 있다.[15][16] 관리 유형에 따른 취약점은 다음과 같다.

하드 코딩 형태의 저장[편집]

애플리케이션내에 하드 코딩 형태로 넣어 관리하면 소스 코드 수준의 해킹이 아닌 이상 키가 안전하지 않을까 하는 생각을 갖게 된다. 하지만 키 관리의 속성을 놓고 보면 결코 안전하지 않다. 대칭키의 경우 암호문과 평문간의 분석하는 알고리즘 공격에 쉽게 무너질 수 있다. 이런 공격에 대응하기 위해서는 키를 주기적으로 바꿔야 하는데 애플리케이션 내에 하드 코딩이 되어 있다 보니 일일이 수작업으로 처리를 해야 한다는 것이다. 이를 또 행하다 보면 수정하는 과정에서 키가 외부에 노출될 수 있기 때문에 다른 문제점이 발생하게 된다.[15]

파일 시스템 상의 저장[편집]

암호화된 파일이 저장된 서버나 관리자 PC에 키를 저장하는 것으로 x86 서버를 별도로 마련해 키 관리 전용으로 쓰이는 경우가 있다. 이 경우 키를 저장할 때 패스워드(password)로 암호화되어 보관되어 키 파일 만으로는 해독이 불가능하다. 하지만 이것은 해당 시스템에 접근할 수 있는 권한만 갖게 되면 해당 파일을 임의로 지울 수 있게 된다. 키 파일의 삭제로 암호화된 데이터를 열어볼 수 없게 할 수 있으므로 외부에 유출은 하지 않았지만 영구적으로 손실될 위험성이 크기에 보다 큰 피해이다.[15]

각주[편집]

  1. 암호기술의 정의〉, 《KISA 암호이용활성화》
  2. 암호기술의 역사〉, 《KISA 암호이용활성화》
  3. 대칭키 암호화〉, 《깃북》
  4. 블록암호〉, 《위키백과》
  5. 세션 키〉, 《위키백과》
  6. 세션 키란 무엇입니까?〉, 《Netinbag》
  7. UDpark kingllzn, 〈(Dictionary) 세션(Session)과 세션키(Session Key)의 정의 와 개념에 대한 설명〉, 《티스토리》, 2018-10-24
  8. Skogkatt, 〈암호키(Encryption Key)〉, 《티스토리》, 2019-08-30
  9. 스트림 암호〉, 《위키백과》
  10. JAVA/프로그래밍 이론, 〈암호화 양방향, 단방향, 공개키(비댕칭키), 비공개키(대칭키) 개념/분류 알고리즘 정리〉, 《자바공작소》, 2018-05-08
  11. 어리버리, 〈대칭키 VS 공개키(비대칭키)암호화 시스템〉, 《네이버 블로그》, 2017-03-13
  12. 김선우, 〈공개키, 비공개 키 원리〉, 《브런치》, 2016-08-26
  13. private or secret key ; 개인키 또는 비밀키〉, 《텀즈》
  14. 꿈꾸는 개발자, 〈정보보안 - PKI〉, 《네이버 블로그》, 2019-02-03
  15. 15.0 15.1 15.2 15.3 젬알토 코리아, 〈암호화와 키 관리 해법 - 원칙만 지키면 되는 간단한 일〉, 《네이버 블로그》, 2014-11-26
  16. 암호키 관리의 중요성〉, 《UNET 유넷시스템》

참고자료[편집]

같이 보기[편집]


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