개발관련/암호화 2009. 12. 31. 15:42

지금부터는 대칭키 암호화에 관련하여 지난번에 소개한 소스에 대한 설명을 하도록 하겠다.
SEED 알고리즘으로 암호화한 샘플에서 맨 먼저 주목해야 할 부분은 키(KEY)부분이다.

 

byte[] key = {(byte)0x01,(byte)0x02,(byte)0x03,(byte)0x04,(byte)0x05,(byte)0x06,(byte)0x07,(byte)0x08,
             (byte)0x09,(byte)0x10,(byte)0x11,(byte)0x12,(byte)0x13,(byte)0x14,(byte)0x15,(byte)0x16}; 
      
대칭키 암호화 알고리즘은 암호화에 사용한 키와 복호화에도 동일하게 사용하게 되는데 중요한 것은
키의 길이다.

 

SEED 알고리즘은 키의 길이를 128비트(16바이트)를 사용한다. 키의 길이가 128비트라는 이야기는 암호화된
키를 찾아내기 위해서는 2의 128승의 키 중에서 하나를 찾는 작업인데 불가능하지는 않지만 오랜 노력과
시간이 필요하다는 것을 의미한다.

 

과거에 만들어진 DES 알고리즘의 경우 키의 길이가 64비트(8바이트)였다. 전산 환경의 발달은 2의 64승의
연산은 굳이 슈퍼 컴퓨터를 통하지 않더라고 키를 알아내는데 그다지 긴 기간이 필요하지 않기 때문에 현대에
만들어진 대칭키 알고리즘은 128비트 256비트 등 긴 키 길이를 지원한다.

 

키길이가 길면 길수록 암호화의 속도는 떨어지기 때문에 128비트의 키길이가 현재 수준에서 가장 적정하다고
받아들여지고 있다.

 

중요 알고리즘별 키길이는 다음과 같다.

- SEED: 128비트
- DES: 64비트
- Blowfish:64비트
- TripleDES(DESede): 192비트
- AES: 128, 192. 256 비트

 

국내간에는 SEED가 보편적으로 사용되지만 외국기관간 암호화 통신에는 아직도 DES와 TripleDES을 많이 사용하기
때문에 우선 암호화할 알고리즘이 결정되면 거기에 맞는 키길이로 키를 만들어 주어야 한다.

즉 SEED 알고리즘에서는 128비트 이지만 만약 다른 알고리즘으로 암호화한다고 했을 때
위에 정의한 키의 길이는 8바이트로 만들어 주고 다음과 같이 알고리즘을 호출해 주어야 한다.


//DES시 8바이트 키설정 및 알고리즘 선언
byte[] key = {(byte)0x01,..};
...
PaddedBufferedBlockCipher blockcipher = new PaddedBufferedBlockCipher(new DESEngine());


//TripleDES시 24바이트 키설정 및 알고리즘 선언
byte[] key = {(byte)0x01,..};
...
PaddedBufferedBlockCipher blockcipher = new PaddedBufferedBlockCipher(new DESedeEngine());

//AES시 16 또는 24 또는 32 바이트 키설정 및 알고리즘 선언
byte[] key = {(byte)0x01,..};
...
PaddedBufferedBlockCipher blockcipher = new PaddedBufferedBlockCipher(new AESEngine());

 

그 이후에 나머지 소스는 동일하다.

스크랩:http://blog.paran.com/blog/detail/postBoard.kth?blogDataId=28779104&pmcId=javacipher&totalCount=13&preViewPage=0&ajaxPage=1&preFBlogId=35385570&preLBlogId=27788506&pageStyle=null&myCateId=0&yearMonth=null&rDay=null&style=Board&p_eye=

posted by 제스트
: