"공개키 암호 알고리즘"의 두 판 사이의 차이
잔글 |
(→개요) |
||
2번째 줄: | 2번째 줄: | ||
== 개요 == | == 개요 == | ||
− | 공개키 암호는 대칭키 암호의 키 전달에 있어서 취약점을 해결하고자 한 노력의 결과로 탄생했다. 한 쌍의 키가 존재하며, 하나는 특정 사람만이 가지는 개인키(또는 비밀키)이고 다른 하나는 누구나 가질 수 있는 공개키이다.<ref name = "불곰"> 불곰, 〈[https://brownbears.tistory.com/332 암호(대팅키 암호, 공개키 암호)]〉, 《티스토리》, 2017-03-14 </ref> 공개키 암호화 방식은 암호학적으로 연관된 두 개의 키를 만들어서 하나는 자기가 안전하게 보관하고 다른 하나는 상대방에게 공개한다.<ref name = "깃북스"> 〈[https://lesstif.gitbooks.io/web-service-hardening/content/public-key-encryption.html 공개키 암호화]〉, 《깃북스》</ref> 개인키로 암호화 한 정보는 그 쌍이 되는 공개키로만 복호화가 가능하고, 공개키로 암호화한 정보는 그 쌍이 되는 개인키로만 복호화가 가능하다. 개인이 비밀통신을 할 경우엔 [[대칭키 암호]]를 사용할 수 있지만, 다수가 통신을 할 때에는 키의 개수가 급증하게 되어 큰 어려움이 따른다. 이런 어려움을 극복하기 위해 나타난 것이 공개키 암호이다. 공개키 암호는 다른 유저와 키를 공유하지 않더라도 암호를 통한 안전한 통신을 할 수 있다는 | + | 공개키 암호는 대칭키 암호의 키 전달에 있어서 취약점을 해결하고자 한 노력의 결과로 탄생했다. 한 쌍의 키가 존재하며, 하나는 특정 사람만이 가지는 개인키(또는 비밀키)이고 다른 하나는 누구나 가질 수 있는 공개키이다.<ref name = "불곰"> 불곰, 〈[https://brownbears.tistory.com/332 암호(대팅키 암호, 공개키 암호)]〉, 《티스토리》, 2017-03-14 </ref> 공개키 암호화 방식은 암호학적으로 연관된 두 개의 키를 만들어서 하나는 자기가 안전하게 보관하고 다른 하나는 상대방에게 공개한다.<ref name = "깃북스"> 〈[https://lesstif.gitbooks.io/web-service-hardening/content/public-key-encryption.html 공개키 암호화]〉, 《깃북스》</ref> 개인키로 암호화 한 정보는 그 쌍이 되는 공개키로만 복호화가 가능하고, 공개키로 암호화한 정보는 그 쌍이 되는 개인키로만 복호화가 가능하다. 개인이 비밀통신을 할 경우엔 [[대칭키 암호]]를 사용할 수 있지만, 다수가 통신을 할 때에는 키의 개수가 급증하게 되어 큰 어려움이 따른다. 이런 어려움을 극복하기 위해 나타난 것이 공개키 암호이다. 공개키 암호는 다른 유저와 키를 공유하지 않더라도 암호를 통한 안전한 통신을 할 수 있다는 장점이 있다.<ref name = "불곰"></ref> |
== 배경 == | == 배경 == |
2020년 7월 2일 (목) 13:01 판
공개키 암호 알고리즘(public key cryptosystem) 또는 비대칭키 암호 알고리즘이란 암호화 알고리즘의 한 종류로, 암호화할 때 사용하는 암호키와 복호화할 때 사용하는 암호키가 서로 다르다.
목차
개요
공개키 암호는 대칭키 암호의 키 전달에 있어서 취약점을 해결하고자 한 노력의 결과로 탄생했다. 한 쌍의 키가 존재하며, 하나는 특정 사람만이 가지는 개인키(또는 비밀키)이고 다른 하나는 누구나 가질 수 있는 공개키이다.[1] 공개키 암호화 방식은 암호학적으로 연관된 두 개의 키를 만들어서 하나는 자기가 안전하게 보관하고 다른 하나는 상대방에게 공개한다.[2] 개인키로 암호화 한 정보는 그 쌍이 되는 공개키로만 복호화가 가능하고, 공개키로 암호화한 정보는 그 쌍이 되는 개인키로만 복호화가 가능하다. 개인이 비밀통신을 할 경우엔 대칭키 암호를 사용할 수 있지만, 다수가 통신을 할 때에는 키의 개수가 급증하게 되어 큰 어려움이 따른다. 이런 어려움을 극복하기 위해 나타난 것이 공개키 암호이다. 공개키 암호는 다른 유저와 키를 공유하지 않더라도 암호를 통한 안전한 통신을 할 수 있다는 장점이 있다.[1]
배경
1976년 휫필드 디피(Whitfield Diffe)와 마틴 헬만(Martin Hellman)은 하나의 공유 비밀 키가 아니라 두 개의 키를 사용할 것을 제안했다. 공개키가 어떤 특성을 가져야 하는지에 대한 공개키 암호화의 아이디어를 발표했다. 휫필드 디피와 마틴 헬만은 공개키 암호화는 암호화 및 암호 해독 프로세스를 근본적으로 변경하여 커다란 혁신을 가져왔다. 1977년에 공개키 암호의 구체적인 알고리즘으로 랄프 머클(Ralph Merkle)와 마틴 헬만(Martin Hellman)에 의해 배낭(napsack) 암호가 만들어졌다. 1978년, 공개키 암호 알고리즘 로널드 라이베스트(Ronald Rivest)와 아디 샤미르(Adi Shamir), 레너드 애들먼(Leonard Adleman)에 의해 RSA를 발표했다. [3]
통신 절차
- 송신자는 수신자의 공개키를 구한다.
- 송신자는 수신자의 공개키로 평문을 암호화한다.
- 송신자는 암호화된 메시지를 상대방에게 전달한다. 메시지는 암호화되어 있기 때문에 전달 도중에 유출되거나 도청이 되더라도 암호문으로부터 원문을 알아내기 어렵다.
- 수신자는 자신의 비밀키로 암호화된 메시지를 해독해서 평문을 얻는다.[2]
장단점
공개키 암호는 다른 유저와 키를 공유하지 않더라도 암호를 통한 안전한 통신을 한다는 장점을 가진다. 각 사용자는 자신에게 전송하기 위해 사용될 키를 공개하고, 공개된 키의 정보로 암호화된 정보를 복호화할 수 있는 키를 비밀로 보유하고 있음으로써 누구나 암호화할 수 있지만 공개키에 대응되는 비밀키를 가진 사람만이 복호화할 수 있는 특징을 가진다. n명의 사용자로 구성된 네트워크를 고려하면 각 사용자는 공개키와 비밀키 두 개를 보유하고 있으므로 네트워크 전체적으로 2n 개의 키가 필요하다. 그리고 각 사용자는 2개의 키만 보유하면 된다. 또한, 키 관리와 키 분배가 용이하다. 공개키 암호화 통신을 할 경우 각자의 공개키 및 개인키를 생성하여 공개키는 공개하고 자신의 개인키만 관리하면 되고, 공개키에 의한 암호화 통신을 할 경우에는 각자의 공개키를 공개하여 필요할 때 상대방이 이용할 수 있도록 한다.[3] 공개키 암호는 보안의 강도가 높아 RSA의 경우, 소인수분해 문제의 어려움을 이용했기 때문에, 현재로서는 암호가 깨지지 않는다. 그리고 현재 256비트의 암호키를 사용하면, 복호화하는데 우주의 나이만큼의 시간이 필요하다.[4] 하지만 공개키 암호는 수학적인 난제를 기반으로 설계되었기 때문에, 암호화나 복호화를 수행하기 위한 연산이 복잡한 수학 연산을 기반으로 구성되기 때문에 효율성은 대칭키 암호에 비해 높지 않고, 대칭키 알고리즘보다 속도가 대략 1000배 느리다.[3]
종류
대표적인 공개키 암호 알고리즘은 다음과 같다.
RSA(Rivest, Shamir and Adleman)
RSA[25]는 라이베스트(Rivest)와 샤미르(Shamir)와 애들먼(Adleman)의 첫 자를 따서, RSA라고 함)에 의해 처음으로 명명되었다. RSA는 공개키 암호 시스템으로 암호화와 인증에 사용되고, RSA는 오늘날 사용되는 공개키 암호 방식의 가장 일반적인 공개 알고리즘이다. RSA는 일반 정수론적인 면에서 정의되었다. RSA 체계에서는 두 개의 숫자(대개 두 개의 큰 소수)를 곱하여 얻어낸 계수를 이용해 키를 생성한다. 이 시스템은 큰 수의 인수분해의 어려움에 안전성을 두고 있다. RSA는 수많은 국제기구의 표준일 뿐만 아니라 산업 표준으로 권장되고 있다.[5]
ElGamal
이산 대수 문제의 어려움에 기반을 둔 최초의 공개키 암호 알고리즘인 ElGamal[26]은 1984년 스탠퍼드 대학의 암호 학자 T. ElGamal에 의해 제안되었다. ElGamal으로 암호화하면 메시지의 길이가 두 배로 늘어나는 특징이 있다. 하지만 암호화할 때 난수를 이용하므로 같은 메시지에 대해 암호화하여도 암호화할 때마다 서로 다른 암호문을 얻게 되는데, 이것은 정보보호 측면에서 큰 장점이 된다. RSA에서는 난수를 사용하지 않기 때문에 같은 메시지에 대한 암호문은 항상 같다는 특징이 있는데, 이것은 공격자가 암호문을 복호화하지 않고도 평문을 추측할 수 있는 단점이 된다. 그러므로 실제 적용 시 RSA는 난수를 사용하는 OAEP(Optimal Asymmetric Encryption Padding)이라는 난수화 패딩 알고리즘과 함께 사용된다.
ECC(Elliptic Curve Cryptosystem, 타원 곡선 암호 시스템)
타원 곡선(Elliptic Curves)은 약 150년 전부터 수학적으로 광범위한 연구가 있었다. ECC[27]는 10여 년 전 비트 당 안전도가 타 공개키 시스템보다 효율적이라는 것이 알려졌고, 최근 높은 속도의 구현이 가능하게 되었다. 또한, ECC는 전원의 양이 한정된 이동 통신 기기의 암호화에 적용될 수 있으며, 차세대 공개키 암호 방법으로 주목 받고 있다.
전자서명(Digital signature)
전자 서명(Digital signature)은 우리가 일상생활에서 신원을 확인하거나 거래를 하려고 할 때 주민등록증이나 인김 날인 또는 서명 등이 필요하듯이, 인터넷상에서도 이를 확실히 보장해 줄 수 있는 수단이 전자 서명이다. 한마디로 전자 서명은 이 증서 형태로 발급되는 자신만의 디지털 인감이며 서명인 것이다. 결국 전자 서명은 어떠한 사람이 그 문서를 작성했는지 증명하는 법이므로 전자 서명을 하기 위해선 어떤 문서에 자신의 개인키로 암호화해서 첨부하는 것이다.
알고리즘 암호/복호 디지털 서명 키 교환 RSA 가능 가능 가능 EL Gamal 가능 가능 가능 Diffie-Hellman 불가 불가 가능 EC(타원곡선) 가능 가능 가능
활용
공개키 암호 방식은 다수의 최신 컴퓨터 시스템에서 민감한 정보에 대한 보안을 제공하기 위해 사용된다. 예를 들어, 공개키 암호 방식 기술을 통해 이메일 내용을 기밀로 유지할 수 있다. 웹 사이트에 대한 보안 연결을 가능하게 하는 SSL 프로토콜도 비대칭 암호화 기능을 사용한다. 공개키 암호 방식 시스템은 유권자들이 가정용 컴퓨터를 통해 선거에 참여할 수 있도록 하는 안전한 전자식 투표 환경을 제공할 수 있도록 개발 되었다. 공개키 암호 방식은 또한 블록체인 및 암호화폐 기술에서도 사용한다. 새로운 암호화폐 지갑이 설정될 때, 한 쌍의 키(공개 키, 개인 키)가 생성된다. 공개 주소는 공용 키를 통해 생성되며 다른 사람들과 안전하게 공유된다. 반면, 개인키는 디지털 서명을 생성하고 트랜잭션을 검증하기 때문에, 안전하게 보장되어야 한다. 디지털 서명에 포함된 서명을 확인하여 트랜잭션이 검증된 다음에는, 블록체인 원장에 트랜잭션이 추가될 수 있다. 이런 디지털 서명 확인 시스템은 해당 암호화폐 지갑과 상응하는 개인키를 가진 사람만이 자금을 사용할 수 있다. 암호화폐 응용 프로그램에 사용되는 비대칭 암호들은 컴퓨터 보안을 목적으로 하는 암호화 다르다. 비트코인과 이더리움은 트랜잭션을 검증하기 위해 ECDSA(Elliptic Curve Digital Signature Algorithm)라 알려진 특별한 암호를 사용한다. 컴퓨터 보안부터 암호화폐 트랜잭션을 검증하기까지 공용키 암호 방식은 현재 디지털 시스템 보안에 중요한 역할을 하고 있다. 연동된 공개 키와 개인키를 통해, 비대칭 암호 방식 알고리즘은 대칭 암호에서 발생하는 근본적인 보안 문제를 해결한다. 공개키 암호 방식이 수년간 사용되어 오긴 했지만, 특별히 블록체인과 암호화폐 공간에서 새로운 용도와 응용 프로그램들이 정기적으로 개발되고있다. [5]
한계점
공개키 암호 방식은 컴퓨터 보안을 강화하고 메시지의 무결성을 확인하는 데 사용하지만, 몇 가지 한계점도 있다. 암호화 및 해독과 관련된 복잡한 수학적 계산 때문에, 대량의 데이터를 처리해야 할 경우 매우 느려진다. 또한, 이러한 유형의 암호 방식은 개인 키가 안전하게 보호된다는 가정을 전제로 한다. 개인키가 실수로 공유되거나 노출될 경우, 이와 상응하는 공개 키를 통해 암호화된 모든 메시지의 보안이 위협받게 된다. 또한, 사용자가 실수로 개인키를 잃어버릴 수도 있으며, 이 경우에는 암호화된 데이터에 접근할 수 없게 된다.[5]
각주
- ↑ 1.0 1.1 불곰, 〈암호(대팅키 암호, 공개키 암호)〉, 《티스토리》, 2017-03-14
- ↑ 2.0 2.1 〈공개키 암호화〉, 《깃북스》
- ↑ 3.0 3.1 3.2 3.3 스캇SCOTT, 〈공개키 암호 시스템〉, 《네이버 블로그》, 2016-09-14
- ↑ develper, 〈암호 - 대칭/비대칭 암호화 방식〉, 《티스토리》, 2018-11-25
- ↑ 5.0 5.1 5.2 〈공개 키 암호 방식이란 무엇인가요?〉, 《BINANCE ACADEMY》, 2019-010-31
참고자료
- 불곰, 〈암호(대팅키 암호, 공개키 암호)〉, 《티스토리》, 2017-03-14
- 〈공개키 암호화〉, 《깃북스》
- 〈공개 키 암호 방식이란 무엇인가요?〉, 《BINANCE ACADEMY》, 2019-010-31
- 스캇SCOTT, 〈공개키 암호 시스템〉, 《네이버 블로그》, 2016-09-14
- develper, 〈암호 - 대칭/비대칭 암호화 방식〉, 《티스토리》, 2018-11-25
같이 보기
이 공개키 암호 알고리즘 문서는 암호 알고리즘에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.