티스토리 뷰

개발/보안

SEED256 for JAVA

hihoyeho 2014. 11. 10. 21:34

SEED란 한국인터넷진흥권에서 개발한 암호 알고리즘입니다.

현재까지 1999년에 개발된 128비트, 2009년에 개발된 256비트가 존재하고 있죠.

또한 양방향(대칭) 알고리즘으로 주민등록번호나 전화번호, 계좌번호 같은 복호화가 필요한 데이터를 암호화하는데 사용할 수 있습니다.


이번에 프로젝트를 하며, 상사로부터 SEED 256비트로 암호화를 진행하라는 지령을 받고, SEED256에 대해 알아보기 시작했습니다. 우선 KISA 사이트에 들어가서 SEED256 Java버전을 내려받고 진행하면 되겠지 했는데..

왠걸... KISA에서는 C로 짜여진 SEED256만 지원하는 것입니다.. 또한, 구글링을 해봐도 국산 암호화라 그런지 SEED256으로 만들어진 Java에 대한 자료는 찾을 수가 없었죠.



KISA의 자료실에서 제공하는 소스코드....

SEED 256 JAVA가 존재하지 않습니다.



다행히 C로 짜여진 버전은 존재하니 C 버전으로 된 소스를 그대로 사용하고, Java에서 Process 객체를 사용하여 외부프로그램 실행을 통해 암호화를 할까 생각도 해봤지만, 위험부담이 커서 결국은 C로 된 소스를 Java로 변환하는 작업을 진행하였습니다.


이 글에서는 본인처럼 SEED 256 Java버전이 필요한 개발자를 위해 소스코드와 함께 사용법에 대해 공유하고자 합니다.


먼저 KISA에서 제공해 주는 소스는 바로 사용하기에는 무리가 있습니다.

KISA 소스의 예제를 보면 암호화되어야 할 문자는 항상 16byte여야 하기 때문에

암호화 되어야 할 문자가 16byte보다 작으면 Ansi X.923 Padding을 이용해서 16byte로 만들어서 암호화하고,

16byte가 넘어가면 16byte씩 자르고 마지막에 모자란 byte를 역시 Ansi X.923 Padding을 이용해서 16byte를 만드는 방법으로 가야 합니다.


이렇게 만들어진 소스의 핵심 함수는 다음 두 함수입니다.

1. Encrypt(String password)

2. Decrypt(String hash)


Encrypt 함수의 역활은 전달받은 매개변수를 암호화하여 Hash값을 리턴하고,

Decrypt 함수는 Encrypt 함수를 사용하여 만들어진 Hash값을 다시 원래의 매개변수로 복호화합니다.


암&복호화를 위해 소스코드 중 다음 Key부분을 각자 원하는 값으로 수정해야 합니다.

여기서 중요한 점은 Key는 꼭 32자가 되어야 한다는 것입니다.

1
private static String Key = "01234567890123456789012345678901";
cs

마지막으로 테스트를 해보죠.

1
2
3
4
5
6
7
8
9
public static void main (String args[]) {
     String str = "010-4333-xxxx";
        
     System.out.println ("## original : "+str);
     str = Encrypt(str);
     System.out.println ("## encrypt : "+str);
     str = Decrypt (str);
     System.out.println ("## decrypt : "+str);
}
cs

결과는 다음과 같습니다.
## original : 010-4333-xxxx
## encrypt : db2ccabe597f5fbbea3be02947691786
## decrypt : 010-4333-xxxx





마지막으로..


소스는 Gibhub에 올려놓도록 하겠습니다.

필요에 따라 각자 환경에 맞춰서 수정 후 사용하는 것이 좋겠죠?

- Gibhub URL : https://github.com/leeinuk/Seed256/tree/master/Seed256/src

참고로 암호화는 매우 신중해야 하는 작업이므로,

사용하기 전에 꼭 많은 테스트와 검증을 거쳐서 시스템에 적용해 보도록 합시다. 꼭!! 

(진지함.. 궁서체임..)


* 소스 사용으로 생기는 문제에 대한 책임은 전적으로 본인에게 있음을 명심합시다.



최근에 올라온 글
Total
Today
Yesterday
링크