전자서명
Digital signature · 디지털 서명
은 개인키로 데이터에 대한 검증 가능한 값을 만들고 공개키로 그 관계를 확인하는 기술이다. 서명 검증 성공과 공개키 소유자의 신뢰성·문서 의미·행위의 적법성은 서로 다른 판단이다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 메시지 변조를 검출한다.
- 개인키 보유자와 서명된 데이터의 관계를 검증한다.
- 인증서 발급·소프트웨어 배포·프로토콜 인증을 뒷받침한다.
02어떤 순서로 동작하나
- 바이트 확정
문서나 핸드셰이크의 정확한 바이트와 서명 문맥을 정한다. 공백·줄바꿈·직렬화가 바뀌면 다른 입력이 된다.
- 서명값 생성
검증된 으로 개인키와 메시지를 처리한다. 서명을 단순히 개인키로 평문을 암호화하는 일로 일반화하지 않는다.
- 공개키 신뢰 확인
인증서 경로·이름·용도 등으로 검증에 사용할 공개키의 적합성을 확인한다.
- 서명 검증
같은 메시지 바이트와 스킴·공개키로 검증한 뒤 결과를 해당 문맥에만 적용한다. 서명된 프로그램의 모든 행위가 안전하다고 결론 내리지는 않는다.
03먼저 알아둘 용어와 구성요소
- 개인키로 서명값을 생성하는 주체.
- 공개키와 원문으로 서명 관계를 검사하는 주체.
- 해시·인코딩·난수·검증 절차를 정의한 전체 방식.
- 서명·키 관리·증거 절차를 통해 행위의 책임을 입증하려는 속성.
- 메시지를 서명용으로 인코딩하고 연산으로 서명·검증하는 표준 스킴.
- 서명 검증에 사용하는 공개키로 신뢰할 주체와 연결되어야 한다.
RSA 과제의 modulus와 서명 입력 바이트 읽기
modulus를 공개키 전체와 혼동하지 않고, 공개키 추출·서명·검증을 서로 다른 작업으로 구분한다.
실습 구성과 전제
- 의 교육용 키 또는 자신이 만든 폐기 가능한 실습 키만 사용한다.
- 작업 폴더에 키와 메시지를 분리해 저장하고 실제 운영 개인키는 가져오지 않는다.
과제가 요구하는 값을 구분한다
- 공개키에는 modulus n과 공개 지수 e가 필요하다. modulus의 16진수 문자열만 저장한 파일은 일반적인 PEM 공개키 파일이 아니다.
- 문제는 modulus 문자열을 구한 다음 그 문자열에 서명하라고 요청한다. 키를 암호화하는 작업이나 modulus 자체를 공개키 인증서로 바꾸는 작업이 아니다.
shellopenssl rsa -in lab-private.pem -modulus -noout openssl pkey -in lab-private.pem -pubout -out lab-public.pem자신의 폐기 가능한 실습 키에서 modulus를 조회하고 공개키를 추출한다.
원본 크기로 보기 ↗- 화면은 개인 RSA 키를 교육용 입력으로 주고 modulus의 16진수 표현과 서명을 각각 요구한다.
- BEGIN PRIVATE KEY 표시는 PEM 컨테이너의 시작이며, 답안 입력칸 두 개는 서로 다른 결과물을 받는다.
확인 기준n만 추출한 파일과 공개키 PEM 파일을 이름부터 다르게 관리한다.
서명할 메시지의 바이트를 고정한다
- 과제가 정한 16진수 대소문자·접두사·개행 포함 여부를 먼저 확인한다. 보이는 글자가 같아도 마지막 LF가 있으면 해시 입력이 달라진다.
- 서명은 개인키로 수행하고 검증은 공개키로 수행한다. 는 생성된 서명 바이트를 답안에 넣기 쉬운 문자열로 바꾸는 표현이다.
shellopenssl dgst -sha256 -sign lab-private.pem -out signature.bin message.txt openssl dgst -sha256 -verify lab-public.pem -signature signature.bin message.txt메시지 파일을 중간에 수정하지 않고 서명·검증한다. 사진의 개인키 값은 재사용하지 않는다.
확인 기준서명 검증이 실패하면 키 쌍과 함께 메시지 파일의 실제 바이트를 비교한다.
키 소유 증명과 신원 신뢰를 나눈다
- 서명이 맞다는 것은 해당 공개키에 대응하는 개인키가 사용됐다는 증거다. 그 키가 누구의 것인지는 별도의 신뢰 관계가 필요하다.
- 인증서 체인은 공개키를 이름·용도·기간과 묶는다. 서명 과제와 인증서 검증 도해는 서로 다른 단계의 비교 자료다.
원본 크기로 보기 ↗- 서버 인증서 위에 Intermediate CA와 Root CA가 연결돼 있다.
- 오른쪽에는 서버 이름·유효기간·용도·폐기 상태가 따로 나열되어, 서명 확인만으로 검증이 끝나지 않음을 보여 준다.
확인 기준서명 성공을 곧바로 서버 신뢰 성공으로 보고하지 않는다.
실습에서 확인한 동작 원리
- modulus는 공개키의 한 구성 요소다.
- 서명은 메시지의 정확한 바이트와 키 쌍에 의존한다.
04예제로 따라가기
- 서명된 문서의 한 바이트가 바뀌면 원래 서명과 일치하지 않는다.
- CA는 인증서의 TBSCertificate 부분에 서명하여 주체 공개키와 확장 정보의 관계를 보증한다.
- CertificateVerify는 인증서 전송 자체와 달리 핸드셰이크 문맥에 서명하여 해당 개인키 소유를 증명한다.
05혼동하기 쉬운 점과 확인 기준
- 는 키 유출 뒤 누가 서명을 만들었는지 구분하기 어려우므로 개인키 관리와 폐기 상태가 중요하다.
- 공개키의 출처를 검증하지 않고 서명 수학만 맞추면 임의로 만든 키의 서명도 성공할 수 있다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.