되돌릴 수 없게 바꾸기, 해시
믹서에 과일을 넣고 갈면 주스가 나와요. 주스만 보고 어떤 과일이 들어갔는지 정확히 되돌릴 수는 없죠. 보안 해시도 이래요. 어떤 값을 넣으면 짧은 지문이 나오는데, 그 지문을 보고 원래 값을 되돌릴 수가 없어요. 그래서 비밀번호를 그대로 저장하지 않고, 이 되돌릴 수 없는 지문만 저장해요.
한 방향으로만 가요
어떤 값을 넣으면
짧고 일정한 길이의 지문이 나오는 도구를 떠올려봐요.
이 도구를 보안 해시라고 불러요.
같은 값을 넣으면 늘 같은 지문이 나와요.
그런데 한 가지 성질이 특별해요.
입력에서 지문은 쉽게 만들지만,
지문에서 원래 입력으로는 되돌아갈 수 없어요.
믹서가 과일을 주스로 만들 수는 있어도
주스를 원래 과일로 되돌릴 수 없는 것과 같아요.
그래서 한 방향이라고 불러요.
오른쪽 화살표로 입력을 지문으로 바꿔봐요. 왼쪽으로 되돌리려 하면 길이 막혀 있어요.
앞으로 가는 길은 쉽게 열렸지만
거꾸로 가는 길은 막혀 있었죠.
이 막힘이 보안의 핵심이에요.
지문만 가지고는 원래 값을 곧장 알 수 없으니까요.
그렇다면 이 성질을 어디에 쓸까요?
가장 흔한 자리가 바로 비밀번호예요.
비밀번호를 그대로 저장하면
저장소를 들여다본 사람이 곧장 알게 돼요.
그래서 다음처럼 해요.
비밀번호 대신 지문을 저장해요
비밀번호를 글자 그대로 저장하면 위험해요.
저장소가 새거나 누군가 들여다보면
그 비밀번호가 바로 드러나니까요.
그래서 비밀번호 자체는 저장하지 않아요.
대신 비밀번호를 해시에 넣어
나온 지문만 저장해요.
지문은 한 방향이라
그것만으로는 원래 비밀번호를 곧장 알 수 없어요.
저장소를 보더라도
거기엔 되돌릴 수 없는 지문만 줄지어 있는 거예요.
두 방식을 눌러 비교해봐요. 평문 저장은 비밀번호가 그대로 보이고, 지문 저장은 되돌릴 수 없는 지문만 남아요.
평문으로 저장한 쪽은 비밀번호가 훤히 보였죠.
지문으로 저장한 쪽은 알 수 없는 지문만 남았고요.
그러니 저장은 지문 쪽이 훨씬 안전해요.
그런데 한 가지 궁금해져요.
비밀번호를 저장하지 않는다면,
사용자가 로그인할 때
맞는 비밀번호인지 어떻게 확인할까요?
비교할 원본이 없잖아요.
여기서 지문의 또 다른 성질이 빛나요.
입력을 지문으로 바꿔 확인해요
같은 값을 넣으면 늘 같은 지문이 나온다고 했죠.
이 성질을 확인에 써요.
로그인할 때 사용자가 비밀번호를 입력하면,
그 입력을 다시 해시에 넣어
새 지문을 만들어요.
그리고 이 새 지문을
저장해 둔 지문과 견줘요.
둘이 같으면 같은 비밀번호를 넣은 거예요. 통과예요.
둘이 다르면 다른 비밀번호예요. 막혀요.
원본 비밀번호를 꺼내지 않고도
지문끼리만 견줘서 확인하는 거예요.
입력을 골라 확인을 눌러봐요. 입력의 지문이 저장된 지문과 같으면 통과, 다르면 막혀요.
맞는 비밀번호를 넣었을 때만 지문이 같아 통과했죠.
다른 값은 다른 지문이 되어 막혔고요.
이렇게 원본을 저장하지 않고도
맞는지 틀린지를 가려낼 수 있어요.
저장은 지문만, 확인은 지문 비교.
한 방향이라는 성질 하나가
저장과 확인을 모두 안전하게 만들어요.
그런데 우리는 해시라는 말을
다른 단원에서도 들은 적 있어요.
그 해시와 이 해시는 같은 걸까요?
data의 해시와는 목적이 달라요
data 단원에서도 해시를 봤어요.
거기서는 값을 칸 번호로 바꿔서
원하는 자료를 빨리 찾으려고 썼죠.
빠르게 자리를 정하는 게 목적이었어요.
보안 해시는 모양은 비슷해 보여도
목적이 정반대예요.
여기서는 빨리 찾는 게 아니라
되돌릴 수 없게 하는 게 핵심이에요.
그래서 보안용 해시는
지문에서 원래 값으로 돌아가기 어렵도록 만들어요.
같은 이름이라도 쓰임이 다른 거예요.
두 쪽을 눌러 목적을 대비해봐요. data 해시는 빨리 찾기, 보안 해시는 못 되돌리기가 목적이에요.
같은 해시라는 말이라도, data에서는 빨리 찾으려고, 보안에서는 못 되돌리게 하려고 써요. 목적이 그 도구의 성질을 정해요.
이렇게 같은 이름의 도구라도
어디에 쓰느냐에 따라 다른 성질이 중요해져요.
보안에서는 되돌릴 수 없다는 점이
가장 소중한 성질이에요.
이제 처음부터 끝까지 한 번 정리해봐요.
정리해볼까요
한 줄로 모으면 이래요.
보안 해시는 입력을 한 방향 지문으로 바꿔요.
지문에서 입력으로는 되돌아갈 수 없어요.
그래서 비밀번호 자체가 아니라
그 지문만 저장해요.
로그인 때는 입력을 다시 지문으로 바꿔
저장된 지문과 같은지 견줘요.
같으면 통과, 다르면 막힘이에요.
이건 빨리 찾으려는 data의 해시와 달리
못 되돌리게 하려는 해시예요.
한 방향 지문, 지문만 저장, 비교로 확인. 그게 해시로 지키는 법이에요.
핵심을 차례로 눌러 되짚어봐요. (한 방향 지문 -> 지문만 저장 -> 입력 지문으로 확인 -> data 해시와 목적이 다름)
이제 비밀번호를 그대로 두지 않고도
지켜내는 방법을 알게 됐어요.
되돌릴 수 없는 지문 하나가
저장과 확인을 함께 안전하게 해줘요.
사람도 시스템도 원본을 들고 있지 않으니
잃어버릴 비밀이 줄어드는 셈이에요.
다음엔 이렇게 지킨 정보를
주고받는 길에서 어떻게 안전하게 옮기는지
함께 이어서 살펴봐요.