문제: 전자 서명 후 다시 암호화 하여 전송하는 것을 확인

yessign.EncryptData() 함수를 써서 암호화

저 작업 전에 yessign.PutOtherCert() 함수를 써서 암호화를 위한 인증서를 추가로 넣음

해당 인증서는 PEM형식 ("-----BEGIN CERTIFICATE-----“으로 시작해서 Base64데이터로 된 asn.1 형식 데이터 후 “-----END CERTIFICATE-----“로 종료) 으로 되어있음

1.2.840.113549.1.1.1 (oid rsaEncryption PKCS#1) 으로 된 1024비트 값과

1.2.840.113549.1.1.5 (oid sha1WithRSAEncryption PKCS #1) 으로 된 2048비트 값이 있다.

아무튼 이 키를 이용해서 암호화를 하면 역시나 3082로 시작하는 데이터가 나오는데, 이를 분석해보면 두 가지 값을 가진다.

1.2.840.113549.1.1.1 (oid rsaEncryption PKCS#1) 으로 된 128바이트 값 (=1024비트)

1.2.410.200004.1.4 (seedCBC Korean SEED algorithm, CBC mode) 값으로 “0123456789012345” 값과 16바이트 단위 블럭의 데이터들이 있다.

EncryptData 함수에 들어가는 메시지 길이와 무관하게 128바이트 값은 고정,

16바이트 단위 블러의 데이터 값은 16바이트 단위로 (128비트) 크기에 맞춰 변동.

이를 통해 위 값은 공개키 기반으로 한 암호화 한 데이터가 아닐까, (길이와 관계없이 그냥 암호화했거나, hash를 먹여서 암호화했거나)

아래 값은 SEED-CBC-128 로 암호화 한 것이 아닐까 (IV는 0123456789012345, 키는 알 수 없음)

그런데 처음에 입력 받은 키 값이 두 개가 있다.

1024비트와 2048비트 두 개가 있는데, 설마 개인키가 포함된 파일은 아닐것이다.

아무튼 1024비트 값과 2048비트 값을 둘 다 개별적으로 조작해보았는데, 어느 하나를 조작하더라도 결과로 나오는 128바이트/16바이트블럭 모두 영향을 받는 것으로 확인하였다.

이 값들이 어떻게 영향을 주는 것인지는 두고봐야되는데,

128바이트(1024비트) 고정 값은 해쉬 값이라고 보기에는 좀 길어 보여서 서명 값이 아닌가 추측해볼 수 있다. 하지만 키 값이랑 길이가 맞을지는 해 봐야 알 수 있고,

정작 어떤 데이터를 서명 했는지도 무식하게 대입해 보는 방법 밖에는 없다.

그리고 나머지 SEED-CBC-128로 암호화 한 것으로 보이는 데이터도 원본 키가 어떤 것인지 알 수 없는 문제가 남아있다.

 

(추가: 앞에 PEM형식 인증서에서 128바이트(1024비트)는 RSA암호화용 공개키, 256바이트(2048비트)는 서명이라고 합니다.)

Posted by Parker Falcon