'PKI' 카테고리의 다른 글
[C / openssl] 공인인증서 개인키 추출 및 RSA 구조체로 변환하기 (2) | 2016.09.08 |
---|---|
openssl rsa 키 생성 테스트 (1) | 2016.01.01 |
[OpenSSL] Convert RSA Structure to PEM (0) | 2014.12.16 |
[C / openssl] 공인인증서 개인키 추출 및 RSA 구조체로 변환하기 (2) | 2016.09.08 |
---|---|
openssl rsa 키 생성 테스트 (1) | 2016.01.01 |
[OpenSSL] Convert RSA Structure to PEM (0) | 2014.12.16 |
Windows 10 기준으로,
C:\Program Files\NPKI\yessign\USER 디렉토리를 보면 공인인증서가 있습니다.
signCert.crt / signPri.key
signPri.key에서 개인키를 추출하고 RSA구조체로 변환할 것입니다.
1. SEED 대칭키 / IV 구하기
1) 개인키 파일에서 salt와 iteration 값을 추출합니다. PKCS#8 규격에 맞춰서 추출합니다.
# 8바이트 salt 추출하기 (20번째 바이트에서 8바이트 추출)
BYTE bySalt[8] = { 0, };
memcpy_s(bySalt, 8, (BYTE*)byFileBuffer + 20, 8);
# iteration 값 추출하기 (30번째 바이트에서 2바이트 추출)
WORD wIteration = _byteswap_ushort(*((WORD*)byFileBuffer + 15));
빅 엔디언을 리틀 엔디언으로 변경해줍니다.
2) KEY와 IV만들기
공인인증서 개인키는 SEED-CBC-128로 암호화되어 있습니다.
복호화할 KEY와 IV를 PBKDF1규격에 따라 만듭니다.
공인인증서 패스워드에 salt를 붙인다음 iteration 값 만큼 SHA1하며, 최종 값에서 첫 16바이트를 KEY로 사용합니다.
최종 HASH값에서 뒤 4바이트를 잘라낸 뒤 SHA1하여 DIV를 만듭니다. DIV에서 앞 16바이트를 잘라서 IV로 사용합니다.
2. SEED로 개인키 복호화
1에서 구한 키와 IV로 SEED-CBC-128 복호화하면 ASN.1 DER형태의 바이너리가 나옵니다.
복호화 할 오프셋은 파일의 36번째부터 끝까지입니다.
3. RSA 구조체로 변경하기
ASN.1을 PKCS8 구조체로 변환 후 RSA구조체로 변환합니다.
4. 개인키로 평문 암호화
전자서명(pkcs#7)과 전자봉투 (0) | 2019.12.22 |
---|---|
openssl rsa 키 생성 테스트 (1) | 2016.01.01 |
[OpenSSL] Convert RSA Structure to PEM (0) | 2014.12.16 |
개인키 생성
openssl genrsa -out privatekey.pem 1024
개인키 정보 출력
openssl rsa -in privatekey.pem -text -out private.txt
modulus : 00을 제외하고 128개, 128*8 = 1024bit
prime1, prime2 : 00을 제외하고 64개, 64*8 = 512bit
modulus(N) = prime1(P) * prime2(Q)
공개키 : publicExponent(65537), N
개인키 : privateExponent(D), N
exponent1 : D mod (P-1)
exponent2 : D mod (Q-1)
coefficient : (inverse of Q) mod P
공개키 생성
openssl pkey -in privatekey.pem -pubout -out publickey.pem
공개키 정보 출력
openssl pkey -in privatekey.pem -text_pub
64비트 키 검증
http://www.mathpapa.com/algebra-calculator.html 로 계산 가능
Private-Key: (64 bit)
modulus: 00:c6:cf:f1:d2:1c:ba:3d:bb publicExponent: 65537 (0x10001) privateExponent: 0f:04:29:c9:88:d9:02:61 prime1: 3825875939 (0xe40a3be3) prime2: 3744484937 (0xdf304e49) exponent1: 553066949 (0x20f721c5) exponent2: 2212512545 (0x83e04321) coefficient: 2971090683 (0xb1173efb) |
p * q = modulus = 14325934824416231424 (C6CFF1D21CBA3DBB)
전자서명(pkcs#7)과 전자봉투 (0) | 2019.12.22 |
---|---|
[C / openssl] 공인인증서 개인키 추출 및 RSA 구조체로 변환하기 (2) | 2016.09.08 |
[OpenSSL] Convert RSA Structure to PEM (0) | 2014.12.16 |
RSA 구조체를 PEM으로 변환하는 방법입니다.
파일 혹은 버퍼로 저장할 수 있습니다.
전자서명(pkcs#7)과 전자봉투 (0) | 2019.12.22 |
---|---|
[C / openssl] 공인인증서 개인키 추출 및 RSA 구조체로 변환하기 (2) | 2016.09.08 |
openssl rsa 키 생성 테스트 (1) | 2016.01.01 |