스킬캠퍼스
12강 · 패스워드
강의

오늘 끝나면

패스워드

  • 패스워드의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 패스워드이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

왜 평문 저장은 범죄 — 해싱·솔트·레인보우 테이블 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

암호 & 보안 · 12

패스워드
저장의 기술

비번을 평문으로 저장하면 범죄임. 해시로, 그리고 솔트까지 쳐서 저장해야 함.

P.01암호 & 보안 · 12

평문 저장 = 털리면 끝장

제일 게으른 방식임. 사용자가 친 비번을 그대로 DB에 적어둠. 로그인 때 입력값이랑 글자 맞춰보면 끝. 만들긴 쉬움.

DB가 한 번 털리면? 비번이 통째로 노출됨. 사람들은 같은 비번을 여기저기 돌려 씀. 한 사이트 털리면 은행·메일까지 줄줄이 뚫림.

그래서 평문 저장은 사실상 범죄임. 비번은 서버조차 원래 글자를 몰라야 함. 그럼 어떻게 맞춰보지? 다음 칸에서 해결함.

DB 한 줄에 비번이 그대로 적혀 있음
users 테이블 — 평문 저장 (위험)
idpassword
alice1234
bob1234
carolqwerty

DB 한 번 털리면 전부 그대로 노출됨

P.02암호 & 보안 · 12

해시로 저장 — 지문만 남김

비번을 해시 함수에 통과시켜 나온 지문만 저장함. 비번 원본은 안 적음.

해시는 한 방향임. 비번 → 지문은 쉬운데, 지문 → 비번은 되돌릴 수 없음. 로그인 때는? 입력 비번을 똑같이 해시해서, 저장된 지문이랑 같은지만 봄.

이러면 DB가 털려도 적힌 건 지문뿐임. 비번 원본은 거기 없음. 평문보다 한참 안전해짐. 근데 아직 빈틈이 하나 있음.

비번 → 한 방향 지문. 되돌리기 불가
한 방향 — 되돌리기 불가
사용자가 친 비번

1234

해시 함수
DB에 저장되는 지문

a3f0c9e21b7d

↓ 는 쉬움 · ↑(지문→비번)은 불가능
P.03암호 & 보안 · 12

같은 비번 = 같은 지문 → 레인보우표

해시의 약점임. 같은 비번은 늘 같은 지문이 나옴. 결정적이라서임.

공격자는 흔한 비번 수억 개를 미리 해시해서 지문↔비번 사전을 만들어둠. 이게 레인보우 테이블임. 털린 지문을 표에서 찾기만 하면 비번이 튀어나옴.

게다가 두 사람이 같은 비번을 쓰면 DB에 똑같은 지문이 찍힘. 한 명만 뚫려도 나머지가 같이 노출됨. 그래서 한 끗이 더 필요함.

미리 계산해둔 표로 역추적당함
레인보우 테이블 — 미리 계산된 사전
지문(해시)→ 비번
a3f0c9e21b7d1234
7e2b41d0aa39password
c1908ff3e2b6qwerty
5d4e0b1c77a2admin

털린 지문을 표에서 찾기만 하면 비번이 튀어나옴

P.04암호 & 보안 · 12

솔트 — 사용자마다 다른 소금

비번을 해시하기 전에 사용자마다 다른 무작위 글자(솔트)를 섞어줌. 음식에 소금 치듯이.

앨리스는 x7q2+비번, 밥은 k9w4+비번을 해시함. 그럼 둘이 똑같은 비번을 써도 지문이 제각각이 됨. DB에 같은 값이 안 찍힘.

오른쪽에서 직접 해봄. 같은 비번을 넣고 [DB 털림]을 눌러보셈. 평문은 빨강, 해시는 둘이 똑같아 주황 경고, 해시+솔트만 제각각이라 초록임.

직접 해봄: 같은 비번, 갈라지는 결과
비번 저장 3종 비교 · 직접 입력
입력 — 두 사용자가 같은 비번을 써봄

앨리스·밥이 우연히 똑같은 비번 1234을 씀.

저장 — 서버 DB에 이렇게 적힘
① 평문입력 그대로
앨리스1234
1234
② 해시지문으로 저장
앨리스ff7f246c1ba5
ff7f246c1ba5
③ 해시 + 솔트사용자마다 다른 소금
앨리스b672148c6037
8a21468bbfc7
P.05암호 & 보안 · 12

왜 솔트가 표 공격을 죽이나

솔트가 붙는 순간, 공격자의 미리 계산해둔 표가 통째로 쓸모없어짐.

공격자가 만든 레인보우표는 비번 기준임. 근데 이제 해시되는 건 솔트+비번임. 사용자마다 솔트가 다르니, 표를 사용자 수만큼 새로 만들어야 함. 사실상 불가능함.

정리하면 세 단계임. 평문은 절대 금지 · 해시는 기본 · 솔트는 필수. 진짜 서비스는 여기에 일부러 느리게 만든 해시(bcrypt 같은)까지 얹음.

Q. 솔트(salt)를 쓰는 이유는?같은 비밀번호라도 해시 결과를 사용자마다 다르게 만들기 위해서임. 그러면 공격자가 미리 계산해둔 표(레인보우 테이블) 공격이 안 먹힘 — 사용자마다 솔트가 다르니 표를 사람 수만큼 새로 만들어야 해서 사실상 불가능해짐.
비번 하나에 표가 수억 개 필요해짐
솔트가 표 공격을 죽이는 법
솔트 없음
hash(비번)
표 1개로모두 역추적
솔트 있음
hash(솔트+비번)
사람 수만큼표 새로 만들어야

→ 미리 만든 표가 통째로 쓸모없어짐

3줄 요약

  1. 1왜 평문 저장은 범죄 — 해싱·솔트·레인보우 테이블
  2. 2패스워드은 고전 암호 → 키와 신뢰 → 웹 보안 → 블록체인 → 다음 시대 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

패스워드

왜 평문 저장은 범죄 — 해싱·솔트·레인보우 테이블

암호를 잠그고 풀 때 쓰는 비밀 또는 공개 숫자

해시

데이터를 고정 길이 지문으로 바꾸는 함수