제가 국가 암호 공모전에 참여하며 암호를 사용하기 위해 JCE를 사용하기도 하고 직접 구현해보기도 했습니다. 프로그래밍에 암호를 사용하면서 느낀 점은 '이거 암호 처음 쓰는 사람한테는 어렵겠다' 였습니다. 지도 교수님께서도 자신이 암호학 수업 때 암호를 사용하여 프로그램을 만들어 보라는 과제를 낸적이 있는데 사용 방법이 너무 어렵고 헷갈려 대부분이 포기했다는 것입니다. 특히 국산암호는 자료가 없어 더욱 힘이 들다는 것이었습니다. 알면 사용하기 쉬울수 있어도 처음 사용하는 사람에게는 어려울 수 있겠다. 누구나 쉽고 간단하게 사용할 수 있는 JAVA 라이브러리 를 개발하고 싶다. 그것이 바로 제가 RagwortCrypto를 만든 계기가 되었습니다.
- 암호화 알고리즘 :
AES(128, 192, 256) - ECB, CBC, CTR
Triple DES(64, 128) - ECB, CBC, CTR
ARIA(128, 192, 256) - ECB
LEA(128, 192, 256) - ECB, CBC, CTR
HIGHT(64) - ECB
SEED(128) - ECB
- 해시함수 알고리즘 :
SHA(SHA-1, SHA-2)
MD5
LSH(256, 512)
- 암호 알고리즘
import cryp.sym.*;
import cryp.sym.AES;
- 해시함수 알고리즘
import cryp.hash.*;
import cryp.hash.SHA;
AES aes = new AES();
SHA sha = new SHA();
- ECB 모드
cipher = aes.enc(plain, key);
plain = aes.dec(cipher, key);
- CBC, CTR 모드
cipher = aes.enc(plain, key, "CBC", iv);
plain = aes.dec(cipher, key, "CBC", iv);
- 해시함수
- byte[] 형
byte[] plain = { ... };
결과값 저장 변수 = sha.sha1(plain);
- String 형
String plain = "hello";
결과값 저장 변수 = sha.sha1(plain);
byte[] 형이 들어가면 byte[]형이 리턴되고 String형이 들어가면 String형이 리턴됩니다 !
- 키 설정
byte[] key = new byte[16]; -> 128bit 키
byte[] key = new byte[24]; -> 192bit 키
byte[] key = new byte[32]; -> 256bit 키
트리플 데스의 특성상 3개의 키가 필요 !
byte[] key_des = {
(byte)0x00, (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, (byte)0x05, (byte)0x06, (byte)0x07, //첫번째 키
(byte)0x08, (byte)0x09, (byte)0x0a, (byte)0x0b, (byte)0x0c, (byte)0x0d, (byte)0x0e, (byte)0x0f, //두번째 키
(byte)0x08, (byte)0x09, (byte)0x0a, (byte)0x0b, (byte)0x0c, (byte)0x0d, (byte)0x0e, (byte)0x0f //세번째 키
}; //Triple DES에서 사용될 키 3개
https://github.com/OzRagwort/RagwortCrypto/blob/master/com/main/cryp_test.java
장원영 : [email protected]