개념 사전 · 개념

전자서명

Digital signature · 디지털 서명

은 개인키로 데이터에 대한 검증 가능한 값을 만들고 공개키로 그 관계를 확인하는 기술이다. 서명 검증 성공과 공개키 소유자의 신뢰성·문서 의미·행위의 적법성은 서로 다른 판단이다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 메시지 변조를 검출한다.
  • 개인키 보유자와 서명된 데이터의 관계를 검증한다.
  • 인증서 발급·소프트웨어 배포·프로토콜 인증을 뒷받침한다.

02어떤 순서로 동작하나

  1. 바이트 확정

    문서나 핸드셰이크의 정확한 바이트와 서명 문맥을 정한다. 공백·줄바꿈·직렬화가 바뀌면 다른 입력이 된다.

  2. 서명값 생성

    검증된 으로 개인키와 메시지를 처리한다. 서명을 단순히 개인키로 평문을 암호화하는 일로 일반화하지 않는다.

  3. 공개키 신뢰 확인

    인증서 경로·이름·용도 등으로 검증에 사용할 공개키의 적합성을 확인한다.

  4. 서명 검증

    같은 메시지 바이트와 스킴·공개키로 검증한 뒤 결과를 해당 문맥에만 적용한다. 서명된 프로그램의 모든 행위가 안전하다고 결론 내리지는 않는다.

03먼저 알아둘 용어와 구성요소

개인키로 서명값을 생성하는 주체.
공개키와 원문으로 서명 관계를 검사하는 주체.
해시·인코딩·난수·검증 절차를 정의한 전체 방식.
서명·키 관리·증거 절차를 통해 행위의 책임을 입증하려는 속성.
메시지를 서명용으로 인코딩하고 연산으로 서명·검증하는 표준 스킴.
서명 검증에 사용하는 공개키로 신뢰할 주체와 연결되어야 한다.
LEARN THROUGH PRACTICE

RSA 과제의 modulus와 서명 입력 바이트 읽기

modulus를 공개키 전체와 혼동하지 않고, 공개키 추출·서명·검증을 서로 다른 작업으로 구분한다.

실습 구성과 전제

  • 의 교육용 키 또는 자신이 만든 폐기 가능한 실습 키만 사용한다.
  • 작업 폴더에 키와 메시지를 분리해 저장하고 실제 운영 개인키는 가져오지 않는다.
  1. 과제가 요구하는 값을 구분한다

    • 공개키에는 modulus n과 공개 지수 e가 필요하다. modulus의 16진수 문자열만 저장한 파일은 일반적인 PEM 공개키 파일이 아니다.
    • 문제는 modulus 문자열을 구한 다음 그 문자열에 서명하라고 요청한다. 키를 암호화하는 작업이나 modulus 자체를 공개키 인증서로 바꾸는 작업이 아니다.
    shell
    openssl rsa -in lab-private.pem -modulus -noout
    openssl pkey -in lab-private.pem -pubout -out lab-public.pem

    자신의 폐기 가능한 실습 키에서 modulus를 조회하고 공개키를 추출한다.

    WebGoat RSA 키 과제원본 크기로 보기 ↗
    • 화면은 개인 RSA 키를 교육용 입력으로 주고 modulus의 16진수 표현과 서명을 각각 요구한다.
    • BEGIN PRIVATE KEY 표시는 PEM 컨테이너의 시작이며, 답안 입력칸 두 개는 서로 다른 결과물을 받는다.
    확인 기준

    n만 추출한 파일과 공개키 PEM 파일을 이름부터 다르게 관리한다.

  2. 서명할 메시지의 바이트를 고정한다

    • 과제가 정한 16진수 대소문자·접두사·개행 포함 여부를 먼저 확인한다. 보이는 글자가 같아도 마지막 LF가 있으면 해시 입력이 달라진다.
    • 서명은 개인키로 수행하고 검증은 공개키로 수행한다. 는 생성된 서명 바이트를 답안에 넣기 쉬운 문자열로 바꾸는 표현이다.
    shell
    openssl dgst -sha256 -sign lab-private.pem -out signature.bin message.txt
    openssl dgst -sha256 -verify lab-public.pem -signature signature.bin message.txt

    메시지 파일을 중간에 수정하지 않고 서명·검증한다. 사진의 개인키 값은 재사용하지 않는다.

    확인 기준

    서명 검증이 실패하면 키 쌍과 함께 메시지 파일의 실제 바이트를 비교한다.

  3. 키 소유 증명과 신원 신뢰를 나눈다

    • 서명이 맞다는 것은 해당 공개키에 대응하는 개인키가 사용됐다는 증거다. 그 키가 누구의 것인지는 별도의 신뢰 관계가 필요하다.
    • 인증서 체인은 공개키를 이름·용도·기간과 묶는다. 서명 과제와 인증서 검증 도해는 서로 다른 단계의 비교 자료다.
    인증서 체인 · 인증서 체인은 왜 필요한가원본 크기로 보기 ↗
    • 서버 인증서 위에 Intermediate CA와 Root CA가 연결돼 있다.
    • 오른쪽에는 서버 이름·유효기간·용도·폐기 상태가 따로 나열되어, 서명 확인만으로 검증이 끝나지 않음을 보여 준다.
    확인 기준

    서명 성공을 곧바로 서버 신뢰 성공으로 보고하지 않는다.

실습에서 확인한 동작 원리

  • modulus는 공개키의 한 구성 요소다.
  • 서명은 메시지의 정확한 바이트와 키 쌍에 의존한다.
관련 개념·전체 실습 화면 이어서 읽기 →
동작·명령 참고 문서

04예제로 따라가기

  • 서명된 문서의 한 바이트가 바뀌면 원래 서명과 일치하지 않는다.
  • CA는 인증서의 TBSCertificate 부분에 서명하여 주체 공개키와 확장 정보의 관계를 보증한다.
  • CertificateVerify는 인증서 전송 자체와 달리 핸드셰이크 문맥에 서명하여 해당 개인키 소유를 증명한다.

05혼동하기 쉬운 점과 확인 기준

  • 는 키 유출 뒤 누가 서명을 만들었는지 구분하기 어려우므로 개인키 관리와 폐기 상태가 중요하다.
  • 공개키의 출처를 검증하지 않고 서명 수학만 맞추면 임의로 만든 키의 서명도 성공할 수 있다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.