SignedObject
SignedObject (서명된 객체)
무결성이 탐지되지 않고는 훼손될 수 없는 인증된 런타임 객체를 만드는 클래스입니다. SignedObject는 또 다른 직렬화 가능한 객체(서명 대상 객체)와 디지털 서명을 함께 담습니다.
본문
SignedObject는 인증된 런타임 객체를 만들기 위한 클래스입니다. 서명 대상이 되는 Serializable 객체와 디지털 서명을 포함합니다. 서명된 객체의 내용은 수정·직렬화·복사가 가능하며, 무단 변경은 서명 검증 시 반드시 탐지됩니다.
전형적인 서명 과정은 다음과 같습니다. 서명할 데이터를 SignedObject 안에 넣고, 서명자의 개인 키로 서명 과정을 수행합니다. 서명 후 데이터는 유효한 SignedObject가 됩니다.
전형적인 검증 과정은 다음과 같습니다. 검증자는 기대하는 소스에서 수집한 검증자의 공개 키(서명자의 공개 키) 사본을 사용해, 서명과 내용이 지정된 서명자에 의해 만들어진 것인지 일치하는지 확인합니다.
SignedObject가 제공하는 주요 메서드는 다음과 같습니다.
public SignedObject(Serializable object, PrivateKey signingKey, Signature signingEngine)— 서명할 객체, 서명 키, 서명 엔진으로SignedObject를 생성해 서명합니다.public Object getObject()— 서명된 객체(내용)를 역직렬화해 반환합니다.public byte[] getSignature()— 서명 바이트를 복사해 반환합니다.public String getAlgorithm()— 서명에 사용된 서명 알고리즘 이름(예: "SHA256withRSA")을 반환합니다.public boolean verify(PublicKey verificationKey, Signature verificationEngine)— 주어진 공개 키와 서명 엔진으로 서명을 검증합니다. 검증이 성공하면true를 반환합니다.public AlgorithmParameters getParameters()— 서명에 사용된 알고리즘 매개변수를 반환합니다(JDK 21 추가).
내부적으로 객체는 Java 직렬화를 사용하므로 Serializable해야 하며, 직렬화·역직렬화 중 문제가 있으면 IOException·ClassNotFoundException이 발생할 수 있습니다. 이 패키지에서 SignedObject는 S/MIME이나 XML 서명처럼 다른 패키지의 서명 구조를 구현하는 데 사용됩니다.