KeyFactory

KeyFactory (키 팩토리)

키(불투명한 암호 키, Key)를 키 명세(기저 키 자료의 투명 표현, KeySpec)로 변환하거나 그 반대로 변환하는 데 사용하는 클래스입니다. 키 팩토리는 양방향으로 동작합니다.

출처: Java API Reference

본문

KeyFactory는 키 명세에서 불투명한 키 객체를 만들거나, 키 객체의 기저 키 자료를 적절한 형식으로 꺼내는 역할을 합니다. 같은 키에 대해 호환되는 키 명세가 여럿 존재할 수 있습니다. 예를 들어 DSA 공개 키는 DSAPublicKeySpec이나 X509EncodedKeySpec으로 명시될 수 있으며, 키 팩토리는 호환되는 키 명세 사이를 변환해줍니다.

사용 예를 들어보면, Bob이 인코딩된 공개 키와 디지털 서명을 보냈을 때 Alice는 다음과 같이 서명을 검증할 수 있습니다.

X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey);
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
Signature sig = Signature.getInstance("DSA");
sig.initVerify(bobPubKey);
sig.update(data);
sig.verify(signature);

Java 플랫폼의 모든 구현은 DiffieHellman, DSA, RSA 표준 KeyFactory 알고리즘을 지원해야 합니다. 이 알고리즘들은 Java Security Standard Algorithm Names 명세의 KeyFactory 섹션에 설명되어 있습니다.

KeyFactory가 제공하는 주요 메서드는 다음과 같습니다.

  • public static KeyFactory getInstance(String algorithm) — 지정된 알고리즘의 키를 변환할 KeyFactory 객체를 반환합니다. 등록된 보안 프로바이더 목록을 가장 선호하는 프로바이더부터 탐색합니다.
  • public static KeyFactory getInstance(String algorithm, String provider) — 지정된 프로바이더에서 알고리즘을 지원하는 KeyFactory를 반환합니다.
  • public static KeyFactory getInstance(String algorithm, Provider provider) — 주어진 Provider 객체를 사용해 KeyFactory를 반환합니다.
  • public final Provider getProvider() — 이 키 팩토리 객체의 프로바이더를 반환합니다.
  • public final String getAlgorithm() — 이 KeyFactory와 연관된 알고리즘의 이름을 가져옵니다.
  • public final PublicKey generatePublic(KeySpec keySpec) — 제공된 키 명세(키 자료)로부터 공개 키 객체를 생성합니다.
  • public final PrivateKey generatePrivate(KeySpec keySpec) — 제공된 키 명세(키 자료)로부터 개인 키 객체를 생성합니다.
  • public final <T extends KeySpec> T getKeySpec(Key key, Class<T> keySpec) — 주어진 키 객체의 명세(키 자료)를 반환합니다. keySpec은 키 자료를 반환할 명세 클래스를 나타냅니다.
  • public final Key translateKey(Key key) — 프로바이더를 알 수 없거나 신뢰할 수 없는 키 객체를 이 키 팩토리의 키 객체로 변환합니다.

지정된 알고리즘을 지원하는 프로바이더가 없으면 NoSuchAlgorithmException, 알고리즘이 null이면 NullPointerException이 발생할 수 있습니다.

더 알아보기 (Learn more)

Java 공식 API