암호화할 때 사용되는 키와 암호를 풀 때 사용되는 키가 같다. 통신을 할 때 서로 대칭키를 알고 있어야 한다. 그러면 상대방에게 키를 줘야 하는데 이 키 자체는 암호화가 되어있지 않아서 키가 노출될 수 있다.
키가 2개가 있다. 암호화를 할 때 사용되는 키와 복호화를 할 때 사용되는 키가 서로 다르다. 하나는 공개키 하나는 비공개키라고 부른다. 주로 공개키를 공개하고 비공개키는 공개하지 않는다. 공개키에 해당하는 비공개키를 가지고 있는 사람에게 안전하게 데이터를 전송하려면 정보를 공개키로 암호화여 전송한다. 데이터를 비공개키로 풀어서 데이터를 볼 수 있다.
반대로 비공개키를 암호화여 데이터를 전송하면 공개키를 가지고 있는 사람은 암호화를 풀어서 데이터를 읽을 수 있다. 이 말은 해당 데이터가 공개키와 쌍을 이루는 비공개키로 암호화했다는 것을 알 수 있기 때문에 데이터를 전송한 주체가 비공개키를 가지고 있다는 것이 증명된 것이다.
클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보장한다. 제3자(Certificate authority) 공인된 기관이 보증해준다. 인증서에는 인증서를 발부한 CA, 서비스의 도메인 정보, 서버의 공개키, 공개키의 암호화 방법이 들어가 있다. SSL 통신에 사용할 공개키를 클라이언트에게 제공한다. 인증기관에 대해서는 웹브라우저가 알고 있다.
공개키로 암호화해서 통신하는 것이 사실 더 안전하다. 하지만 암호화하고 복호화를 하는데 컴퓨팅 파워를 많이 쓴다. 대칭키를 주고받을 때는 비대칭키 암호화를 통해 교환을 하고 키를 교환한 이후로는 서로 대칭키를 알고 있기 때문에 대칭키 암호화를 이용해서 데이터를 주고받는다.
서로 비밀키를 교환했으므로 비밀키를 이용해서 암호화하여 실제 데이터를 주고받는다.
데이터 전송이 끝나면 통신에서 사용한 대칭키인 세션키를 폐기하고 연결을 종료한다.
자바스크립트로 직접 만들면서 배우는 - 자료구조와 알고리즘 강의 바로 가기
실습으로 마스터하는 OAuth 2.0: 기본부터 보안 위험까지 - OAuth 2.0 강의 바로 가기
기계인간 이종립, 소프트웨어 개발의 지혜 - Git 강의 바로 가기
코드숨에서 매주 스터디를 진행하고 있습니다. 메일을 등록하시면 새로운 스터디가 시작될 때 알려드릴게요!