전자서명의 개념부터 디지털 서명과의 차이, 공개키 기반 구조(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, 웹훅 검증 등 현대적인 웹 서비스에서는 이러한 개념이 다양한 형태로 활용됩니다.
'실무개발' 카테고리의 다른 글
| Spring Boot REST API 예외 처리 ExceptionHandler 완벽 정리 (0) | 2026.07.19 |
|---|---|
| HTTP 요청 메서드 GET POST PUT PATCH DELETE 차이점 완벽 정리 (0) | 2026.07.19 |
| REST API HTTP 상태 코드 제대로 사용하는 방법 (0) | 2026.07.17 |
| JSON 응답 구조 표준화하는 방법과 API 설계 팁 (1) | 2026.07.17 |
| REST API 응답 형식 ResponseEntity 사용법 총정리 (0) | 2026.07.16 |
