공개 열쇠 암호

From The Hidden Wiki
(Redirected from 공개 키 암호 방식)
Jump to navigationJump to search

개요

공개 열쇠 암호 방식(公開 - 暗號 方式)은 암호 방식의 한 종류로 사전에 비밀 키를 나눠가지지 않은 사용자들이 안전하게 통신할 수 있도록 한다. 공개 키 암호 방식에서는 공개 키(public key)와 비밀 키(개인 키, private key)가 존재하며, 공개 키는 누구나 알 수 있지만 그에 대응하는 비밀 키는 키의 소유자만이 알 수 있어야 한다. 공개 키 암호를 구성하는 알고리즘은 대칭 키 암호 방식과 비교하여 비대칭 암호(非對稱暗號)라고 부르기도 한다.

공개 키 암호 방식은 크게 두 가지 종류로 나눌 수 있다.

  • 공개 키 암호 — 특정한 비밀 키를 가지고 있는 사용자만 내용을 열어볼 수 있음.
  • 공개 키 서명 — 특정한 비밀 키로 만들었다는 것을 누구나 확인할 수 있음.

공개 키 암호 방식은 열쇠로 잠겨 있고 좁은 투입구가 있는 편지함에 비유할 수 있다. 이런 편지함은 위치(공개 키)만 알면 투입구를 통해 누구나 편지를 넣을 수 있지만 열쇠(개인 키)를 가진 사람만이 편지함을 열어 내용을 확인할 수 있다.

공개 키 서명은 인장으로 편지봉투를 봉하는 것에 비유할 수 있다. 이렇게 봉한 편지는 누구나 열어볼 수 있지만 인장을 통해 인장의 주인이 편지를 보냈음을 증명할 수 있다.

일반적으로, 공개 키 암호 방식은 비밀 키 암호보다 계산이 복잡한 단점이 있기 때문에, 효율을 위해 비밀 키 암호(혹은 대칭 암호)와 함께 사용된다. 메시지를 임의로 만들어진 비밀 키를 이용해 암호화한 다음 이 비밀 키를 다시 수신자의 공개 키로 암호화하여 메시지와 함께 전송하는 것이다. 이렇게 하면 공개 키 암호 기술로는 짧은 비밀 키만을 암호화하고 보다 효율적인 비밀 키 암호 기술로 전체 메시지를 암호화하므로 양쪽의 장점을 취할 수 있다.

원리

공개 키 암호 방식은 출제자만이 알고 있는 특정한 종류의 정보(비밀 키) 없이는 매우 풀기 어려운 수학적 문제(공개 키)를 바탕으로 만들어진다. 키를 만드는 사람은 이 문제(공개 키)를 일반에 공개하고 특정한 정보(비밀 키)는 자신만이 알수 있도록 숨긴다. 그러면 어떤 사람이건 이 문제를 이용해 메시지를 암호화하면 키를 만든 사람만이 이 문제를 풀어 원래 메시지를 해독할 수 있다.

RSA 암호와 같은 초기 암호들은 두 개의 큰 소수를 곱한 숫자를 문제로 사용하였다. 사용자는 임의의 큰 소수를 두 개 골라 비밀 키로 삼고 그 곱한 값을 공개 키로 공개한다. 큰 수의 소인수분해는 대단히 풀기 어려운 문제에 속하기 때문에 다른 사람들은 비밀 키를 알 수 없을 것이라는 사실이 보장된다. 그러나 최근 이 분야의 연구가 크게 진전되어 RSA의 안전성을 보장하기 위해서는 수천비트 이상의 큰 소수를 키로 사용해야 한다.

또 다른 종류의 문제로는 ac가 알려진 상태에서 방정식 ab = c의 해 b를 구하는 문제가 있다. 실수복소수에 대해서는 로그 함수를 이용해 이 문제를 쉽게 풀 수 있다. 그러나 유한군에서는 이런 문제를 풀기가 어려운 것으로 알려져 있으며 이런 문제를 이산 로그 문제라 부른다. 타원곡선암호를 비롯한 여러 가지 공개 키 암호들이 이산 로그 문제를 바탕으로 만들어져 있다.


공개 열쇠 암호대칭 열쇠 암호

빝코인(Bitcoin)은 오스트레일리아 사람인 크레이그 라이트(Craig Wright)가 2008년에 개발한 세계 최초의 분산 암호화폐(Cryptocurrency)이다. 분산인 이유는 거래 내역인 블락체인(blockchain)을 피투피(P2P)로 빝코인 코어(Bitcoin Core) 등의 빝코인 소프트웨어를 설치한 사람들이 공유해서 가지고 있기 때문이고, 암호화폐인 이유는 본질적으로 한 쌍의 공개 열쇠개인 열쇠로 이루어진 공개 열쇠 암호 방식인 지피지4유에스비와 동일하기 때문이다. gpg4usb공개 열쇠(public key)가 빝코인 주소(Bitcoin address)이고, 개인 열쇠(private key)는 빝코인에서도 private key이다. 빝코인에서 송금을 한다는 것의 의미는 지피지4유에스비에서 자신의 메시지를 자신의 개인 열쇠로 전자 서명해서 자신이 작성한 메시지임을 증명하는 것과 동일하게 자신의 송금 내역을 자신의 개인 키서명하는 것이다. 빝코인이 지피지4유에스비와 유일하게 다른 점은 이렇게 싸인(sign)한 결제 내역을 피투피로 공유되는 블락체인에 추가한다는 점만 다르다.


지피지4유에스비와 동일하게 빝코인개인 열쇠(private key)만 보관하고 있으면 블락체인으로부터 자신의 지갑을 찾아내서 사용할 수 있다. 개인 열쇠는 빝코인 주소(Bitcoin address)나 공개 열쇠처럼 일련의 숫자와 알파벳으로 이루어진 문자열이다. 한 쌍의 개인 열쇠와 공개 열쇠(빝코인 주소)는 서로 짝이 되기 때문에 일렉트럼(Electrum) 등의 소프트웨어 사용자는 개인 키만 잘 보관해놨다가 나중에 다른 컴퓨터에서 지갑을 불러올 때 개인 키만 입력해주면 빝코인 주소를 몰라도 자신의 빝코인 주소를 찾아내서 개인 키로 전자서명하여 결제가 가능한 것이다. 빝코인 주소개인 키를 텍스트 파일로 저장하고 트루크맆트로 암호화하여 USB 메모리SD 카드 세 개 정도에 보관해놓으면 안전하다. 인터넷이 연결된 컴퓨터나 온라인 빝코인 지갑(Bitcoin wallet) 서비스에 보관할 경우 토어 월릿(Tor Wallet)의 경우처럼 해킹의 위험이 매우 높다.


이런 공개 열쇠 암호(비대칭 열쇠 암호)와 대조적인 게 대칭 열쇠 암호(비밀 열쇠 암호)인데 암호화복호화(암호 풀기)에 오직 하나의 비밀 열쇠만 쓰는 트루크맆트(TrueCrypt)가 가장 대표적이다. 비밀 열쇠 암호 방식은 통신에서는 쓸 수 없는데 비밀 열쇠를 해커에게 뺏기지 않고 상대방에게 안전하게 건네 줄 방법이 없기 때문이다. 이와는 대조적으로 공개 열쇠를 모두에게 공개하고, 이와 짝이 되는 개인 열쇠로만 복호화를 할 수 있는 공개 열쇠 암호 방식은 통신에 널리 쓰인다. 예를 들어 지피지4유에스비, 공인인증서, 전송 계층 보안(https), 카카오톡이나 텔레그램의 비밀 대화, 토어(Tor), 트리블러(Tribler) 등이 있다. 하나의 메시지를 여러개의 공개 키로 암호화하여 여러 사람이 열람할 수 있게 하거나, 여러개의 개인 키사인(sign)하여 여러 사람이 동의하였다는 표시로 사용할 수도 있다.


공개키 암호화 & 대칭키 암호화

공개 키 암호화는 공개 키와 개인 키 한 쌍의 키를 가지고 하는 암호화를 말합니다. 공개 키를 공개해놓고 다른 사람이 그 공개 키로 암호화를 해서 나한테 보내면 나는 그걸 나의 개인 키로 풀 수 있고, 내가 나의 개인 키로 암호화해서 보내면 다른 사람은 그걸 내 공개 키로 풀 수 있습니다. 또한 서명 용도로도 쓸 수 있는데 짝이 되는 공개 키와 개인 키 중 하나로 암호화하면 반드시 다른 하나가 있어야 풀 수 있기 때문에 자기 키로 암호화하면 내가 그걸 암호화했다는 서명으로 쓸 수 있는 것입니다. 공인인증서의 서명이나 부인 방지, 그리고 전송 계층 보안(TLS, https) 암호화 등에 쓰이는 게 공개 키 암호 방식입니다.


반면에 대칭 키 암호 방식이 있는데 이건 하나의 키로 암호화와 복호화(암호화된 것을 푸는 것)에 같이 쓰는 것입니다. 대표적인 게 트루크립트 등에서 사용하는 고급 암호화 표준(AES)이나 웹사이트에서 회원 비밀번호를 암호화해서 저장할 때 사용하는 데이터 암호화 표준(DES)이나 안전한 해시 알고리듬(SHA)이 있습니다. 이건 암호화에 쓰는 키가 짧기 때문에 공개 키 암호화 방식보다 빠르다는 장점이 있습니다. 하지만 키를 전달해 주다 중간에 해커에게 뺏길 가능성이 있기 때문에 다른 사람과 무언가를 주고 받을 때는 공개 키 암호화 방식을 씁니다.


위의 두 가지 방식을 섞어서 쓰는 방법도 많이 사용하는데 예를 들자면 대용량 자료를 트루크립트에서 AES로 암호화하고, 암호화에 사용한 키 파일은 상대방의 공개 키로 암호화해서 주는 것입니다. 그럼 안전하게 대용량의 자료를 건네줄 수 있습니다.


https://blog.naver.com/kookh1/120186150477

공개키 암호화

공개키 암호화는 대칭키 암호화가 가지는 키 배송문제를 해결 해 주지만 공개키 인증문제와 처리속도 문제가 있습니다.

다음 그림은 송신자(앨리스)와 수신자(밥)이 공개키 암호화를 이용해서 메시지를 전달하는 과정입니다.

1. 수신자(밥)는 공개 키/개인 키로 이루어진 한 쌍의 키를 만듭니다. 개인 키는 다른 사람에게 노출되면 안됩니다.

2. 수신자(밥)은 공개 키를 송신자(앨리스)에게 보냅니다. 공개키는 도청자가 봐도 괜찮습니다. 공개 키를 송신자(앨리스)에게 보내는 이유는 "이 공개 키를 사용해서 메시지를 암호화해서 다시 보내라"는 의미를 담고 있습니다.

3. 송신자(앨리스)는 수신자(밥)의 공개 키를 사용해서 메시지(P)를 암호화 합니다. 암호화 된 메시지는 밥의 개인 키로만 복호화할 수 있습니다. 앨리스는 밥의 공개 키를 가지고 있지만, 밥의 공개 키를 사용해도 암호문을 복호화 할 수 없습니다.

4. 앨리스는 암호문(C)을 밥에게 보냅니다.

이 암호문은 도청자가 봐도 괜찮습니다. 도청자는 밥의 공개 키는 해킹 할 수 있지만, 밥의 공개 키로 복호화 할 수는 없습니다.

5. 밥은 자신의 개인 키를 사용해서 암호문(C)을 복호화(P)합니다.

공개 키 암호화 vs 대칭 키 암호화

1. 공개키 암호화는 암호화키와 복호화키가 다르며, 대칭키 암호화는 암호화키와 복호화키가 같습니다.

2. 공개키 암호는 큰 수의 소인수 분해처럼 수학적으로 해결어려운 것으로 암호문을 만들고 대칭키 암호는 평문을 복잡한 형태로 변환해서 암호문을 만듭니다.

3. 공개키 암호화의 장점은 키 배송문제가 없고 단점은 처리속도입니다.

4. 대칭키 암호화의 장점은 처리속도이고 단점은 키 배송문제가 있습니다.

5. 공개키 암호화의 예로는 RSA가 대칭키 암호화의 예로는 DES, AES가 있습니다.

대칭키 암호 문제점과 해결책

1. 키 유출 문제 : 송신자와 수신자가 키 교환시 키 값을 해커에의해 빼앗길 수 있다.

-> 해결책 : 신뢰할 수 있는 키 배포센터를 두어서 송신자와 수신자에게 각각 키를 제공한다.

2. 키 관리 문제 : 키를 이용하여 통신하는 사용자가 많아질 수록 키 관리가 어려워짐

-> 해결책 : 공개키 암호화 방식을 사용한다.

3. 전사공격에 취약함

-> 해결책 : AES 대칭키 방식을 사용한다.


공개키 암호 문제점과 해결책

1. 중간자 공격(man-in-the-middle attack) : 입수한 공개키가 해커가 전달한 공개키 일 수도 있다.

-> 해결책 : 공개 키의 인증

2. 처리속도 : 대칭암호에 비해 처리속도가 몇 백배 느리다.

-> 해결책 : 하이브리드 암호 시스템(데이터 암호화는 대칭 키 암호로 하고, 데이터 암호화에 사용하는 키 파일만 공개 키 암호 방식으로 암호화)

역사

Template:출처 필요 문단

암호화 역사 초기에는 안전하기는 하지만 암호화되지는 않은 키를 사용했다. 예를 들어서, 암호를 사용할 사람들이 미리 모여서 암호 키를 나누어가진다든지, 신뢰할 수 있는 전령을 시켜서 보내는 방식등이었다. 이 키는 양쪽에서 완벽하게 보안을 유지하고 교환되는 메시지를 암호화하는데 사용되었지만, 이러한 키 분배 방식에는 실용적으로 많은 어려운 문제가 따랐다. 공개 키 암호 방식은 이러한 문제를 해결하고, 사용자들이 사전에 미리 공유 키를 교환하지 않더라도 공개 채널 상에서 안전하게 통신할 수 있도록 해준다.

1874년 윌리엄 스탠리 제본스는 자신의 책에서 단방향 함수와 암호화의 관계에 대해 설명하고 이어 RSA 시스템 내 트랩도어 함수 생성에 사용된 인수 분해 문제를 거론했다.

1997년, 비대칭 키 알고리즘이 영국Government Communications Headquarters (GCHQ)에서 제임스 일리스, 클리포드 콕스, 그리고 말콤 윌리암슨에 의해 1973년에 개발된 것이라는 발표가 있었다. 이들은 디피-헬만 키 교환 방식과 RSA의 특별한 경우를 독립적으로 개발하였다. GCHQ의 암호학자들은 자신의 기법을 "비-보안 암호화"로 불렀으며 2010년에 IEEE 마일스톤에 등록되었다.

1976년에 휘트필드 디피마틴 헬만랄프 머클의 공개 키 분배에 대한 연구를 참고하여 새로운 비대칭 키 암호체계를 발표했는데, 이 키 교환 방식이 디피-헬만 키 교환방식이다. 이 방식은 인증된 (그러나 공개된) 통신 채널 상에서 미리 키를 공유하지 않으면서도 공유 보안 키를 설정할 수 있는 최초의 실용적인 방법이었다. 머클의 공개 키 교환 기법은 머클의 퍼즐이라 부르는데 1974년에 고안되어 1978년에 발표되었다.

로널드 라이베스트, 아디 샤미르, 레너드 에이들먼 세 명은 MIT에서 콕스가 제안했던 것과 거의 같은 암호방식을 재발견하고 이것을 1978년에 논문으로 썼다. 이들은 자신들의 머리글자를 따서 이 암호방식을 RSA라고 이름 지었다. RSA는 두 개의 큰 소수를 곱한 값 n을 이용하여 모듈로 지수승 연산한 것을 각각 암호화와 복호화에 이용하여 공개 키 암호와 공개 키 서명을 수행하는 방식이며, 이 방식을 사용할 경우 보안 수준은 큰 정수의 인수 분해처럼 극도로 어려워 일반적인 기법 중에는 알려진 효과적인 (실용적으로 빠른) 방법이 없다고 가정했다. 1979년, 미하엘 라빈이 공개 키의 인수 분해가 어려울 경우 보안이 검증된 라빈 암호체계를 발표했는데 RSA의 보안 수준도 동등한 것으로 간주되고 있다.

1970년대 이후로 공개 키 암호 분야에서 암호, 서명, 키 합의, 및 다른 기법과 관련된 수많은 기술이 개발되었다. 타헤르 엘가말이 고안한 ElGamal 암호체계이산로그문제의 어려움에 기반하고 있으며, National Security Agency (NSA)가 개발하고 NIST가 발표한 DSA도 이와 비슷한 개념을 적용했다. 1980년대 중반에는 닐 코블리츠빅터 밀러가 각자 독자적으로 타원곡선암호를 제안했는데, 이는 이산 알고리즘 문제에 기반한 새로운 공개 키 알고리즘을 구축하였다. 타원곡선이 수학적으로는 더 복잡하지만 동등한 수준의 보안을 위해 더 작은 키를 사용하면서도 연산 속도는 빠르다는 장점이 있다.


같이보기

외부 링크

  • 스스로 이메일 보호하기

만약 중요한 내용이 있어 그것을 숨겨야 한다면, GnuPG를 사용하는 것이 현명한 선택입니다; 이 툴은 에드워드 스노우든이 그의 유명한 비밀을 NSA로부터 숨기는 데 사용한 도구입니다.

https://emailselfdefense.fsf.org/ko/windows.html

  • OpenPGP를 이용하여 메일에 디지털 서명 및 암호화하기(텍스트뿐만 아니라 파일도 암호화 가능) https://nosyu.pe.kr/2495

Template:공개 키 암호 방식

Template:Link FA