[카테고리:] 미분류

  • 🔍 왜 SHA 해시 알고리즘은 단방향일까? 쉽게 이해해보자!

    안녕하세요! 오늘은 많은 컴퓨터와 인터넷 서비스에서 사용되는 SHA 해시 알고리즘이 왜 단방향인지, 왜 “암호처럼 풀 수 없는 것”인지 쉽게 설명해볼게요.

    SHA는 ‘Secure Hash Algorithm’의 줄임말이야. 이 알고리즘은 어떤 정보를 받아서, 길이가 딱 정해진 ‘엉뚱한 숫자+문자 조합’으로 바꿔주는 마법 같은 계산법이야.

    그런데 왜 SHA는 거꾸로 풀 수 없는지(단방향인지) 궁금하지? 지금부터 이유를 하나씩 알아볼게!


    1️⃣ 많은 입력 → 하나의 출력 (정보가 사라져요!)

    SHA는 어떤 길이의 글이든 받아서 딱 정해진 길이의 코드로 만들어줘.
    예를 들어:

    • "안녕"3f786850...
    • "안녕하세요"44f683a8...
    • "나는 중학생입니다"9b74c989...

    이런 식으로 모두 64글자 정도의 코드가 나와.
    그런데 입력은 수십억 개, 수조 개가 있을 수 있어.
    출력은 딱 64글자니까 당연히 여러 입력이 같은 출력을 가질 수도 있어 → “정보가 사라짐!”

    👉 그래서 출력만 보고 원래 입력을 알아내는 건 원래부터 불가능한 구조야.


    2️⃣ 복잡하고 뒤죽박죽 섞어요!

    SHA는 단순히 숫자 계산만 하는 게 아니야. XOR(엑스오알), AND, OR, NOT, 오른쪽으로 돌리기, 자르고 붙이기 같은 수많은 연산을 해.

    이런 연산들은 마치 퍼즐 조각을 마구 섞고 비틀어서 다시 원래 모습으로 돌리는 게 거의 불가능하게 만들어.

    👉 퍼즐 조각을 섞어놓으면 원래 그림을 복원하기 어렵듯이, SHA도 그런 구조야.


    3️⃣ 한 글자만 바꿔도 완전히 다른 결과!

    SHA는 정말 민감해.
    입력에서 딱 한 글자만 바꿔도 출력이 완전히 바뀌어버려!

    예를 들어:

    • "hello"2cf24dba...
    • "Hello"185f8db3...

    딱 첫 글자만 대문자로 바꿨는데 결과가 완전히 달라졌지?
    이걸 “Avalanche Effect(눈사태 효과)“라고 불러.

    👉 그래서 출력만 보고 “이게 어떤 입력에서 나왔을까?”라고 거꾸로 생각하기 정말 힘들어.


    4️⃣ 나머지를 버리고 남은 값만 써요

    SHA는 계산할 때 중간중간에 **모듈러 연산(mod)**라는 걸 써서 일정 부분만 남기고 나머지를 버려.

    예를 들어:

    • (12345 + 67890) % 10000 = 2345

    이런 식으로 값을 자꾸 자르고 버려서 역으로 계산하기가 더 힘들어져.

    👉 남은 값만 보고 전체 계산 과정을 거꾸로 찾는 건 거의 불가능!


    5️⃣ 단계별로 차곡차곡 쌓아요 (압축 구조)

    SHA는 글자를 여러 덩어리로 나눠서 차례로 계산해.
    첫 번째 덩어리를 계산해서 중간 결과를 만들고, 두 번째 덩어리는 이 중간 결과를 기반으로 또 계산하고… 이런 식으로 계속 쌓아.

    그래서 중간 결과들이 없으면 원래 입력을 절대 알 수 없어.

    👉 전체 결과만 남아 있고 중간 계산들은 사라졌기 때문에, 다시 거꾸로 전체 입력을 만드는 건 거의 불가능!


    🎁 정리!

    왜 SHA는 단방향일까?

    ✅ 입력이 무한하지만 출력은 고정! 정보가 사라짐
    ✅ 복잡한 수학 연산으로 원래 입력 복원 불가
    ✅ 작은 변화도 완전히 다른 결과를 만듦
    ✅ 중간 계산 과정이 남아 있지 않음
    ✅ 단계별로 쌓아서 계산하기 때문에 역산 어려움


    ✨ 마무리

    SHA 해시 알고리즘은 우리가 비밀번호를 안전하게 저장하거나, 파일이 중간에 바뀌었는지 확인하는 데 아주 많이 쓰여.

    단방향이기 때문에 누군가 SHA 결과만 본다고 해서 원래 비밀번호나 내용을 알아낼 수 없도록 보호해 주는 거지!