처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Hacker News 2026.06.15 29

비밀번호는 어떻게 안전하게 저장될까 — 해시 함수 이야기

Hacker News 원문 보기

‘원본을 모르게 만드는’ 마법

회원가입할 때 우리가 입력한 비밀번호, 그게 서버 DB에 그대로 저장되면 어떻게 될까요? 해커가 DB를 한 번 털면 전 회원 비밀번호가 그대로 노출되겠죠. 그래서 거의 모든 서비스는 비밀번호를 ‘원본을 알아볼 수 없는 형태’로 바꿔서 저장하는데, 그 핵심에 있는 게 바로 해시 함수(hash function)예요. 해시 함수의 원리와 그 뒤에 숨은 보안 수학을 주니어도 이해할 수 있게 같이 정리해볼게요.

해시 함수가 뭐냐면

해시 함수는 아무리 긴 입력이든 받아서 정해진 길이의 결과값(해시값)으로 바꿔주는 함수예요. 예를 들어 "hello"를 넣든 1GB짜리 영상을 넣든, SHA-256이라는 해시 함수를 거치면 똑같이 256비트(64자리 16진수)짜리 값이 나와요. 이걸 일상 비유로 들면, 어떤 음식을 넣어도 똑같은 크기로 갈아주는 믹서기 같은 거예요. 그래서 원문 제목이 「잘게 다지고(Chopped), 저장하고(Stored), 지키고(Secured)」인 거죠.

이 함수에는 몇 가지 중요한 성질이 있어요. 첫째, 결정적(deterministic)이에요. 같은 입력은 항상 같은 결과를 내요. 둘째, 단방향(one-way)이에요. 해시값만 보고 원본을 거꾸로 계산해내는 게 사실상 불가능해요. 셋째, 눈사태 효과(avalanche effect)가 있어요. 입력을 딱 한 글자만 바꿔도 결과값이 완전히 딴판으로 바뀌어요. "cat"과 "cas"의 해시값이 전혀 안 닮은 거죠.

충돌은 반드시 존재한다 (근데 못 찾는다)

여기서 재밌는 수학이 나와요. 입력은 무한히 많은데 결과값의 가짓수는 정해져 있잖아요. 그러면 비둘기집 원리(pigeonhole principle)에 따라 「서로 다른 입력인데 같은 해시값을 내는 경우」가 반드시 존재해요. 이걸 충돌(collision)이라고 해요. 비둘기집 원리가 뭐냐면, 비둘기 10마리를 9개 둥지에 넣으면 한 둥지엔 무조건 2마리가 들어간다는 당연한 이야기예요.

그래서 좋은 해시 함수의 조건은 ‘충돌이 없는 것’이 아니라 ‘충돌을 일부러 찾아내는 게 현실적으로 불가능한 것’이에요. SHA-256은 결과 가짓수가 2의 256제곱인데, 이건 우주의 원자 수보다도 많은 수라서 작정하고 찾아도 못 찾아요. 참고로 생일 역설(birthday paradox)이라는 게 있어서 충돌을 찾는 난이도는 전체 가짓수의 제곱근 정도로 떨어지지만, 그래도 천문학적이에요.

깨진 해시들의 역사

해시 함수도 세대교체를 겪었어요. 한때 널리 쓰이던 MD5는 이제 충돌을 만들어내는 방법이 알려져서 보안 용도로는 죽은 함수예요. 그 뒤를 이은 SHA-1도 2017년에 실제 충돌이 만들어지면서(SHAttered) 퇴출됐어요. 지금은 SHA-256을 포함한 SHA-2 계열과, 내부 구조가 완전히 다른 SHA-3(Keccak)가 주력이에요.

비밀번호엔 빠른 해시를 쓰면 안 된다

여기가 진짜 중요한 부분이에요. 의외로 SHA-256은 비밀번호 저장에 적합하지 않아요. 왜냐면 너무 빠르거든요. 빠르다는 건 공격자가 초당 수십억 개의 후보를 대입해볼 수 있다는 뜻이라, 무차별 대입(brute force)에 취약해요. 그래서 비밀번호에는 일부러 느리게 설계된 bcrypt, scrypt, Argon2 같은 함수를 써요.

여기에 소금(salt)도 꼭 뿌려요. 솔트가 뭐냐면, 비밀번호마다 붙이는 무작위 값이에요. 같은 비밀번호 "1234"를 쓰는 사람이 둘 있어도 솔트가 다르면 저장되는 해시값이 달라져서, 미리 계산해둔 해시 사전(레인보우 테이블)으로 한 방에 깨는 공격을 막아줘요.

한국 개발자에게

실무에서 직접 해시 알고리즘을 구현할 일은 거의 없어요. 오히려 직접 만들면 위험하고요. 핵심은 ‘어디에 뭘 써야 하는지’를 아는 거예요. 파일 무결성 검증이나 데이터 식별엔 SHA-256, 비밀번호 저장엔 반드시 Argon2나 bcrypt — 이 구분만 확실히 해도 사고의 절반은 막아요. 면접 단골 질문이기도 하니 원리까지 이해해두면 두고두고 써먹어요.

핵심 한 줄: 해시는 ‘되돌릴 수 없게’ 만드는 기술이고, 비밀번호엔 ‘일부러 느린’ 해시를 써야 한다. 여러분 프로젝트의 비밀번호, 혹시 아직 SHA만으로 저장하고 있진 않나요?


🔗 출처: Hacker News

이 뉴스가 유용했나요?

TTJ 코딩클래스 정규반

월급 외 수입,
코딩으로 만들 수 있습니다

17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.

144+실전 강의
17개수익 모델
4.9수강생 평점
정규반 자세히 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.