같은 비밀번호의 함정, 소금 한 꼬집
지난 강에서 비밀번호를 그대로 저장하지 않고 해시로 바꿔 저장한다고 배웠죠. 그런데 두 사람이 우연히 같은 비밀번호를 쓰면 어떻게 될까요? 같은 비밀번호는 같은 해시가 나와요. 저장된 해시 목록에서 똑같은 값이 나란히 보이면, 두 사람이 같은 비밀번호라는 사실이 그대로 드러나요. 그래서 사람마다 다른 한 꼬집을 더해 섞는 방법이 필요해요.
같은 비밀번호는 같은 해시가 돼요
해시는 같은 입력에는 항상 같은 결과를 내요.
그래야 다음에 같은 비밀번호를 넣었을 때
저장된 해시와 맞춰볼 수 있었죠.
그런데 이 성질에는 그림자가 있어요.
두 사람이 같은 비밀번호를 쓰면
두 사람의 해시도 똑같이 나와요.
저장된 해시 목록을 보기만 해도
같은 값이 나란히 있으면
같은 비밀번호라는 걸 알 수 있어요.
비밀번호 자체는 몰라도, 같다는 사실이 새어 나가는 거예요.
두 사람의 비밀번호를 같게도, 다르게도 바꿔봐요. 같으면 해시도 똑같이 나란히 보여요.
같은 비밀번호를 골랐더니
두 해시가 똑같이 보였죠.
해시만 봐도 같다는 게 바로 드러나요.
이게 왜 문제가 될까요?
해시는 거꾸로 되돌리기 어렵다고 배웠지만,
같은 값이 같은 해시를 낸다는 점은 변하지 않아요.
그렇다면 누군가 흔한 비밀번호들을
미리 해시해서 적어 두면 어떻게 될까요?
미리 만든 표가 왜 위험할까요
흔히 쓰는 비밀번호는 생각보다 종류가 적어요.
그래서 그런 비밀번호들과
각자의 해시를 미리 한 줄씩 적어 둘 수 있어요.
이렇게 미리 만들어 둔 대응표가 있으면
저장된 해시를 표에서 찾아
거꾸로 비밀번호를 짐작할 수 있게 돼요.
해시 자체를 푸는 게 아니라
미리 적어 둔 답을 맞춰보는 거예요.
그래서 흔한 비밀번호일수록 더 위험해요.
표에 이미 들어 있을 가능성이 높으니까요.
저장된 해시를 눌러봐요. 미리 적어 둔 표에 같은 해시가 있으면 비밀번호가 짐작당할 수 있음을 인지해봐요.
표에 있는 해시와 저장된 해시가 같으면
그 옆 칸의 비밀번호가 그대로 드러났죠.
표에 없는 해시는 짐작이 막혔고요.
여기서 핵심을 잡을 수 있어요.
위험의 뿌리는 같은 비밀번호가
항상 같은 해시가 된다는 점이에요.
그러면 막는 길도 보여요.
같은 비밀번호라도 사람마다 해시가 달라지게 만들면
미리 만든 표 하나로는 더 이상 맞출 수 없게 돼요.
그 방법이 바로 소금이에요.
비밀번호에 소금을 더해요
소금은 사람마다 다르게 정한 작은 값이에요.
비밀번호를 그대로 해시하지 않고
비밀번호에 그 사람의 소금을 먼저 붙여요.
그런 다음 둘을 합친 것을 해시해요.
중요한 건 소금이 사람마다 다르다는 점이에요.
소금은 숨기는 비밀이 아니에요.
해시 옆에 같이 저장해 둬도 괜찮아요.
왜냐하면 소금만 알아도
비밀번호를 알 수는 없거든요.
소금이 하는 일은 딱 하나, 사람마다 해시를 다르게 만드는 거예요.
각 사람의 소금을 비밀번호에 더하는 버튼을 눌러봐요. 비번에 소금을 붙인 다음 그 결과를 해시해요.
소금을 더하니 해시에 넣는 입력 자체가 달라졌죠.
같은 비밀번호라도
앞에 붙은 소금이 다르면
해시에 들어가는 재료가 서로 달라져요.
해시는 입력이 조금만 달라도
결과가 완전히 달라진다고 배웠어요.
그러니 소금이 다르면 해시도 다를 수밖에 없어요.
이제 두 사람이 같은 비밀번호를 써도
저장된 해시가 어떻게 보일지 직접 비교해봐요.
같은 비번도 다른 해시가 돼요
소금이 없을 때를 떠올려봐요.
같은 비밀번호 두 개의 해시가 똑같았죠.
소금을 켜면 이야기가 달라져요.
두 사람의 비밀번호가 같아도
소금이 다르니 저장된 해시가 서로 달라요.
이제 저장된 해시 목록을 봐도
같은 비밀번호를 쓴 사람을 골라낼 수 없어요.
게다가 미리 만들어 둔 표도 무력해져요.
그 표는 소금이 없는 비밀번호의 해시로 만든 거라
소금이 섞인 해시와는 맞지 않거든요.
사람마다 소금이 다르니, 모든 사람을 위한 표를 따로따로 만들어야 하는 셈이에요.
소금을 껐다 켜며 비교해봐요. 끄면 같은 비번이 같은 해시, 켜면 같은 비번도 해시가 달라져 표가 무력해져요.
소금을 켜는 순간
같던 두 해시가 서로 다른 값으로 갈라졌죠.
미리 만든 표도 더는 들어맞지 않았고요.
작은 한 꼬집이 두 가지를 한꺼번에 해결했어요.
저장된 해시만으로 같은 비밀번호를 알아내는 일도,
흔한 비밀번호를 표로 역추적하는 일도 막아 줘요.
그것도 비밀을 새로 숨길 필요 없이
사람마다 다른 값을 더하기만 해서요.
이제 전체를 한 번 정리해봐요.
정리해볼까요
한 줄로 모으면 이래요.
같은 비밀번호는 같은 해시가 돼요.
그래서 저장된 해시로 같은 비번을 알 수 있고,
미리 만든 표로 흔한 비번을 역추적당할 위험이 있어요.
막는 방법은 사람마다 다른 소금을
비밀번호에 더한 뒤 해시하는 거예요.
소금은 비밀이 아니라 사람마다 다르기만 하면 돼요.
소금을 더하면 같은 비번도 해시가 전부 달라져,
표가 무력해지고 같은 해시가 보일 일도 사라져요.
함정을 소금으로 풀어 같은 비번도 다른 해시로. 그게 소금이에요.
핵심을 차례로 눌러 되짚어봐요. (같은 비번=같은 해시 -> 미리 만든 표의 위험 -> 소금을 더해요 -> 같은 비번도 다른 해시)
이제 같은 비밀번호가 왜 함정이 되는지,
그리고 한 꼬집의 소금이
그 함정을 어떻게 풀어내는지 알게 됐어요.
비밀을 더 숨기지 않고도
사람마다 다르게만 만들면
방어가 한결 단단해진다는 점이 멋지죠.
작은 차이를 일부러 만들어 주는 이 발상은
보안에서 두고두고 다시 만나게 돼요.
다음엔 이런 보호 장치들이
어떻게 더 촘촘히 겹쳐지는지
함께 이어서 살펴봐요.