[ NETWORKS ] SSL

UI SEOK YU·2023년 2월 1일
0

Networks

목록 보기
2/2
post-thumbnail

TCP 에 이어서...
📺 SSL,TLS,HTTPS 발표 : https://www.youtube.com/watch?v=8rSdXqstN9g


1. SSL 이란

1-1. 위치

  • SSL은 Application 계층에 있는 프로세스와, Transport 계층을 이어주는 프로토콜 계층이다.
  • SSL 소켓을 통해 각 계층간의 인터페이스를 구성한다.

1-2. 역할

안전한 통신 을 위해서는 다음과 같은 3가지 조건을 충족시켜야 한다.

  • 기밀성 : 송신자와 지정된 수신자만이 전소오디는 메세지 내용을 이해할 수 있다.
  • 무결성 : 전송 도중에 메세지가 변경되지 않는다.
  • 종단점 인증 : 통신하고 있는 상대방의 신원을 확인 할 수 있다.

TCP 만으로는 위의 3가지를 충족시킬 수 없기 때문에,
SSL 을 통하여 TCP가 안전한 통신 을 가능하게 한다.


2. 안전한 통신

안전한 통신을 위해서는 3가지 조건이 충족되어야 한다고 했다.
각 조건을 충족시키기 위한 방법들을 먼저 알아보고, SSL에 어떻게 활용되는지 보자.

2-1. 기밀성

  • 어떤 내용을 서로만 알기 위해서는 암호화가 이루어져야 한다.
  • 암호화 키는 대칭키, 비대칭키 두 가지 종류가 있다.

2-1-1. 대칭키

  • 대칭키는 서로 암호화하고 푸는 키가 대칭이라서 대칭 키라고 한다.
  • 그래서 대칭키로 메세지를 주고 받기 위해서는 서로가 같은 키를 들고 있어야 한다.
  • 키를 안전하게 서로 가지고 있으면 상관없지만, 키를 공유하는 과정에서 유출되면 효력이 없다.

2-1-2. 비대칭키

  • 비대칭키는 대칭키와 반대로, 서로다른 두 키가 서로가 암호화 한 것을 풀 수 있다.
  • A키로 암호화 하면 B로만 풀 수 있고, B키로 암호화 하면 A키로만 풀 수 있다.
  • 비대칭키는 하나의 키를 뿌려두고 하나는 본인만 가지고 있는데,
  • 뿌려진 키를 공개키
  • 자신만 가진 키를 개인키라고 한다.

  • 누군가 암호화된 통신을 하고 싶으면, 공개키로 암호화 해서 개인키를 가진 자에게 전달한다.
  • 중간에 메세지가 탈취되어도, 탈취한 사람은 개인키가 없으므로 메세지를 볼 수 없다.
  • 그래서 비대칭키를 활용하여 대칭키를 공유하고,
  • 공유된 대칭키를 통해서 안전하게 암호화 된 통신을 유지한다.



2-2. 무결성

2-2-1. 암호화 해시함수

  • 해시함수는 입력값 m을 받아서 해시라 불리는 고정된 크기의 문자열 H(m)을 출력해 내는 함수다.
  • 암호화 해시함수는 H(x) = H(y)가 되는 서로 다른 메세지 x,y를 찾는 일이 산술적으로 불가능한 해시함수이다.

이런 해시함수를 활용한다면, 메세지가 원래 어떤 상태였는지
사진을 찍어 둔 것처럼 기록해 둘 수 있지 않을까?

  • 메세지 m의 해시인 H(m)을 계산한 h를 전송한다. (m, h)
  • 수신자는 mh을 받고 H(m)을 계산하여 그 값이 h값과 같은지 확인한다.
  • 만일 h == H(m) 이라면, 원래 메세지가 변형되지 않았음을 알 수 있다.

2-2-2. MAC

그런데, 애초에 보낸사람이 신분을 속이고 보낸 상태라면?
메세지 자체는 이상이 없을 수 있지만, 메세지가 잘못된 곳으로부터 온 것이라는 것을 알아야 한다.

  • 해시함수와 공유 중인 비밀키를 이용해서 암호화를 한다.
  • 메세지 m 의 해시인 H(m)을 보내는 것이 아니라,
  • 메세지와 키 값을 더한, m+s의 해시인 H(m+s) 를 보낸다.
  • 만약 누군가가 속여서 보냈다 하더라도, 보낸사람은 비밀키 s를 갖고 있지 않기 때문에
  • 해시값이 다르게 나오게 되고, 메세지 무결성이 입증되지 않음을 알 수 있다.


2-3. 종단점 인증

  • 안전한 통신을 위해서 마지막으로 나와 통신하는 상대가 신원이 명확하고 올바른지를 알아야 한다.

2-3-1. 넌스

  • 넌스는 프로토콜이 평생에 단 한 번만 사용하는 숫자다.
  • 이를 활용하여 통신하는 상대가 실시간으로 요청하는 것이 맞는지, 아니면 재생공격인지 구분할 수 있다.

2-3-2. 인증서

누군가가 내가 접속하고싶은 서버를 사칭하고 있고, 내가 그것을 모른채 메세지를 넘긴다면?
이를 막기 위해 내가 누군지 증명하는 인증서가 필요하다.

  • 이미 공인된 기관에 자신의 공개키와 사이트 정보를 주고 인증서를 받는다.
  • 인증서는 기관의 개인키로 암호화하여 서명한다.
  • 기관의 개인키로 서명하는 이유는, 누군가 그 인증서의 진위성을 판별할 때, 해당 기관의 공개키로 풀려서 제대로 된 정보가 나오면 그것은 기관이 암호화 한 것임을 알 수 있으므로, 서명한 것 과 같다고 볼 수 있다.

3. SSL 의 연결

SSL은 TCP와 유사하게 연결 동작을 하지만, 보안성을 위해 주고 받는 내용이 다르다.

3-1. SSL HandShake

  • 클라이언트가 서버에게 넌스, 자신이 지원하는 암호화 알고리즘 목록을 보낸다.
  • 서버는 클라이언트가 준 암호화 알고리즘 목록으로부터 대칭키, 비대칭키, MAC 알고리즘을 선택하고, 인증서서버 넌스를 클라이언트에게 돌려준다.
  • 클라이언트는 인증서를 확인하고, 서버의 공개키로 PMS를 생성하여 넘긴다.
  • 클라이언트, 서버는 각자 넌스PMS를 가지고 SSL표준에 지정된 키 유도함수
    를 통해 MS를 계산한다.
    MS 키각자의 암호화키각자의 MAC키로 분할된다.
    같은 유도함수를 사용하므로 각자 계산하더라도 서로 키 값은 동일하다.
  • 그 후 계산된 키를 가지고 처음의 3-way-handshake를 검증한다.
    검증 시, 3-way-handshake 과정에서 서로 주고받은 정보를 암호화 해서 다시 넘기게 되며, 만일 처음 받았던 내용과 다를경우, 보안성이 보장되지 않으므로 연결을 종료할 수 있다.

3-2. SSL 레코드

  • 데이터클라이언트의 MAC키, 데이터의 순서번호를 합하여 해시를 만든다. (= MAC 생성)
  • 데이터생성된 MAC 을 합하여 클라이언트의 암호화키로 암호화를 한다.
  • 생성된 암호화 데이터타입,버전,길이를 붙여 전송한다.
  • 를 가진사람만이 암호화 데이터복호화 할 수 있고,
  • 복호화한 데이터가 맞는 지 해시함수에 넣어서 MAC의 일치를 확인해 볼 수 있다.
  • 또한 순서변경 공격이 들어오더라도, 순서번호가 더해진 상태로 MAC을 만들었기 때문에 순서의 보장이 가능하다.

3-3. SSL 연결종료

  • SSL 세션에 대한 연결을 종료하기 위해서는 단순히 TCP의 연결을 종료하면서 마무리 할 수 있다.
  • TCP FIN 으로만 연결을 해지할 경우, 절단공격에 취약하므로,
  • SSL 레코드의 타입슬롯에 연결종료를 명시한다.
  • 타입슬롯은 암호화가 되어있지 않더라도, MAC을 통하여 올바른 수신메세지 인지 검증이 가능하다.

4. TLS와 HTTPS

4-1. SSL과 TLS

  • SSL은 Netscape사의 향상된 TCP 버전 이다.
  • TLS는 이 SSL를 표준화 버전이다.

4-2. SSL과 HTTPS

  • 위에서 알아본 SSL을 사용하는 HTTP 버전을 HTTPS 라고한다.

0개의 댓글