mir.pe (일반/어두운 화면)
최근 수정 시각 : 2024-10-23 11:14:12

전자서명

1. 개요2. 원리3. 공개 키 기반구조4. 다중서명5. 이용
5.1. 코드 서명5.2. TLS5.3. 본인인증 및 부인 방지 수단
6. 관련 문서

1. 개요

전자 서명은 공개키 암호화 방식를 사용하여 본인인증, 혹은 전자문서의 부인 방지를 위해 사용되는 기술이다.

2. 원리

현대에 널리 사용되고 있는 공개키 암호화 알고리즘들 중 상당수(예컨대 RSA와 ElGamal)는 한 가지 독특한 특성을 지니고 있다. 이 알고리즘들을 사용할 때에는 보통 원문을 공개키로 '암호화' 한 다음, 개인키로 '복호화' 하는데, 거꾸로 원문을 개인키로 '복호화'한 다음에 이걸 공개키로 '암호화' 하면 원문을 얻을 수 있다는 특성이 그것이다.[1] 한편, 잘 알려져 있다시피 개인키로 복호화하는 과정은 개인키 없이 사실 상 불가능하며[2], 개인키로 복호화하여 얻어진 데이터로부터 개인키를 거꾸로 얻어낸다든가 하는 것도 사실 상 불가능하다. 이로부터 개인키로 '복호화'된 데이터를 만들 수 있는 것은 그 개인키를 보유하고 있는 자만이 가능하며, 그렇게 개인키로 '복호화'된 내용을 공격자가 원하는 대로 위조할 수 없다는 것을 알 수 있다. 이러한 성질 덕분에 이 개인키로 '복호화'된 데이터의 원문은 개인키 소유자가 굳이 자기 개인키를 써 가며 복호화를 한 다음 배포할 정도로 개인키 소유자가 공인을 보증하는 내용으로 볼 수 있을 것이며, 그렇기에 이 복호화된 내용을 전자서명이라고 부를 수 있을 것이다.[3] 이 데이터를 이제 공개키로 '암호화'하여 누구나 인증된 원문을 얻어낼 수 있을텐데, 이 원문을 이용해서 클라이언트는 다른 전달 받은 내용의 위조 여부를 확인할 수 있다. 가장 대표적인 예는 인증서에 저장된 공개키의 위조 및 변조 유무를 확인하는 것이다. 이때 전자서명의 원문은 공개키와 그 키를 사용하는 도메인, 인증서를 발급 받은 날짜 등의 정보를 가지고 만든 해시값이다. 이 해시값은 인증서를 받은 누구나 인증서에 저장된 내용으로부터 계산해낼 수 있으며, 해시값의 역할 대로 이렇게 얻은 해시값이 전자서명의 원문이 주는 해시값과 다를 경우, 인증서의 내용에 (통신오류로 인한, 혹은 악의적인) 변동이 생겼음을 알아낼 수 있다.

위에서 공개키 암호화 알고리즘들의 예로 RSA와 ElGamal을 들었는데, 이들은 완전한 암복호화 용도로 개발된 것들이다. 그 외에도 순전히 전자서명 만을 위해 개발된 공개키 암호화 방식도 있는데, 대표적인 예가 바로 DSA이다.[4]

3. 공개 키 기반구조

비대칭암호체계.

4. 다중서명

전자서명에 여러 개의 개인 키(private key)가 필요한 전자서명을 멀티시그너처(multisignature), 또는 줄여서 멀티시그(multisig)라고 부른다. 한국어로는 다중서명이라고 번역할 수 있다.

5. 이용

5.1. 코드 서명

프로그램 코드[6]의 무결성을 보증하기 위한 전자서명이다. 주로 프로그램 코드를 해시화하고 이 결과값에 전자서명을 적용하는 방법이 사용된다.

컴퓨터에 프로그램을 설치하려고 하면 대부분 UAC 메시지 박스를 보게 되는데 여기에 표시되는 게시자 정보가 전자서명의 정보이다. 응용 프로그램 뿐만 아니라 시큐어 부팅에도 사용된다. UEFI 운영체제 부트로더의 전자서명을 검사하여 틀리면 부팅을 거부하는 방식으로 작동한다. iOS iPadOS 모바일 운영 체제를 탑재한 제품을 탈옥하는 것이 어려운 이유도 모바일 기기에 시큐어 부팅 기능이 있어 펌웨어 변조가 매우 어렵기 때문이다. 이 제한을 해제하는 것을 부트로더 언락이라고 하는데 제조사가 언락 기능을 공식적으로 제공하지 않는다면 유저가 해킹을 통해 언락해야 한다. 각종 모바일 기기들의 커스텀 펌웨어들은 기본적으로 언락 과정을 거칠 수 있어야 만들어질 수 있다.

모든 개발자가 각자의 전자서명을 발행한다면 이를 모두 선탑재하는 것은 불가능하다. 때문에 TLS처럼 인증기관(CA)의 전자서명만 선탑재하고, 개발자 개인의 전자서명이 인증기관의 인증을 받은 유효한 인증서인지를 검사한다.

그러나 간혹 인증기관이 해킹되거나 부적절하게 인증서를 발급하는 경우도 있으며, 유명 개발자의 개인키가 유출되는 경우[7]도 발생하기 때문에 보안에 민감한 기업에서는 선탑재된 인증기관의 인증서를 사용하지 않고 사설 인증서만을 탑재하여 사용한다.

5.2. TLS

파일:상세 내용 아이콘.svg   자세한 내용은 TLS 문서
번 문단을
부분을
참고하십시오.
TLS에서는 서버 클라이언트간 키 교환을 할 때 서버의 진위여부를 검사하기 위해 서버의 전자서명이 사용된다.

인증기관(CA)으로부터 받은 인증서를 서버에 탑재해두고 클라이언트는 이 전자서명이 유효한지를 검사[8]하고 유효하다면 서버의 전자서명에 포함된 공개키를 사용하여 생성된 비밀번호를 암호화한다.

5.3. 본인인증 및 부인 방지 수단

파일:상세 내용 아이콘.svg   자세한 내용은 전자서명/목록 문서
번 문단을
부분을
참고하십시오.
온라인 상에서 본인인증을 하고, 전자문서의 작성자를 증명하여 작성 사실을 확인하기 위해 사용하는 전자서명기술. 공동인증서(공인인증서)라고 부르는 기술이 여기에 해당한다.

6. 관련 문서


[1] 다만 ElGamal은 원래 암호화와 복호화 방식을 그대로 적용시키지 않고 살짝 변형시킨 것을 써야 한다. 그 변형도 여러가지가 가능하며, DSA를 그 중 하나로 볼 수 있다. [2] 물론 이 말은 보통 유의미한 시간과 (고전적) 연산량 안에 불가능하다는 뜻이다. [3] 이와 같은 특성이 발휘되기 위해선 물론 개인키 소유자가 충분한 공신력을 갖추고 있어야 한다. 인증기관 (Certificate Authority; CA) 같은 곳이 그 대표적인 예이다. [4] 여기서 정수 연산을 타원곡선 기반 연산으로 바꾸면 (다만 그대로는 힘들고 약간 바꾼 모양이어야 한다) ECDSA가 나온다. 사실 정수 연산을 타원곡선 연산으로 바꾸면 어지간한 이산로그 문제 기반 공개키 암호화 기법들, 즉 디피-헬만, ElGamal, DSA 등을 모두 타원곡선 기반 알고리즘으로 바꿀 수 있다. [5] 국제전기통신연합 전기통신표준화부문, International Telecommunication Union Telecommunication Standardization Sector [6] EXE, DLL, APK, IPA 파일 등 [7] 악성코드인 스턱스넷에 유출된 Realtek의 키가 사용되기도 했다. [8] 선탑재된 인증기관의 인증서를 통해 검사한다.

분류