주소창의 자물쇠는 무엇을 지키는가 — HTTPS와 암호화
브라우저 주소창 왼쪽에는 작은 자물쇠 아이콘이 있습니다. 평소에는 눈에 잘 들어오지 않지만, 가끔 “이 사이트는 안전하지 않습니다"라는 경고가 뜨면 그제야 신경이 쓰입니다. 지난 글에서 쿠키와 토큰이 사실상 출입증이라, 오가는 길에 누군가 가로채면 위험하다고 했습니다. 그 위험을 막아 주는 것이 바로 자물쇠가 가리키는 HTTPS입니다.
여기에 더해 개인정보 유출 사고 소식도 잊을 만하면 들려옵니다. 이번 글에서는 HTTPS가 무엇을 지키는지, 암호화는 어떻게 동작하는지, 그리고 서비스가 내 비밀번호를 어떻게 보관하는지를 코드 없이 풀어 보겠습니다.
HTTP는 엽서, HTTPS는 봉인된 편지입니다 #
지난 글에서 브라우저와 서버가 HTTP라는 약속으로 대화한다고 했습니다. 그런데 기본 HTTP에는 약점이 하나 있습니다. 주고받는 내용이 그대로 노출된다는 점입니다.
엽서를 떠올리면 가깝습니다. 엽서는 배달되는 동안 거치는 사람 누구나 내용을 읽을 수 있습니다. HTTP로 보낸 비밀번호나 카드 번호도 마찬가지여서, 중간 경로에 있는 누군가가 들여다볼 여지가 있습니다. 카페의 공용 와이파이처럼 여러 사람이 함께 쓰는 길이라면 더욱 그렇습니다.
HTTPS는 이 엽서를 봉인된 편지로 바꿉니다. 내용을 암호로 봉해서 보내기 때문에, 중간에서 누가 가로채도 무슨 내용인지 알 수 없습니다. 주소창의 자물쇠는 “이 사이트와의 대화가 봉인돼 있다"는 표시이고, “안전하지 않습니다"라는 경고는 봉인되지 않은 엽서로 오가고 있다는 뜻입니다.
암호화는 약속된 자물쇠와 열쇠입니다 #
봉인의 정체가 암호화입니다. 암호화는 내용을 정해진 규칙으로 뒤섞어, 올바른 열쇠가 없으면 읽을 수 없는 글자 덩어리로 바꾸는 것입니다.
HTTPS로 접속하는 순간, 브라우저와 서버는 둘만 아는 비밀 열쇠를 안전하게 나눠 가집니다. 이후 주고받는 내용은 이 열쇠로 잠그고, 같은 열쇠로만 풉니다. 그래서 누군가 통신을 통째로 가로채더라도 손에 쥐는 것은 의미를 알 수 없는 글자뿐입니다. 자물쇠를 채운 상자만 빼앗고 열쇠는 얻지 못한 셈입니다.
이 봉인을 보증하는 장치가 인증서입니다. 사이트는 신뢰받는 기관이 발급한 인증서를 갖추고, 브라우저는 그 인증서를 확인해 “지금 연결한 곳이 진짜 그 사이트가 맞는지"까지 점검합니다. 자물쇠가 떠 있다는 것은 봉인과 신원 확인이 함께 이루어졌다는 뜻입니다.
비밀번호는 그대로 저장하지 않습니다 #
통신을 봉인해도, 도착한 정보를 서비스가 어떻게 보관하느냐는 또 다른 문제입니다. 특히 비밀번호가 그렇습니다.
잘 만든 서비스는 비밀번호를 입력한 그대로 저장하지 않습니다. 대신 한쪽으로만 계산되는 변환을 거쳐, 원래 값을 알아보기 어려운 형태로 바꿔 보관합니다. 이 과정을 해싱이라고 부릅니다. 로그인할 때는 입력한 비밀번호를 같은 방식으로 변환해, 저장된 값과 일치하는지만 비교합니다. 변환된 값에서 원래 비밀번호를 거꾸로 되돌리는 것은 매우 어렵습니다.
그래서 설령 데이터베이스가 통째로 새어 나가도, 비밀번호 원본이 곧바로 드러나지는 않습니다. 비밀번호를 잊었을 때 서비스가 원래 값을 알려 주지 못하고 재설정만 안내하는 것도 이 때문입니다. 서비스조차 내 비밀번호 원본을 들고 있지 않은 것입니다.
그래도 유출은 일어납니다. 그래서 2단계 인증이 필요합니다 #
아무리 잘 막아도 비밀번호가 새는 일은 생깁니다. 여러 사이트에 같은 비밀번호를 돌려쓰거나, 진짜처럼 꾸민 가짜 화면에 속아 직접 입력하는 경우입니다.
그래서 나온 것이 2단계 인증입니다. 흔히 2FA라고 부릅니다. 비밀번호 하나에만 기대지 않고, 문자로 온 코드나 인증 앱이 보여 주는 숫자처럼 두 번째 확인을 한 단계 더 두는 방식입니다. 비밀번호가 털리더라도 두 번째 확인을 넘지 못하면 들어올 수 없습니다. 자물쇠를 두 개 달아 두는 셈입니다.
왜 비개발자가 알면 일이 편해지는가 #
- 자물쇠와 경고를 정확히 읽습니다. “안전하지 않음” 경고는 사이트가 봉인 없이 오가고 있다는 신호이므로, 그런 곳에 민감한 정보를 넣지 않도록 판단할 수 있습니다.
- 유출 사고를 차분히 이해합니다. “비밀번호를 재설정해 주세요"라는 안내가 왜 나오는지, 같은 비밀번호를 다른 곳에 돌려쓰면 왜 위험한지 납득할 수 있습니다.
- 보안 요청에 협조할 수 있습니다. 2단계 인증을 켜라거나 HTTPS를 반드시 적용하라는 요구가 번거로운 절차가 아니라 분명한 이유가 있는 조치임을 알 수 있습니다.
마무리 #
오늘은 주소창의 자물쇠가 가리키는 HTTPS를 살펴봤습니다. HTTP가 내용이 노출되는 엽서라면 HTTPS는 암호로 봉인된 편지이고, 그 봉인의 정체가 암호화입니다. 여기에 비밀번호를 그대로 저장하지 않는 해싱, 그리고 비밀번호가 새더라도 막아 주는 2단계 인증까지 더해져 우리의 정보를 여러 겹으로 지킵니다.
쿠키와 토큰이 출입증이라는 점이 아직 흐릿하다면 로그인하면 왜 계속 로그인 상태로 있을까를, 이런 정보를 노리는 공격이 어떻게 발전해 왔는지 궁금하다면 컴퓨터 바이러스와 랜섬웨어의 역사를 함께 읽어 보시길 권합니다.