공인인증서 관련 아시는 개발자분들 있으신가요?

알림
|
X

페이지 정보

작성자 no_profile gudtkdml 223.♡.163.105
작성일 2024.07.30 11:10
289 조회
0 추천
쓰기

본문

공인인증서로 홈택스에 로그인하는 것을 개발중입니다.

외부 공인인증서 모듈? 을 어떻게 구해야 할지 몰라 간단히 자체 개발중입니다.


공개키 개인키가 바이너리 구조인데

C# 기본 어셈블리로는 개인키를 읽어오기가 너무 복잡하고 어렵네요.

Bouncy castle도 연구중인데.. 진도가 안나갑니다.

공개키는 간단해도 개인키 읽어오고 하는데서

캐스팅 문제나 이것저것 예외가 너무 많이 발생합니다.

그렇다고 하나하나 이해하기 위해

공인인증서 구조를 공부하려니 너무 복잡하고 방대하고 힘드네요.

시간낭비 느낌..


어떤 방향으로 나아가야할까요?


1. 오래걸려도 스크래핑 툴 유지보수를 위해 마스터한다.

2. 그냥 외부툴 써라

만약 외부 공인인증서 모듈을 사용하면 서명까지도 바로 되나요?

만약 구매 혹은 테스트하고 싶다면 어떻게 구해야 하는지도 알려주십쇼.


댓글 6 / 1 페이지

ToToRo님의 댓글

작성자 ToToRo (106.♡.129.165)
작성일 07.30 13:42

규링님의 댓글

작성자 규링 (170.♡.228.34)
작성일 07.30 14:02
공인인증서.. NPKI면 전자정부 프레임워크 이용하여서 로그인 하는 것을 말씀하시는 것일까요?
요즘은 GPKI라고 하던가.. 왠지 전자정부 프레임워크 이용하시는 거에 대한 이야기 같아보입니다.

자근자근님의 댓글

작성자 자근자근 (211.♡.102.233)
작성일 07.30 14:38
1. 공인인증서는 RSA 를 이용한 전자서명입니다. 국제 표준이죠. 같이 제공하는 인증서 까지도 표준으로 만들어져 있으니 사용에 큰 문제가 없으실 겁니다.

2. 키가 문제인데,, 구조 자체는 pkcs#8 표준으로 구성되어 있습니다.
다만 비밀번호로 실제 rsa 비밀키를 가져올 때 국내 암호화 기술(SEED)로 되어 있으며 random num 이라는 존재 때문에 pkcs 8 라이브러리로 바로 가져오긴 힘들 수 있고, asn.1 을 직접 파싱하면서 복호화를 하셔야할 수 있습니다.
KISA 에선 포맷에 대한 문서도 제공하고 있습니다.
https://rootca.kisa.or.kr/kcac/down/TechSpec/2.3-Encryption Algorithm Scheme Specification.pdf

https://www.rootca.or.kr/kcac/down/TechSpec/1.5-Subscriber Identification Based on Virtual ID.pdf

3. 즉 대강 아래의 순서로 이루어집니다.
a. signPri.key 파일을 asn.1 파서로 읽습니다. 기본적으론 pkcs8 구조를 따릅니다.
root 하위로 encrypted_data, encryption_algorithm 로 구성되어 있습니다.

b. 암호화 알고리즘(encryption_algorithm.algorithm)은
Key Generation with SHA1 and Encryption with SEED CBC mode (1.2.410.200004.1.4, 1.2.410.200004.1.15) 혹은 pbes2 (1.2.840.113549.1.5.13) 로 이루어져 있습니다.
(각 방법에 대한 세부 구현은 생략)

c. b의 각 방법에 따라 key, iv 를 구하여 SEED-CBC 알고리즘으로 encrypted_data 를 디코딩하여 rsa private 키를 획득합니다.

d. 디코딩한 private key 에는 대부분은 사용하지 않지만 표준이긴 한 추가 attributes (oid: 1.2.410.200004.10.1.1.3)를 통해 random number 가 포함되어 있습니다. 다른 포맷으로 변환 저장하면 사라지니 이 시점에서 같이 추출해줍니다.

e. 이제 rsa private key 를 획득하였습니다, 이제 표준 방식(패딩: PKCS1v15, 해시함수: SHA256)으로 로그인 과정에서 필요한 서명을 진행하시면 됩니다. 이 부분은 다른 공개된 라이브러리를 사용하셔도 어려움 없이 진행가능하실 겁니다.


4. 이러한 과정을 모듈로 판매하는 회사가 있는진 잘 모르겠습니다. 직접 외주를 맡기셔서 개발할 수는 있을 것 같네요.

자근자근님의 댓글의 댓글

대댓글 작성자 자근자근 (211.♡.102.233)
작성일 07.30 14:45
@자근자근님에게 답글 좀 더 요약하면,
1. signPri.key - (복호화) → RSA private key + random num (pkcs8, asn.1, SEED 에 대한 지식 필요)
2. rsa 서명
입니다.

SEED 암호화 라이브러리만 구하신다면,, asn.1 은 조금 공부하시면 해결하실 수 있을겁니다.
처음 접하면 좀 귀찮긴 한데.... 이것도 보통 라이브러리가 있으니까요.

gudtkdml님의 댓글의 댓글

대댓글 작성자 no_profile gudtkdml (223.♡.163.105)
작성일 07.30 16:38
@자근자근님에게 답글 으아.. 엄청 방대하군요. 정성스러운 댓글 너무 감사합니다!

크로롱크로롱님의 댓글

작성자 크로롱크로롱 (138.♡.22.101)
작성일 07.30 16:49
20년전에 이쪽 작업 한적이 있는거 같은데 늙어 기억이 안납니다만, 업체에서 API를 무료로 제공했던걸로 기억합니다.
쓰기
홈으로 전체메뉴 마이메뉴 새글/새댓글
전체 검색