Key
Key (키 인터페이스)
모든 키(Key) 객체의 최상위 인터페이스로, 모든 키가 공유하는 기능을 정의합니다. 모든 키는 알고리즘(Algorithm), 인코딩된 형태(Encoded Form), 형식(Format)이라는 세 가지 특징을 가집니다.
본문
Key는 java.security 패키지에서 모든 키를 나타내는 최상위 인터페이스이며 Serializable을 상속합니다. PublicKey, PrivateKey 등이 이 인터페이스의 하위 인터페이스입니다.
먼저 **알고리즘(Algorithm)**은 해당 키가 사용하는 키 알고리즘입니다. 보통 DSA나 RSA 같은 암호화·비대칭 연산 알고리즘을 말하며, 해당 알고리즘과 관련 알고리즘(MD5 with RSA, SHA-1 with RSA, Raw DSA 등)에서 함께 사용됩니다. 알고리즘 이름은 getAlgorithm() 메서드로 얻습니다.
다음으로 **인코딩된 형태(Encoded Form)**는 JVM 외부에서 키의 표준 표현이 필요할 때(예: 다른 상대에게 키를 전송할 때) 사용하는 외부 인코딩 형태입니다. X.509 SubjectPublicKeyInfo나 PKCS#8 같은 표준 형식으로 인코딩되며, getEncoded() 메서드가 이를 반환합니다. SubjectPublicKeyInfo의 ASN.1 타입 문법과 RFC 5280에 대한 자세한 내용은 공식 명세를 참고합니다.
마지막으로 **형식(Format)**은 인코딩된 키의 형식 이름입니다. getFormat() 메서드로 얻을 수 있습니다.
키는 일반적으로 키 생성기(key generator), 인증서(certificate), 키 저장소(key store) 등 키를 관리하는 클래스를 통해 얻습니다. 또한 키 팩토리(KeyFactory)를 통해 키 명세(KeySpec)로부터 얻을 수도 있습니다. 직렬화 표현으로는 KeyRep을 사용하는 것이 좋으며, 직렬화된 키는 민감한 정보를 포함할 수 있으므로 신뢰되지 않은 환경에서는 노출하지 않아야 합니다.
이 인터페이스가 제공하는 공통 메서드는 다음과 같습니다.
public String getAlgorithm()— 키의 표준 알고리즘 이름을 반환합니다.public byte[] getEncoded()— 키를 기본 인코딩 형식으로 반환하며, 인코딩을 지원하지 않으면null을 반환합니다.public String getFormat()— 키의 기본 인코딩 형식 이름을 반환하며, 인코딩을 지원하지 않으면null을 반환합니다.