전자서명이란? 개발자가 반드시 알아야 할 개념과 구현 방식 정리

전자서명의 개념부터 디지털 서명과의 차이, 공개키 기반 구조(PKI), 서명 생성 및 검증 과정, 개발 시 주의사항까지 개발자가 반드시 알아야 할 전자서명 핵심 내용을 실무 관점에서 정리했습니다.

전자서명 개념과 구현 방식 설명

전자계약, 본인인증, API 인증, 금융 서비스, 공공 시스템을 개발하다 보면 전자서명(Electronic Signature) 이라는 용어를 자주 접하게 됩니다.

하지만 많은 개발자가 전자서명과 디지털 서명을 같은 의미로 이해하거나, 단순히 암호화 기술 정도로 생각하는 경우가 많습니다.

실제로는 전자서명은 법적인 개념이고, 디지털 서명은 이를 구현하는 대표적인 기술입니다. 이 차이를 이해하면 인증 시스템, JWT, SSL/TLS, 전자계약, 공인 인증 등 다양한 보안 기술을 훨씬 쉽게 이해할 수 있습니다.

이번 글에서는 전자서명의 개념부터 동작 원리, 구현 방식, 개발자가 반드시 알아야 할 핵심 내용을 실무 중심으로 정리합니다.


전자서명이 필요한 이유

온라인 환경에서는 종이에 직접 서명할 수 없습니다.

따라서 다음과 같은 내용을 증명할 수 있어야 합니다.

  • 누가 작성했는가
  • 중간에 내용이 변경되지 않았는가
  • 작성자가 나중에 부인할 수 없는가

전자서명은 이러한 문제를 해결하기 위해 사용됩니다.

대표적인 활용 사례는 다음과 같습니다.

사용 분야활용 예시

전자계약 계약서 서명
금융 인터넷뱅킹 인증
전자세금계산서 발행자 검증
JWT 토큰 위변조 방지
Git Commit Signature
모바일 앱 앱 무결성 검증
API Request Signature

전자서명과 디지털 서명의 차이

가장 많이 혼동하는 부분입니다.

전자서명디지털 서명

법적 개념 기술적 구현 방식
전자 문서의 서명 공개키 암호화를 이용한 서명
다양한 방식 존재 PKI 기반 암호 기술
법률에서 정의 암호학에서 정의

즉,

전자서명이라는 큰 개념 안에 디지털 서명이 포함됩니다.

예를 들어

  • 이름 입력
  • 체크박스 동의
  • OTP 인증
  • 공동인증서
  • 간편인증

모두 전자서명에 해당할 수 있습니다.

반면 디지털 서명은 공개키 암호화를 이용한 방식만 의미합니다.


전자서명의 핵심 구성 요소

실무에서는 대부분 다음 요소를 함께 사용합니다.

1. Hash 함수

원본 데이터를 일정한 길이의 값으로 변환합니다.

대표 알고리즘

  • SHA-256
  • SHA-384
  • SHA-512

예시

원본

Hello World

↓

SHA256

a591a6d40bf420404a011733cfb7b190...

전체 파일을 서명하지 않고 Hash 값을 서명하는 이유는 속도가 훨씬 빠르기 때문입니다.


2. 개인키(Private Key)

서명을 생성하는 키입니다.

반드시 본인만 보관해야 합니다.

Document

↓

SHA256

↓

Private Key

↓

Signature

3. 공개키(Public Key)

서명을 검증하는 데 사용됩니다.

상대방은 공개키만 있으면 진위 여부를 확인할 수 있습니다.

Document

↓

SHA256

↓

Public Key

↓

Verify Signature

4. 인증서(Certificate)

공개키가 실제 사용자 것임을 보증합니다.

대표적으로

  • X.509
  • SSL 인증서
  • 공동인증서

등이 있습니다.


전자서명 동작 과정

전자서명의 전체 흐름은 다음과 같습니다.

문서 작성

↓

SHA256 Hash 생성

↓

Private Key로 Hash 서명

↓

Signature 생성

↓

문서 + Signature 전달

↓

수신자가 Hash 계산

↓

Public Key로 Signature 검증

↓

Hash 일치 여부 확인

Hash가 동일하면

  • 문서 변경 없음
  • 작성자 확인 완료

라는 의미가 됩니다.


개발자가 이해해야 하는 핵심 원리

전자서명은 문서를 암호화하는 기술이 아닙니다.

많은 초보 개발자가 다음처럼 오해합니다.

전자서명 = 암호화

하지만 실제는

암호화

기밀성(Confidentiality)

↓

전자서명

무결성(Integrity)
인증(Authentication)
부인방지(Non-repudiation)

즉 목적이 다릅니다.


전자서명 생성 예시

예를 들어

계좌번호
금액
수신인

정보가 있다고 가정해 보겠습니다.

{
 amount:10000,
 account:"123-456"
}

Hash 생성

SHA256(document)

Hash 값

8f72ab...

Private Key로 서명

RSA Sign(Hash)

생성 결과

Signature

전송

Document

+

Signature

수신자는 동일한 Hash를 계산합니다.

Hash가 다르면

중간에 데이터가 변경된 것입니다.


Java에서 전자서명 예제

Java에서는 java.security.Signature 클래스를 이용할 수 있습니다.

Signature signature = Signature.getInstance("SHA256withRSA");

signature.initSign(privateKey);

signature.update(data.getBytes());

byte[] sign = signature.sign();

검증

Signature verify = Signature.getInstance("SHA256withRSA");

verify.initVerify(publicKey);

verify.update(data.getBytes());

boolean result = verify.verify(sign);

실무에서는 RSA 외에도 ECDSA(타원 곡선 기반) 알고리즘이 성능과 키 크기 측면에서 많이 사용됩니다.


Spring Boot에서는 어디에 사용될까?

Spring Boot 프로젝트에서도 전자서명은 다양한 곳에 적용됩니다.

대표적인 사례는 다음과 같습니다.

  • JWT Access Token
  • OAuth2
  • OpenID Connect
  • Apple 로그인
  • 카카오 로그인
  • 네이버 로그인
  • 결제 API 요청 검증
  • 웹훅(Webhook) 검증
  • 파일 무결성 확인

JWT 역시 Payload를 암호화하는 것이 아니라, 서명을 통해 위변조 여부를 확인하는 구조입니다.


실무에서 자주 사용하는 알고리즘

알고리즘특징

RSA 가장 많이 사용
ECDSA 짧은 키, 높은 성능
Ed25519 최근 많이 사용되는 고속 알고리즘
SHA256withRSA 가장 일반적인 조합
SHA512withRSA 높은 보안 수준
ES256 JWT에서 많이 사용

최근에는 클라우드 서비스와 최신 보안 라이브러리에서 Ed25519 지원이 확대되고 있으며, 성능과 보안성을 이유로 채택 사례가 늘고 있습니다.


개발 시 반드시 주의해야 할 점

개인키는 절대 서버 코드에 포함하지 않는다

Git 저장소에 업로드하는 실수가 자주 발생합니다.

반드시

  • HSM
  • KMS
  • Secret Manager
  • 환경 변수

등을 이용해 관리해야 합니다.


Hash 알고리즘은 SHA-256 이상 사용

다음 알고리즘은 더 이상 권장되지 않습니다.

  • MD5
  • SHA-1

충돌 공격 가능성이 알려져 있기 때문입니다.


인증서를 검증해야 한다

공개키만 확인해서는 충분하지 않습니다.

반드시

  • 만료 여부
  • 신뢰할 수 있는 CA인지
  • 폐기(CRL, OCSP) 여부

등도 확인해야 합니다.


서명과 암호화를 혼동하지 않는다

실무에서 가장 많이 발생하는 오해입니다.

기능목적

암호화 내용 숨김
전자서명 위변조 방지
Hash 무결성 확인

자주 묻는 질문(FAQ)

Q1. 전자서명과 전자 인증은 같은 의미인가요?

아닙니다. 전자 인증은 사용자의 신원을 확인하는 과정이고, 전자서명은 데이터의 작성자와 무결성을 증명하는 기술 또는 법적 개념입니다.

Q2. JWT는 암호화된 토큰인가요?

대부분의 JWT는 암호화되지 않습니다. 일반적으로 Base64URL로 인코딩된 데이터에 디지털 서명을 추가하여 위변조를 방지합니다. 민감한 정보를 숨기려면 별도의 암호화(JWE 등)가 필요합니다.

Q3. HTTPS만 사용하면 전자서명이 필요 없나요?

아닙니다. HTTPS는 전송 구간을 보호하고, 전자서명은 데이터 자체의 무결성과 작성자 증명을 제공합니다. 둘은 서로 보완적인 역할을 합니다.

Q4. RSA와 ECDSA 중 무엇을 선택해야 하나요?

기존 시스템과의 호환성이 중요하면 RSA가 무난합니다. 성능과 짧은 키 길이를 원한다면 ECDSA가 좋은 선택이며, 최신 환경에서는 Ed25519도 많이 고려됩니다.


마무리

전자서명은 단순히 문서에 서명하는 기능이 아니라 무결성(Integrity), 인증(Authentication), 부인 방지(Non-repudiation) 를 보장하는 핵심 보안 기술입니다.

개발자라면 전자서명과 디지털 서명의 차이를 이해하고, 공개키 기반 구조(PKI), 해시 함수, 개인키·공개키의 역할을 정확히 구분할 수 있어야 합니다. 특히 JWT, OAuth2, 전자계약, 결제 API, 웹훅 검증 등 현대적인 웹 서비스에서는 이러한 개념이 다양한 형태로 활용됩니다.