HTTPS 작동 방식 알아보기: 대칭키와 비대칭키의 사용법
https 는 뭘까?
https 는 http + Secure 이다! http 보다 훨씬 보안이 강화된 것이다. 원래 http 통신을 할 때는 오고가는 네트워크 packet 에 암호화가 되어있지 않기에 중간에 누군가 packet 을 가로챈다면 내가 보낸 request 를 훤하게 다 들여다 볼 수 있게 된다! 여기에 사이트 로그인할때 사용하는 비밀번호라도 있으면 큰일이다!
Https 원리는 뭘까?
Https 는 대칭키와 비대칭키 개념을 이해해야한다!
우선 대칭키는 암호화 복호화에 사용되는 키가 같은것을 의미한다. 즉 A 에서 Z 로 암호화가 되기위해 사용한 키를 symKey 라고 하면 Z 에서 A 로 복호화 즉 다시 돌릴때도 symKey 를 사용한다. 속도가 매우 빠르고 단순하다
비대칭키는 암호화 복호화에 사용되는 키가 서로 다른것을 의미한다. A 에서 W 로 암호화가 되기 위해 사용한 키를 asymKey1 이라고 하면 W 에서 A 로 복호화 하기위해선 asymKey1 이 아닌 asymKey2 가 필요하다! (asymKey2 로 암호화하면 asymKey1 으로 복호화 할 수 있다) 속도가 느리고 복잡하다 너무 신기하다! 수학적인 원리가 있다고 한다 아래는 약간의 예시이다!
1
2
3
(x^7) mod 187 [암호화]
(x^23) mod 187 [복호화]
암호화 복호화를 둘다 거치면 원래 숫자가 나온다!
비대칭키 대칭키를 어떻게 사용할까?
서버는 그래서 asymKey2 를 가지고 있고 client 는 asymKey1을 가지고 있다면 중간에 가로채져도 암호화된 packet 만 남을테니 상관이 없을것이다! 이때 client 가 가지고 있는 key 를 publickey 라고 하고 server 가 가지고있는 key 를 private key 라고 한다. 하지만 실제로 https 통신을 할때는 public key 만으로 암호화하는것은 아니다! 왜냐면 비대칭키는 속도가 느리니까. 조금더 복잡한데 아래에 정리를 해보겠다!
순서가 복잡하니 잘 따라 와야한다!
- [Client] TLS Handshake 를 시작한다. Client 가 Server 에 Hello 를 보낸다.
- [Server] 서버가 Hello 를 보낸다. 이때 public key 를 준다. 그리고 random password 도 보낸다.
- [Client] public key 가 인증된 발행기관에서 인증된것인지 확인한다.
- [Client] client 가 random password 를 server 에게 준다. 이때 public key 로 암호화 해서 준다.
- [Server] 서버는 random password 를 private key 로 해독한다
- [Client, Server] 양측 모두 무작위 서로의 random password 를 가지고 session key (이건 대칭키이다) 를 생성한다. 오직 이번 Client 와 Server 사이에서만 유효한 Session Key 이다.
- [Client, Server] client, server 순으로 완료 메시지를 전송한다
- 통신을 위한 모든 준비가 완료되고 세션키를 이용해 통신이 계속 진행된다.
p12, pfx는 뭘까?
p12 와 pfx 는 private 그리고 public key 가 둘다 포함되어있는 파일이다! 따라서 이 파일은 본인과 서버만 알도록 해주자!