Q.비밀번호를 SHA-256으로 저장한 서비스를 인수했습니다. 어떻게 전환하겠습니까?
평문을 모르므로 한꺼번에 바꿀 수 없습니다. 로그인할 때 하나씩 옮기는 점진적 전환을 씁니다.
| 순서 | 조치 |
|---|
| 1 | 저장 형식에 알고리즘 표시를 넣는다 (sha256, bcrypt 를 접두로) |
| 2 | 로그인 시 옛 형식이면 옛 방식으로 검증하고, 성공하면 그 자리에서 새 방식으로 다시 저장한다 |
| 3 | 새 형식이면 새 방식으로 검증한다 |
| 4 | 일정 기간 뒤 남은 옛 형식 계정은 비밀번호 재설정을 요구한다 |
즉시 강화가 필요하면 기존 해시를 한 겹 더 감싸는 방법도 있습니다. 새 방식으로 옛 해시를 다시 해시해 저장하고, 검증 때 두 단계를 거칩니다. 로그인 없이도 전체를 강화할 수 있다는 장점이 있습니다.
흔한 실수: 전체 사용자에게 비밀번호 재설정을 강제하는 것부터 답하는 것. 유출이 확인된 상황이면 맞지만, 예방적 전환에서는 이탈이 큽니다. 점진적 전환을 먼저 말하고 강제 재설정을 예외로 두는 것이 실무 판단입니다.
Q.솔트를 쓰면 무엇이 막히고, 무엇은 여전히 막히지 않나요?
같은 비밀번호가 다른 해시를 갖게 되어 미리 계산한 표와 재사용 공격이 막힙니다. 개별 추측은 막지 못합니다.
| 막히는 것 | 이유 |
|---|
| 레인보우 테이블 | 미리 만든 표가 이 솔트에는 안 맞는다 |
| 한 번 계산해 여러 계정 뚫기 | 계정마다 다시 계산해야 한다 |
| 같은 비밀번호 사용자 식별 | 해시가 서로 달라 눈으로 찾을 수 없다 |
| 안 막히는 것 | 이유 |
|---|
| 한 계정을 겨냥한 대입 | 솔트는 함께 저장돼 공격자도 안다 |
| 흔한 비밀번호 추측 | 자주 쓰는 후보 몇 개면 뚫린다 |
| GPU 로 빠르게 시도 | 해시가 빠르면 솔트와 무관하게 초당 수십억 번 |
그래서 솔트는 필수지만 충분하지 않습니다. 느린 해시로 시도 자체를 비싸게 만드는 것이 함께 필요합니다.
흔한 실수: 솔트를 비밀로 보관해야 한다고 답하는 것. 비밀이 아니고 해시와 나란히 저장합니다.
Q.bcrypt의 cost나 Argon2의 파라미터는 어떤 기준으로 정하나요?
보안이 아니라 응답 목표와 서버 처리량에서 거꾸로 계산합니다.
로그인 피크가 초당 40건, 서버 8코어, 응답 목표 300ms 라고 해봅시다.
| 비용 계수 | 1건 처리 | 코어당 | 8코어 | 피크 40건 |
|---|
| 11 | 약 120ms | 초당 8건 | 초당 64건 | 감당한다 |
| 13 | 약 480ms | 초당 2건 | 초당 16건 | 못 받는다 |
즉 감당 가능한 범위에서 가장 높은 값이 답입니다. 보통 100에서 250ms 사이를 목표로 잡습니다.
Argon2 는 시간, 메모리, 병렬도 셋을 정합니다. 메모리를 크게 잡는 것이 GPU 공격을 비싸게 만드는 핵심이라 여기를 먼저 확보합니다.
그리고 하드웨어가 빨라지면 값을 올립니다. 저장 형식에 파라미터를 넣어두면 로그인 시 옛 값을 감지해 새 값으로 다시 저장할 수 있습니다.
흔한 실수: 가능한 가장 높은 값을 답하는 것. 로그인이 밀리면 서비스 장애이고, 느린 로그인 자체가 서비스 거부 공격의 표면이 됩니다.
Q.비밀번호 해시가 유출됐다고 판단되면 어떤 순서로 대응하겠습니까?
해시가 나갔다면 시간이 지날수록 깨진 계정이 늘어납니다. 세션 차단과 재설정 유도를 먼저 하고 조사를 병행합니다.
| 순서 | 조치 |
|---|
| 1 | 유출 범위와 시점을 확인한다. 어떤 알고리즘과 파라미터였는지 |
| 2 | 전체 세션과 리프레시 토큰을 무효화한다 |
| 3 | 비밀번호 재설정을 요구한다. 로그인 시 강제 변경 |
| 4 | 유출 사실을 사용자에게 알린다. 다른 서비스에 같은 비밀번호를 쓴 경우를 경고 |
| 5 | 이상 로그인(새 기기, 새 지역)을 한동안 강하게 감시한다 |
| 6 | 원인을 막고 알고리즘과 파라미터를 강화한다 |
빠른 해시로 저장했다면 위험이 훨씬 큽니다. 초당 수십억 번 시도가 가능해 흔한 비밀번호는 사실상 즉시 뚫립니다.
흔한 실수: 비밀번호 재설정만 하고 세션을 남겨두는 것. 이미 탈취된 세션은 비밀번호와 무관하게 살아 있습니다. 무효화가 함께 가야 합니다.
먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.
읽었으면 문제로 확인해보세요
보안 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.