SSL, HTTPS, 개인키, 공개키, 암호화에 대해

by 파시스트 posted Dec 30, 2017
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
*SSL, 인증서란?

SSL(Secure Socket Layer) 프로토콜은 처음에 Netscape사에서 웹서버브라우저 사이의 보안을 위해 만들었다. SSL은 Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. 아래는 SSL이 어떻게 작동하는지에 대한 간단한 과정을 설명한 것이다.
[웹브라우저] SSL로 암호화된 페이지를 요청하게 된다. (일반적으로 https://가 사용된다)

[웹서버] Public Key를 인증서와 함께 전송한다.

[웹브라우저] 인증서가 자신이 신용있다고 판단한 CA(일반적으로 trusted root CA라고 불림)로부터 서명된 것인지 확인한다. (역주:Internet Explorer나 Netscape와 같은 웹브라우저에는 이미 Verisign, Thawte와 같은 널리 알려진 root CA의 인증서가 설치되어 있다) 또한 날짜가 유효한지, 그리고 인증서가 접속하려는 사이트와 관련되어 있는지 확인한다.

[웹브라우저] Public Key를 사용해서 랜덤 대칭 암호화키(Random symmetric encryption key)를 비릇한 URL, http 데이터들을 암호화해서 전송한다.

[웹서버] Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화한다.

[웹서버] 요청받은 URL에 대한 응답을 웹브라우저로부터 받은 랜덤 대칭 암호화키를 이용하여 암호화해서 브라우저로 전송한다.

[웹브라우저] 대칭 키를 이용해서 http 데이터와 html문서를 복호화하고, 화면에 정보를 뿌려준다.

* 개인키/공개키(Private Key/Public Key):

Private key/Public Key를 이용한 암호화는 하나의 키로 암호화하고 나머지 다른 하나로 복호화할 수 있도록 되어있다.  앞에서 암호화한 키로만 암호화를 할 수 있는 것이 아니라 반대 방향으로 복호화한 키로도 암호화할 수도 있다.
(당연히 앞에서 암호화한 키가 이번엔 복호화하는 키가 되는 것이다) 이러한 키쌍은 소수(prime number)로부터 생성되며, 그 길이(Bit 단위)는 암호화의 강도를 나타낸다.

Private Key/Public Key는 이러한 키쌍을 관리하는 방법이다. 
한개의 키는 안전한 장소에 자기만 알 수 있도록 보관하고(Private Key) 다른 하나는 모든 사람에게 퍼뜨리는 것(Public Key)이다. 
그렇게 하면 그 사람들이 당신에게 메일을 보낼 때 암호화해서 보낼 수 있으며, 당신만이 그 암호를 풀 수 있다. 반대로 다른 사람에게 메일을 보낼 일이 있으면 Private Key를 이용해 암호화 할 수 있다. 
그러면 그 사람들은 복호화해서 볼 수 있다. 
그러나 이 방법은 모든 사람이 Public Key를 가지고 있어야 하기 때문에 그리 안전한 방법이 아니다. 

* 인증서(Certificate):

당신과 접속해있는 사람이나 웹 사이트가 믿을 수 있는지 어떻게 판단할 수 있을까? 
한 웹사이트 관리자가 있다고 가정하자. 그 사람이 당신에게 이 사이트가 믿을만하다고 (심각할 정도로) 열심히 설명했다. 
당신이 그 사이트의 인증서를 설치해 주기를 바라면서 말이다. 
한두번도 아니고 매번 이렇게 해야한다면 귀찮지 않겠는가?

인증서는 여러 부분으로 이루어져있다. 아래는 인증서 속에 들어있는 정보의 종류를 나타낸 것이다.
인증서 소유자의 e-mail 주소
소유자의 이름
인증서의 용도
인증서 유효기간
발행 장소

Distinguished Name (DN)
- Common Name (CN)
- 인증서 정보에 대해 서명한 사람의 디지털 ID
Public Key
해쉬(Hash)

SSL의 기본 구조는 당신이 인증서를 서명한 사람을 신뢰한다면, 서명된 인증서도 신뢰할 수 있다는 것이다. 
이것은 마치 트리(Tree)와 같은 구조를 이루면서 인증서끼리 서명하게 된다. 
그러면 최상위 인증서는? 
이 인증서를 발행한 기관을 Root Certification Authority(줄여서 Root CA)라고 부르며, 유명한 인증 기관의 Root CA 인증서는 웹브라우저에 기본적으로 설치되어 있다.
이러한 인증 기관은 자신들이 서명한 인증서들을 관리할 뿐만 아니라 철회 인증서(Revoked Certificate)들도 관리하고 있다. 
그러면 Root CA의 인증서는 누가 서명을 했을까? 모든 Root CA 인증서는 자체 서명(Self Signed)되어 있다.

* 대칭키(The Symmetric key):

2.png


  

Private Key/Public Key 알고리즘은 정말 대단한 알고리즘이지만, 비실용적이라는 단점이 있다.
비대칭(Asymmetric)이란 하나의 키로 암호화를 하면 다른 키가 있어야 복호화를 할 수 있는 것을 뜻한다.
즉, 하나의 키로 암호화/복호화를 할 수 없다는 말이다. 
대칭키(Symmetric Key)는 하나의 키로 암호화/복호화를 하게 된다. 
대칭키를 사용하면 비대칭키보다 훨씬 빠르게 암호화/복호화를 할 수 있다. 
그렇지만 속도 때문에 대칭키를 이용한다는 것은 너무 위험하다.

만약 당신의 적이 키를 입수해 버리면 여태까지 암호화된 정보가 모두 무용지물이 되어버리게 된다.
그래서 대칭키 알고리즘을 사용한 키를 상대방에게 전송하려면 인터넷과 같은 통로는 너무나도 위험하기 때문에 직접 손으로 전달해야만 한다. 
귀찮지 않은가? 
해결책은 대칭키비대칭키암호화시켜서 전송하면 된다. 자신의 Private Key만 안전하게 관리하면 Public Key로 암호화되어 안전하게 전송할 수 있다. 또한 대칭키는 매번 랜덤으로 선택되는데, 이렇게되면 만약 대칭키가 누출되어도 다음번에는 다른 키가 사용되기 때문에 안전하다.

* 암호화 알고리즘(Encryption Algorithm):

1.png


 

암호화 알고리즘은 대칭이든 비대칭이든 간에 상당히 많은 종류가 있다.

일반적으로 암호화 알고리즘으로 특허를 낼 수 없다. 
만약 Henri Paincare가 암호화 알고리즘으로 특허를 낸다면 Albert Einstein으로부터 고소당할 수 있는 것이다.
단, USA에서는 암호화 알고리즘으로 특허를 낼 수 있다. 
OpenSSL의 경우에는 암호화 알고리즘으로 특허를 낼 수 없고, 군사법이나 보안법에 저촉되지 않는 국가에서 개발되고 있다.

실제로 알고리즘이 어떻게 사용되는지 살펴보자. 
웹서버와 브라우저는 서로 통신을 하는 동안 서로 어떤 알고리즘을 사용할 수 있는지 확인하게 된다.
다음에 서로 이해할 수 있는 일반적인 알고리즘을 선택한 후 통신이 이루어지게 된다.
OpenSSL은 컴파일해서 삽입할 알고리즘을 택할 수 있다.
그렇게 하면 암호화 알고리즘에 제한을 걸고 있는 국가에서도 사용할 수 있게 된다.
* 해쉬(Hash):

해쉬는 해쉬 함수에 의해 만들어지는 숫자다.
이 함수는 단방향으로 연산되는 함수다.
즉, 한번 해쉬함수로 원본으로부터 해쉬값을 생성했다면, 해쉬값으로부터 원본 메시지를 알아내는 것이 불가능하다. 
해쉬의 용도는 원본 메시지가 손상이 되었는지를 알아내는데 있으며, 해쉬값을 변경시키지 않고 원본을 조작하는 것은 극히 어렵다. 그래서 해쉬 함수는 패스워드 메커니즘을 비릇한 소프트웨어의 손상 유무(MD5 sum)를 가리는데도 이용할 수 있으며, 메시지의 손상을 방지하기 위해 널리 쓰이고 있다.

* 서명(Signing):

서명은 특정 메시지를 내가 작성했다는 것을 인증하는 역할을 한다. Text가 될 수도 있고, 인증서 등등이 될 수 있다. 메시지에 서명하기 위해서는 아래의 순서를 따라야 한다.
1.해쉬 생성
2.Private Key로 해쉬 암호화
3.암호화된 해쉬와 서명된 인증서를 메시지에 추가
4.받는 사람은 따로 해쉬를 생성
5.받은 메시지에 포함된 해쉬를 Public Key를 이용해서 복호화

4, 5번 과정에서 생성된 해쉬를 비교



* 암호문(Pass Phrase):

암호문(Pass Phrase)은 기존의 패스워드(Password)를 확장한 시스템이다.
예전의 Unix 시스템의 암호(Password)는 8자가 한계였다. 암호문이라는 것은 단순히 암호의 한계가 더 길어졌다는 것을 뜻한다. 당연히 8자가 한계인 것보다 보안이 강력하다.
최근의 Unix 시스템은 MD5를 사용하고 있기 때문에 암호의 길이 제한이 없어졌다.



출처: http://soul0.tistory.com/261?category=545297 [돌이의 소소한 이야기★]






Articles

1 2 3 4 5 6 7