Skip to content

Mokocoder/Gov24_Login_Client

Repository files navigation

정부24 자동 로그인

정부24(Gov.kr) 사이트에 공동인증서를 이용하여 자동 로그인하는 Python 구현체입니다.

개요

공동인증서 기반 정부24 로그인 과정을 재현한 코드입니다. PKCS#7 전자서명과 VID 메시지를 생성하여 서버에 제출하는 방식으로 인증을 수행합니다.

파일 구성

govkr_client.py

  • 정부24 로그인 요청을 담당하는 메인 모듈입니다.
  • 인증서(공개키/개인키)를 이용해 PKCS#7 서명과 VID 메시지를 생성하고 로그인을 시도합니다.

govkr_authenticator.py

  • 서버 측 클라이언트 요청 검증 과정을 시뮬레이션한 모듈입니다.
  • 서명 및 VID 메시지 복호화를 통한 인증 절차를 구현하였습니다.
  • 테스트 목적으로 작성되어 실제 서버 동작과 차이가 있을 수 있습니다.

make_test_cert.py

  • 테스트용 서버 인증서(공개키/개인키)를 생성하는 스크립트입니다.
  • 실제 정부24 서버 인증서가 아닌 데모용 인증서를 생성합니다.

설치

pip install -r requirements.txt

govkr_client.py 사용법

  1. 인증서 준비

    • signCert.der (서명용 공개 인증서)
    • signPri.key (서명용 개인키)
    • svr_cert.der (서버측 암호화 인증서, 미존재 시 자동 수신)
  2. 실행

    python govkr_client.py
  3. 인증서 비밀번호를 입력하면 로그인이 진행됩니다.

  4. 로그인 성공 시 사용자 이름이 출력됩니다.

    사용자 이름: var userNm = "홍길동";
    

govkr_authenticator.py 사용법

  1. 인증서 준비

    • signCert.der (클라이언트 공개 인증서)
    • signPri.key (클라이언트 개인키)
    • test.der (서버측 공개 인증서)
    • test.pem (서버측 개인키)
  2. 실행

    python govkr_authenticator.py
  3. 인증서 비밀번호를 입력하면 검증이 진행됩니다.

  4. 검증 성공 시 다음과 같이 출력됩니다.

    [Server] 서명 검증 성공! original_data = b'Hello GovKR!'
    [Server] VID randomNum = ~~~~~~
    [Server] 최종 검증 완료 - 로그인 허용!
    

구현 내용

로그인 요청 데이터

공동인증서 로그인 시 서버는 서명 정보(xml, pkcs1Msg)와 vidMsg를 요구합니다. 클라이언트는 해당 데이터를 POST 방식으로 전송하며, AnySign과의 웹소켓 통신을 통해 수신하는 vidMsg 구현이 핵심입니다.

서명 생성

서명용 인증서와 개인키를 이용하여 고정 데이터에 대한 PKCS#7 서명을 생성합니다. 생성된 서명은 16진수 문자열로 변환되어 로그인 요청에 포함됩니다.

random_num 추출

개인키 로드 시 DER 디코딩을 통해 내부 구조에 포함된 고유 난수값(random_num)을 추출합니다. VID 메시지 생성 과정에서 ASN.1 DER 인코딩을 적용하여 빈 문자열과 함께 BIT STRING 형식으로 삽입함으로써 메시지의 무결성과 유일성을 보장합니다.

VID 메시지 생성

ASN.1 DER 구조로 빈 문자열과 random_num을 포함하는 메시지를 구성합니다. 이 구조를 SEED/CBC 방식으로 대칭키 암호화하여 암호문을 생성하고, 대칭키는 서버 인증서의 공개키(RSAES-PKCS1-V1_5)로 암호화합니다. 두 암호문을 결합하여 16진수 문자열로 변환한 뒤 전송합니다.

서버 검증 (추정)

수신한 PKCS#7 서명 데이터에서 공개 인증서와 서명을 추출합니다. 서명 유효성 확인 후 vidMsg와 복호화된 random_num을 이용해 2차 검증을 수행합니다.

클라이언트 공개 인증서 정보를 기반으로 DB 또는 세션에 저장된 random_num이나 vidMsg의 nonce를 대조합니다. 값이 일치하면 사용자가 해당 개인키의 실제 소유자임을 확인할 수 있습니다. 서명 검증만으로도 개인키 소유 여부를 판단할 수 있으나, 중간자 공격 방지를 위해 vidMsg를 추가 활용하는 것으로 추정됩니다. (govkr_authenticator.py에는 미구현)

주의사항

  • 본 코드는 학술 연구 및 개인 학습 목적으로만 사용하시기 바랍니다.
  • 상업적 용도로의 사용은 금지됩니다.
  • 정부24 정책 변경에 따라 정상 동작하지 않을 수 있습니다.
  • 무단 사용 또는 부적절한 활용으로 인해 발생하는 문제에 대해 제작자는 책임지지 않습니다.

About

정부24 공동인증서 로그인 구현체입니다

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages