안드로이드 4.4 버전의 SecretKeyFactory API 변경 사항
2013년 12월 19일 목요일
하지만, 안드로이드 4.4 부터는 SecretKeyFactory 의 동작 방식에 약간의 변경이 생겼습니다. 만일 여러분의 어플리케이션이 다음과 같은 조건에 해당한다면, 해당 변화로 인해 킷캣 버전에서는 어플리케이션이 정상적으로 동작하지 않을 수 있습니다. 바로 지금 확인해 보시길 바랍니다.
- 대칭키를 생성하기 위하여 SecretKeyFactory 를 사용하고,
- 키 생성 알고리즘으로 PBKDF2WithHmacSHA1 알고리즘이 사용되며,
- 패스워드로 유니코드 문자열을 사용 가능한 경우
때문에, 킷캣에서는 이전 버전과의 호환성을 유지하기 위하여 캐릭터 비트 데이터의 앞 쪽 8비트 만을 사용하는 암호키 생성 알고리즘 - PBKDF2WithHmacSHA1And8bit 을 추가 하였습니다. 유니코드를 지원하는 패스워드를 사용하고, PBKDF2WithHmacSHA1 알고리즘을 사용하고 계셨던 분들은 하위 호환성을 위해 기존 코드를 다음과 같이 수정하셔야합니다.
import android.os.Build; SecretKeyFactory factory; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // Use compatibility key factory -- only uses lower 8-bits of passphrase chars factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1And8bit"); } else { // Traditional key factory. Will use lower 8-bits of passphrase chars on // older Android versions (API level 18 and lower) and all available bits // on KitKat and newer (API level 19 and higher). factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); }