해시(Hash), 암호화(Encryption), 전자서명(Digital Signature) 한 번에 이해하기

많은 개발자가 처음에는 해시(Hash), 암호화(Encryption), 전자서명(Digital Signature) 을 비슷한 개념으로 생각합니다.

하지만 목적과 동작 방식은 완전히 다릅니다.

핵심만 먼저 정리하면 다음과 같습니다.

  • 암호화: 데이터를 숨기기 위한 기술 (복호화 가능)
  • 해시: 데이터가 변경되었는지 확인하기 위한 기술 (복호화 불가)
  • 전자서명: 해시값에 개인키로 서명하여 작성자와 무결성을 증명하는 기술


1. 암호화(Encryption)

암호화는 데이터를 숨기는 것이 목적입니다.

예를 들어 주문 데이터가 있다고 가정해보겠습니다.

종목 : 삼성전자
가격 : 100,000
수량 : 10

암호화하면

A89D91A7...

처럼 알아볼 수 없는 값으로 변합니다.

복호화 키를 가지고 있으면 다시 원래 데이터로 복원할 수 있습니다.

원문
   │
   ▼
암호화
   │
   ▼
암호문
   │
   ▼
복호화
   │
   ▼
원문

즉, 암호화는 다시 원문으로 복원할 수 있습니다.


2. 해시(Hash)

해시는 암호화와 전혀 다른 기술입니다.

예를 들어

종목 : 삼성전자
가격 : 100000
수량 : 10

에 SHA-256을 적용하면

A3C9D93F0A...

같은 64자리(256비트) 해시값이 생성됩니다.

하지만 이 값만 가지고는 원문을 절대로 복원할 수 없습니다.

원문
   │
   ▼
SHA-256
   │
   ▼
해시값

반대로

해시값
   │
   ▼
원문

은 불가능합니다.

즉, 해시는 단방향 함수(One-way Function) 입니다.


3. 왜 해시는 복호화가 불가능할까?

해시는 원문을 저장하는 것이 아니라 원문의 특징(지문) 을 계산한 결과입니다.

사람의 지문을 예로 들어보겠습니다.

사람
  │
  ▼
지문

지문을 보고 사람을 확인할 수는 있지만,

지문만 가지고 사람을 다시 만들 수는 없습니다.

해시도 동일한 개념입니다.


4. 같은 입력이면 항상 같은 해시

예를 들어

안녕하세요

를 SHA-256으로 계산하면

ABCDEF12345...

가 나옵니다.

100년 뒤에 다시 계산해도 결과는 동일합니다.


5. 한 글자만 달라도 결과는 완전히 달라진다

예를 들어

가격 : 100000

AABBCCDDEE

하지만

가격 : 100001

9F23A8D11C

처럼 완전히 다른 결과가 생성됩니다.

이 현상을 Avalanche Effect(눈사태 효과) 라고 합니다.

그래서 문서가 단 한 글자만 수정되어도 해시값은 완전히 달라집니다.


6. 전자서명(Digital Signature)

여기서 많은 사람들이 가장 많이 헷갈립니다.

전자서명은 문서를 암호화하지 않습니다.

먼저 문서를 해시합니다.

예를 들어

주문서

SHA-256

9A7B8C4D...

그리고 이 해시값을

개인키(Private Key) 로 서명합니다.

문서
   │
   ▼
SHA-256
   │
   ▼
해시값
   │
   ▼
개인키로 서명
   │
   ▼
전자서명(Signature)

즉,

전자서명은 원문이 아니라 해시값에 대해 수행됩니다.


7. 왜 해시를 먼저 만들까?

예를 들어 PDF가 100MB라고 가정해보겠습니다.

100MB 전체를 공개키 알고리즘(RSA 등)으로 처리하면 매우 느립니다.

그래서

100MB 문서
      │
      ▼
SHA-256
      │
      ▼
32Byte 해시
      │
      ▼
개인키로 서명

처럼 작은 해시값만 서명합니다.

속도도 빠르고 효율적입니다.


8. 전자서명 검증 과정

클라이언트는 서버에 다음 두 가지를 전송합니다.

  • 원문
  • 전자서명
원문
전자서명

서버는 다음 순서로 검증합니다.

① 원문을 다시 해시

원문
   │
   ▼
SHA-256
   │
   ▼
해시 A

② 공개키로 전자서명 검증

중요한 점은

공개키로 해시를 만드는 것이 아닙니다.

공개키는 서명이 올바른지 검증하는 역할을 합니다.

전자서명
   │
   ▼
공개키 검증
   │
   ▼
원래 서명된 해시값 확인

이를 해시 B라고 생각하면 됩니다.


③ 두 해시 비교

해시 A == 해시 B

같다면

  • 문서가 변경되지 않았음
  • 개인키 소유자가 서명했음

을 확인할 수 있습니다.


9. 문서가 변조되면?

원본

가격 : 100000

SHA-256

AAAA1111

해커가

가격 : 900000

으로 수정하면

BBBB9999

라는 새로운 해시가 생성됩니다.

서명에서 검증된 해시는

AAAA1111

입니다.

비교하면

AAAA1111
≠
BBBB9999

즉시 변조를 발견할 수 있습니다.


10. 개인키와 공개키는 같은 것일까?

아닙니다.

둘은 완전히 다른 값입니다.

개인키
8F93A4BC...

공개키
04A1298FF2...

둘은 수학적으로 연결되어 있지만,

공개키만 가지고 개인키를 계산하는 것은 현실적으로 불가능하도록 설계되어 있습니다.


11. 공개키는 어떻게 만들어질까?

공개키는 개인키를 기반으로 수학적 계산을 통해 생성됩니다.

개인키 생성
      │
      ▼
수학적 계산
      │
      ▼
공개키 생성

가능한 것

개인키 → 공개키

불가능한 것

공개키 → 개인키

RSA는 큰 소수의 곱셈과 소인수분해의 어려움을, ECDSA와 Ed25519는 타원곡선의 수학적 특성을 이용하여 이러한 안전성을 제공합니다.


12. 개인키와 공개키의 역할

전자서명에서는 다음처럼 이해하는 것이 가장 정확합니다.

키역할

개인키 서명(Sign)
공개키 검증(Verify)

즉,

개인키
    │
    ▼
전자서명 생성
공개키
    │
    ▼
전자서명 검증

공개키로는 새로운 서명을 만들 수 없습니다.


13. 전체 흐름

클라이언트

원문
 │
 ▼
SHA-256
 │
 ▼
해시
 │
 ▼
개인키로 서명
 │
 ▼
전자서명
 │
 ├───────────────┐
 │               │
 ▼               ▼
원문         전자서명
      서버로 전송
서버

원문
 │
 ▼
SHA-256
 │
 ▼
해시 A

전자서명
 │
 ▼
공개키 검증
 │
 ▼
해시 B

해시 A == 해시 B
        │
        ▼
검증 성공

14. 개발자가 기억해야 할 핵심 비교

구분암호화해시전자서명

목적 비밀 유지 무결성 확인 무결성 + 작성자 인증
복호화 가능 불가능 해당 없음(검증만 수행)
키 사용 암호화키 / 복호화키 없음 개인키(서명), 공개키(검증)
입력 변경 복호화 가능 해시 완전 변경 검증 실패
대표 알고리즘 AES, RSA-OAEP SHA-256, SHA-3 RSA-PSS, ECDSA, Ed25519

15. 가장 쉬운 비유

전자서명을 도장이라고 생각하면 이해하기 쉽습니다.

문서 작성
        │
        ▼
SHA-256 해시 생성
        │
        ▼
문서의 지문(해시값)
        │
        ▼
개인키로 서명(도장 찍기)
        │
        ▼
문서 + 전자서명 전송
        │
        ▼
수신자는 문서를 다시 해시
        │
        ▼
공개키로 서명 검증
        │
        ▼
두 해시가 같으면

✓ 문서가 변경되지 않았음
✓ 개인키 소유자가 서명했음을 확인

핵심 요약

  • 암호화는 데이터를 숨기고 다시 복원하기 위한 기술입니다.
  • 해시는 데이터를 복원할 수 없는 단방향 함수이며, 데이터의 무결성을 확인하는 데 사용됩니다.
  • 전자서명은 문서 자체가 아니라 해시값을 개인키로 서명하는 기술입니다.
  • 공개키는 해시를 만드는 것이 아니라 서명이 올바른지 검증하는 역할을 합니다.
  • 검증 과정에서는 원문에서 새로 계산한 해시전자서명에서 검증된 해시를 비교하여 문서의 변조 여부와 작성자를 확인합니다.

이 원리를 이해하면 HTTPS(TLS), JWT(RS256/ES256), Git 커밋 서명, 코드 서명, 전자계약, 공동인증서 등 대부분의 공개키 기반 보안 기술을 같은 흐름으로 이해할 수 있습니다.