른록노트
[SEED] 암호화 java -> javascript 본문
@ 개요
KISA 홈페이지에 SEED (ECB 모드) 암호화 할 수 있는 파일이 java버전으로 제공되고있었는데
이걸 node.js에서 사용해야하는일이 발생했다
java를 node에서 사용할 수 있는 방법은
2가지 방법인데, 하나는 child process (직접 실행), java 모듈을 이용하여 import해서 사용하는 방법이 있다.
처음엔 java 모듈로 사용하였는데, 그냥 실행하면 잘 되지만,
node 모듈 중에 worker_threads를 같이 사용하면 java 모듈이 사용되지 않았다.
그리고 자바를 실행시키는것은 성능에 좋지 않을것 같고 이러한 이유로
javascript에서 seed를 구현해야겠다고 생각했다
그래도 다행히 누군가 javascript로 구현해 놓은 소스를 발견하였다.
하지만 KISA에서 제공한 java 소스 파일과 결과가 애매하게 불일치 하였다.
그래서 소스를 확인해보니 java에선 byte 사이즈를 16배수로 제한하고 나머지 부분을(패딩) KISA에서 정한 방법으로
채워주는데, javascript 소스에선 이 부분이 없었다. 그래서 javascript소스를 java처럼 수정해주었다.
첫번째, 평문을 만들때, 평문의 길이를 16byte 배수로 맞춰주고 java와 같은 size가 되도록 수정해주었다.
두번째, 평문을 hex로 바꾸면 첫번째에서 작업한 내용 때문에 평문의 나머지 공간이 다 00으로 채워져있다, 이걸 KISA에서 정한 패딩방법으로 똑같이 채워주었다. (java - Common.set_byte_for_int)
마지막, 암호문을 decrypt 할때 두번째 작업을 반대로 해주는 작업을 해주었다. (java - Common.set_byte_for_int)
KISA 홈페이지 (seed.kisa.or.kr/kisa/algorithm/EgovSeedInfo.do)
seed crypto-js (github.com/tomyun/crypto-js)
@ 소스코드
seed crypto-js를 fork하여 수정 (github.com/eunbok/crypto-js/tree/seed)
소스 수정한 부분 (github.com/eunbok/crypto-js/commit/4e319e8ede57a838ba501a60f7fbd4ef5dc7e3eb)