패스워드 기반 암호화(PBE : Password-Based Encryption)
1 설명
가) 패스워드를 키로 사용하는 방법
나) 키 스페이스가 TripleDES나 Blowfish보다 훨씬 작아 안전하지 못함
다) 사전공격에 취약함
라) 해쉬와 일반적인 대칭 암호화를 사용함
마) 미리 패스워드 해쉬 목록을 만들어 놓고 복호화 할 수 있음
바) salting와 iteration counts를 도입하여 보안성 강화
2 방법
가) 패스워를 MD5로 해쉬를 구한 다음 이 값을 암호화 키 값으로 사용한다.
3 Salt
가) 패스워드를 해쉬하기 전에 랜덤값을 추가하여 키 스페이스를 늘린다.
나) salt는 암호문과 함께 저장된다.
다) 복호화할 때는 암호화된 데이터로부터 salt를 분리해야 한다.
라) salt는 매번 다르게 생성되며 동일한 문장에 대해서도 다른 값이 생성된다.
4 Iteration count
가) 해쉬의 횟수를 의미함
나) Iteration count가 1000이면 1000번을 해쉬한다는 의미
5 암호화/복호화 방법
가) 패스워드와 salt를 생성하여 보통문서를 암호화하고 생성된salt를 암호문서 앞에 붙인다.
나) 암호화된 데이타를 salt와 암호문서로 나누어 패스워드와 salt로 암호 문서를 복호화 한다.
6 주요 클래스 사용법
가) PBEKeySpec : SecretKeyFactory의 인스턴스를 이용해서 패스워드기반 키를 생성한다.
char[] password = “iloveyou”.toCharArry(); PBEKeySpec keySpec = new PBEKeySpec(password) |
나) SecretKeyFactory : PBEKeySpec을 실제 키로 사용하기 위해 generateSecret()를 실행시켜 줘야 한다.
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(“PBEWithShAAndTwoFish-CBC”); SecretKey theKey = keyFactory.generateSecret(keySpec); |
다) PBEParameterSpec : salt와 interation count를 위한 레퍼런스
PBEParameterSpec paramSpec = new PBEParameterSpec(salt, iterations); Cipher cipher = Cipher.getInstance(“PBEWithShAAndTwoFish-CBC”); Cipher.init(Cipher.ENCRYPT_MODE, theKey, paramSpec); |
7 PBE 알고리즘
가) PBEWithMD5AndDES
나) PBEWithSHAAndBlowfish
다) PBEWithSHAAnd128BitRC4
라) PBEWithSHAAndDEA-CBC
마) PBEWithSHAAnd3-KeyTripleDES-CBC
8 PBE 예제
import java.util.Random; import javax.crypto.Cipher; import com.Ostermiller.util.Base64; public class PBE { private static int ITERATIONS = 1000; } |
'소프트웨어 > java암호화' 카테고리의 다른 글
[암호화] 인증(Authentication)과 전자서명 (0) | 2013.09.06 |
---|---|
[암호화]블록 암호화 Padding (0) | 2013.09.06 |
[암호화] 비대칭암호화 - RSA 파일 암호화 (0) | 2013.09.06 |
[암호화] 대칭 암호화 - 기본암호화 / Blowfish를 이용한 암호화 (0) | 2013.09.06 |
[암호화] JCA & JCE (0) | 2013.09.06 |