공개해 주신 hwpx 파일포맷을 바탕으로 암호화된 hwpx 파일을 읽어보려고 합니다.
질문에 앞서 제가 이해한 내용을 적어봅니다.
공개한 hwpx 파일 포맷 문서와 OASIS opendocument 1.2을 바탕으로 제가 추측한 복호화 순서입니다.
- StartKey을 생성
a. 입력된 암호문자열에 UTF-8 바이트순열을 구함.
b. a의 결과 바이트 순열을 SHA-256 방식으로 hash 코드를 구함
c. b의 결과 얻어지는 32 bytes 코드를 StartKey로 지정함 - 암호화 키를 생성함
a. 초기 암호로 StartKey(32bytes 바이트순열) 을 넣고,
b. Manifest.xml에서 정보를 얻어서 salt, 반복횟수을 넣고
c. PBKDF2(HMac, SHA1)을 통해 키 생성
d. c의 결과 얻어지는 32 bytes 코드를 암호키로 지정함 - 암호키를 가지고 복호화
a. 암호키(32bytes 바이트순열)을 넣고,
b. Manifest.xml에서 정보를 얻어서 Init-Vector을 넣고
c. AES_256/CBC/NOPadding으로 암호화된 내용을 복호화함 - Inflate 압축 해제
a. 복호화 바이트 순열을 Inflate 압축해제함
이렇게 처리 했는데… 원하는 결과가 나오지 않아서 힌트를 얻기 위해 질문을 드립니다.
- 암호화된 HWPX은 한컴의 기술적인 요소(Private Key, 인증서 등등) 없이 읽을 수 있는지 ??
- 위에 추측한 순서나 내용이 맞는지 ??
- 제가 의심하는 부분은 StartKey을 구하는 부분인데…
a. Manifest.xml에 “<odf:start-key-generation start-key-generation - name=“XML-Signature Syntax and Processing” key-size=“32”/>”
이런 정보가 있는데. "xmldsig#sha256"이 알고리즘이 위에 제가 적은 내용과 동일한 것이지 ??
이상입니다.