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

대칭키 암호화 알고리즘에서 암복호화에 사용되는 KEY가 무엇을 의미하고 각 알고리즘별로

키길이가 다른 것도 확인한 바 있다.

 

지난번 소스에서 KEY를 예를들어 byte[] KEY= {(byte)0x12 ...}이런식으로 사용하였는데 또다른

방법으로 키를 만들 수 있는 방법은 없을까?

즉 개발자나 사용자가 이해하고 기억하기 쉬운 예를들면 '123456' 같은 숫자나 문자를 KEY로

암호화에 사용할 수는 없는걸까?

 

이렇게 사용자나 개발자가 쉽게 사용할 수 있는 문숫자로 KEY를 만들어 사용하는 방법을

패스워드기반암호화(PBE: Password based Encrytion)라고 한다.

 

내부적인 프로세스는 KEY로 사용될 문자를 받아서 해쉬알고리즘을 통해서 필요한 KEY를 얻게 되는데 

특정 문자가 항상 동일한 결과가 나오는 것을 방지하기 위하여 개발자가 이과정에서 인위적으로

특정값을 입력하여 데이터를 혼탁(scrambling)하게 만드는 과정이 추가된다. 이 인위적인 특정값을

salt로 하고 몇번 혼탁하게 만들지도 개발자가 결정하게 된다.

 

자 그러면 이게부터 "abcd1234"라는 특정 문자가 어떻게 대칭키 알고리즘의 KEY로 사용되는지

소스에서 확인해 보자.

 

import org.bouncycastle.crypto.PBEParametersGenerator;
import org.bouncycastle.crypto.digests.SHA1Digest;

import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.ParametersWithIV;

 

//KEY로 만들 문숫자열

String password = "abcd1234"

 

//8바이트 salt

byte[] SALT = {(byte)0xa1,(byte)0xa2,(byte)0xa3,(byte)0xa4,(byte)0xa5,(byte)0xa6,(byte)0xa7,(byte)0xa8}; 

 

//회전수

int COUNT=2000;

 

//PBE Generator와 해쉬알고리즘, 그리고 PKCS#12에서 정의한 프로세스로 키를 만들겠다고 선언

PBEParametersGenerator peg = new PKCS12ParametersGenerator(new SHA1Digest());

byte[] pass = PBEParametersGenerator.PKCS12PasswordToBytes(password.toCharArray());

 

//혼탁하게 만들고

peg.init(pass, SALT, COUNT);
//128비트 즉 16바이트 키를 만든다.

ParametersWithIV params =  (ParametersWithIV) peg.generateDerivedParameters(128, 128);
KeyParameter kParms = (KeyParameter) params.getParameters();
byte[] KEY =kParms.getKey();

 

이렇게 나온 KEY를 대칭키암호화에 사용한다.

 

BufferedBlockCipher blockcipher = new PaddedBufferedBlockCipher(new SEEDEngine());
blockcipher.init(true, new KeyParameter(KEY));

...

 

나머지 소스는 이전 편을 참조하라.

스크랩:http://blog.paran.com/blog/detail/postBoard.kth?blogDataId=31553399&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 제스트
: