전자서명에서 서명은 암호 기술을 사용해 이루어집니다. 구체적으로는 공개 키 암호화 기법을 기반으로 합니다. 이 과정은 크게 두 단계로 나뉩니다: 서명 생성과 서명 검증.
1. 서명 생성
서명자는 다음과 같은 방식으로 전자서명을 생성합니다:
- 해시 함수 적용: 먼저, 서명할 데이터(문서)를 해시 함수에 입력하여 고정된 길이의 해시 값을 생성합니다. 해시 함수는 데이터가 조금만 변해도 완전히 다른 해시 값을 생성하는 특징을 가지고 있습니다.
- 서명 생성: 서명자는 자신의 개인 키를 사용해 이 해시 값을 암호화하여 서명을 생성합니다. 이 암호화된 해시 값이 바로 전자서명입니다.
2. 서명 검증
문서를 수신한 사람(검증자)은 서명을 다음과 같은 과정으로 검증합니다:
- 해시 값 재생성: 수신한 문서에 대해 같은 해시 함수를 사용해 해시 값을 생성합니다.
- 서명 복호화: 서명자가 제공한 전자서명을 서명자의 공개 키를 사용해 복호화합니다. 이 복호화된 값은 원래 서명자가 서명할 때 사용한 해시 값이어야 합니다.
- 비교: 재생성한 해시 값과 서명에서 얻은 해시 값을 비교합니다. 이 두 값이 같다면 서명이 유효하며, 문서가 변경되지 않았음을 확인할 수 있습니다.
요약
전자서명은 데이터의 무결성을 보장하고, 서명자가 누구인지 확인하는 방법으로 사용됩니다. 이 과정에서 사용되는 개인 키와 공개 키는 암호화 기술의 핵심 요소로, 개인 키는 비밀로 유지되고, 공개 키는 자유롭게 배포됩니다. 이를 통해 문서의 출처와 변경 여부를 검증할 수 있습니다
시값(Hash Value)은 데이터를 고정된 크기의 고유한 문자열로 변환한 결과물입니다. 해시 함수(Hash Function)는 이 변환을 수행하는 알고리즘을 의미합니다. 해시 함수는 입력 데이터의 크기나 종류에 관계없이 항상 동일한 길이의 해시값을 생성합니다.
해시값의 주요 특징
- 고정된 길이: 입력 데이터의 크기에 상관없이 해시값은 항상 고정된 길이입니다. 예를 들어, 입력 데이터가 1MB이든 1KB이든 해시값의 길이는 일정합니다. (예: SHA-256 해시 함수는 항상 256비트 길이의 해시값을 생성합니다.)
- 고유성: 서로 다른 입력 데이터는 서로 다른 해시값을 생성합니다. 이 말은 해시값이 서로 다르면 원래 데이터도 다르다는 것을 의미합니다.
- 변경 불가성: 입력 데이터의 내용이 조금이라도 바뀌면 전혀 다른 해시값이 생성됩니다. 이를 **'Avalanche 효과'**라고 합니다.
- 일방향성: 해시값에서 원래의 입력 데이터를 역으로 계산해내는 것은 거의 불가능합니다. 이는 암호학적으로 매우 중요한 특성입니다.
해시값의 사용 예
- 데이터 무결성 검증: 파일 전송 시 파일이 중간에 변조되지 않았는지 확인하기 위해 원본 파일의 해시값과 전송받은 파일의 해시값을 비교할 수 있습니다.
- 암호화 및 전자서명: 전자서명에서 원본 데이터를 해시로 변환한 후 서명을 생성해 데이터의 무결성과 출처를 검증합니다.
- 비밀번호 저장: 시스템에서 비밀번호를 직접 저장하지 않고, 비밀번호의 해시값만을 저장함으로써 보안을 강화할 수 있습니다.
왜 해시값은 복호화할 수 없을까?
- 일방향성: 해시 함수는 설계상 일방향성(One-Way)을 가지고 있습니다. 즉, 해시값에서 원래 데이터를 역으로 찾는 것이 수학적으로 매우 어렵거나 사실상 불가능합니다. 이 특성 덕분에 해시 함수는 암호학적 응용, 특히 비밀번호 저장이나 데이터 무결성 검사에 매우 유용합니다.
- 정보 손실: 해시 함수는 입력 데이터를 고정된 길이의 해시값으로 변환합니다. 입력 데이터가 아무리 길어도 해시값은 일정한 길이로 제한됩니다(예: SHA-256의 경우 256비트). 이 과정에서 원래 데이터의 일부 정보가 소실되기 때문에, 해시값만으로 원래 데이터를 복원하는 것은 불가능합니다.
- 충돌 회피: 해시 함수는 일반적으로 충돌 회피성을 가지고 있습니다. 이는 서로 다른 두 개의 입력 데이터가 같은 해시값을 생성할 가능성이 매우 낮다는 것을 의미합니다. 이런 특성 덕분에 해시값을 보고 원래 데이터를 추론하는 것은 어렵습니다.
'네트워크' 카테고리의 다른 글
[HTTP완벽가이드] OpenSSL (0) | 2024.08.15 |
---|---|
[HTTP완벽가이드] HTTPS 관련 질문 (0) | 2024.08.15 |
[HTTP완벽가이드] 프락시 (0) | 2024.07.11 |
[HTTP완벽가이드] 응답엔터티 (0) | 2024.07.10 |
[HTTP완벽가이드] Docroot (0) | 2024.07.10 |