11. 디지털 암호학
네트워크/HTTP 완벽 가이드

11. 디지털 암호학

디지털 암호학

보안 HTTP를 공부하기 앞서 디지털 암호학의 기본 개념을 짚고 넘어갑시다.

1. 암호

메시지를 아무나 읽지 못하게 인코딩 / 디코딩하는 특정한 알고리즘입니다.

보통 인코딩하기 전을 평문, 인코딩 후를 암호문이라고 합니다.

그림1 암호

 

2. 키

암호의 동작을 변경하는 숫자로 된 매개변수입니다. 이를 통해 만약 암호문과 알고리즘이 파악되더라도, 함부로 해독을 못하게 막을 수 있습니다.

예를 들어 평문의 각 알파벳을 N번째 뒤에 있는 알파벳으로 변경하는 Rotate(N) 암호를 가진다고 해봅시다.

그림2 키를 이용한 암호

 

만약 Rotate(3)으로 암호를 하고, 악의적인 사용자가 이 암호문을 reverseRotate(1)로 디코딩을 시도를 한다면

값은 'Apple'과는 다른 'Crrni'라는 잘못된 평문이 출력될 것입니다.

 

암호의 핵심은 알고리즘보다는, 얼마나 긴 키를 쓰느냐입니다.(길이가 늘어날수록 키의 경우의 수가 늘어남.)

지금은 디지털 성능이 점점 좋아져 매우 복잡한 알고리즘과 키 설정이 가능해졌습니다. (경우의 수가 수조 개나 됩니다!)

 

 

3. 대칭키 암호체계

대칭키 암호체계는 인코딩 & 디코딩에 같은 키를 사용하는 알고리즘입니다. (DES, Triple-DES, RC2, RC4가 있습니다.)

 

대칭키는 인/디코딩을 같은 키를 이용해서 진행하기 때문에, 서버와 클라이언트 모두 같은 키를 가져야 합니다.(이를 공유키라고 합니다.) 만약 비밀키를 가져야 하는 경우, 서버는 약 N^2개의 키를 관리 (N개의 노드가 있는 경우 각 노드는 N개의 키를 가지고, 서버는 N*N개의 키를 가져야 함.) 해야 합니다. 이는 서버에 큰 부하를 일으킵니다.

 

4. 비대칭키 암호체계

비대칭키 암호체계는 인코딩 & 디코딩에 다른 키를 사용하는 알고리즘입니다.

 

- 공개키 암 호법 (RFC 5280)

하나의 키로 인/디코딩을 수행하는 것이 아닌, 인코딩용, 디코딩용 키를 따로 사용합니다.(비대칭키)

그중 인코딩용 키는 모두에게 공개가 되기 때문에 공개키 암 호법이라고 합니다. 단, 개인키는 호스트만 알고 있기 때문에, 호스트를 제외하고는 아무도 디코딩을 할 수 없습니다.

 

공개키 암호방식은 총 2가지로 구분됩니다.

 

CASE 1. 공개키로 인코딩 + 개인키로 디코딩

발신자가 제공하는 공개키로 인코딩 후 암호문을 전송하면, 암호문을 받은 수신자가 개인키로 디코딩하는 방식입니다.

그림3 공개키 암호법1

 

공개키는 널리 배포될 수 있기 때문에 많은 사람들이 한 명의 개인키 소유자에게 data를 보낼 수 있습니다. (Data 보안 중점) 이 공개키 암호화 방식으로 인해 호스트는 N개의 키만 알고 있으면 되어 전 세계를 대상으로 서비스가 가능해졌습니다.

 

 

CASE 2. 개인키로 인코딩 + 공개키로 디코딩

개인키의 소유자가 개인키로 암호화 후 공개키와 함께 데이터(암호문)를 전송하는 방식입니다.

그림4 공개키 암호법2

공개키와 data를 전달받은 사람은 공개키를 이용하여 복호화가 가능합니다. 당연히 보안에 취약하다고 느낄 것입니다. 그럼에도 불구하고 이 방법을 사용하는 이유는 data 보호의 목적보다는 공개키 data 제공자의 신원을 보장해주기 위함입니다. 암호화된 data가 공개키로 복호화된다는 말은 공개키와 쌍을 이루는 개인키에 의해서 암호화되었다는 것을 의미하기 때문에, data 제공자의 신원 확인이 보장된다고 말할 수 있습니다.


이 방법이 후에 설명할 공인인증체계의 기본 바탕이 되는 디지털 서명의 기본 골자입니다. (인증 보안 중점)

 

- 개인키 보안 RSA

공개키를 사용한 비대칭 암호의 목표는 해커가 다른 요소들을 알고 있다 하더라도, 개인키를 계산할 수 없게 하는 것입니다.  (공개키, 메시지와 그에 대한 암호문)

이를 위해 가장 애용되는 알고리즘이 'RSA 알고리즘'입니다. 보안이 매우 강력합니다.

 

 

- 혼성 암호 체계

비대칭 암호체계는 앞서 서버가 가져야 하는 키의 개수도 적어 전 세계적으로 서비스가 가능하고, 또 보안도 훌륭해 유용하게 쓰입니다. 하지만, 알고리즘 계산 속도가 느린 단점이 있습니다. 그래서 개발자들은 대칭과 비대칭을 섞은 혼성 암호 체계를 사용합니다. 혼성 암호 체계는 안전한 커넥션을 맺을 때에는 공개키 암호방식을 사용하고, 맺은 후에는 안전한 채널에서 트랜잭션을 수행하기 때문에 빠른 대칭키를 사용합니다.

그림5 혼성 암호체계

 

5. 디지털 서명

메시지가 위조 또는 변조되지 않았음을 입증하는 체크섬입니다.

1) 체크섬 역할

서명은 메시지의 저자를 알려줍니다. 이 저자만이 개인 키를 갖고 있기 때문에, 개인키를 토대로 만든 공개 키로 복호화가 제대로 이루어진다면, 이 저자가 보낸 메시지라는 것을 특정할 수 있습니다.

(받은 공개키로 복호화가 안된다면, 보낸 호스트와 데이터의 실제 저자는 다르다.)

그림 6 체크섬 역할을 하는 디지털 서명

1. 어느 정도의 보안을 위해 먼저 메시지 요약을 한 뒤, 개인키를 통해 인코딩을 합니다.

2. 그 후 평문과 함께 암호문을 전송한 다음, 암호문을 디코딩 + 역 메시지 요약한 내용이 평문과 같다면 체크섬을 통과한 것입니다.

 

 

또한 메시지를 수정하면, 저자가 달라지기 때문에, 메시지 변조 역시 사전에 막을 수 있습니다. (올바른 체크섬 위조 X)

그림 7 복호화가 실패하는 경우에는, 메시지 변조가 되었다는 것을 알 수 있다. (체크섬 통과 X)

 

 

6. 디지털 인증서

신뢰할만한 조직에게 서명되고, 검증된 신원 확인 정보를 말합니다. 조직이나, 개인의 정보를 담고 있습니다.

딱 이렇게 입력해야 한다는 표준화된 양식은 없으나, 보편적으로 <X.509 인증서> 양식을 많이 따릅니다.

구성요소 설명
대상의 이름  인증 대상의 이름 정보입니다.
유효기간 인증서의 유효기간입니다. (데이터 신선도를 떠올립시다.)
인증서 발급자 (인증서 보증인) 인증서를 보증해주는 기관입니다. (여권이면 대한민국 정부가 보증기관)
인증서 발급자의 디지털 서명 인증서 발급자의 디지털 서명입니다.
서명 알고리즘 선택적으로 입력되어 있습니다.
대상 공개키 인증 대상의 공개키 정보입니다. 이미 제공하고 있기때문에 선택적으로 입력됩니다.

위 4개 요소는 필수적으로 입력되어 있어야 합니다!

 

'네트워크 > HTTP 완벽 가이드' 카테고리의 다른 글

13. 엔티티와 인코딩 - 엔티티 편  (0) 2021.08.26
12. 보안 HTTP  (0) 2021.08.25
09. 기본 인증  (0) 2021.08.15
08. 쿠키  (0) 2021.08.15
07. 게이트웨이&터널&릴레이  (0) 2021.08.12