XML 서명

Adobe AIR 1.5 이상

XML 서명은 XML 구문으로 표시되는 디지털 서명입니다. XML 서명의 데이터를 사용하면 서명된 정보를 서명한 이후 변경하지 않았음을 확인할 수 있습니다. 또한 신뢰할 수 있는 인증 기관에서 서명 인증서를 발급한 경우 서명자의 신원은 공용 키 인프라를 통해 확인할 수 있습니다.

XML 서명은 모든 형식의 디지털 데이터(이진 또는 XML 형식)에 적용할 수 있습니다. XML 서명은 일반적으로 다음과 같은 용도로 사용됩니다.

  • 외부 또는 다운로드한 리소스를 수정했는지 여부 확인

  • 알 수 있는 소스에서 가져온 메시지인지 확인

  • 응용 프로그램 사용권 또는 구독 권한의 유효성 검사

지원되는 XML 서명 구문

AIR에서는 XML 서명 구문 및 처리를 위한 W3C 권장 사항의 다음과 같은 요소를 지원합니다.

  • 모든 핵심 서명 구문 요소(W3C 권장 사항 문서의 4항) - 단, KeyInfo 요소는 완전히 지원되지 않습니다.

  • KeyInfo 요소는 X509Data 요소만 포함해야 합니다.

  • X509Data 요소는 X509Certificate 요소만 포함해야 합니다.

  • SHA256 다이제스트 메서드

  • RSA-SHA1(PKCS1) 서명 알고리즘

  • "주석 없는 정규 XML" 정규화 메서드 및 변형

  • 엔벌로프된 서명 변형

  • 타임스탬프

다음 문서에서는 일반적인 XML 서명을 보여 줍니다. 대부분의 암호화 데이터는 간단한 예제를 위해 제거되었습니다.

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> 
    <SignedInfo> 
        <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> 
        <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 
        <Reference URI="URI_to_signed_data"> 
            <Transforms> 
                <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>            </Transforms> 
            <DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> 
            <DigestValue>uoo...vY=</DigestValue> 
        </Reference> 
    </SignedInfo> 
    <SignatureValue>Ked...w==</SignatureValue> 
    <KeyInfo> 
        <X509Data> 
            <X509Certificate>i7d...w==</X509Certificate> 
        </X509Data> 
    </KeyInfo> 
</Signature>

서명의 주요 요소는 다음과 같습니다.

  • SignedInfo - 서명한 때의 서명된 데이터 및 계산된 다이제스트 값에 대한 참조를 포함합니다. 서명된 데이터 자체는 XML 서명과 동일한 문서에 포함될 수 있으며 외부 요소일 수 있습니다.

  • SignatureValue - 서명자의 개인 키를 사용하여 암호화된 SignedInfo 요소의 다이제스트를 포함합니다.

  • KeyInfo - 서명 인증서는 물론 신뢰 체인을 설정하는 데 필요한 추가 인증서도 포함합니다. 기술적으로는 KeyInfo 요소는 선택 사항이지만 이 요소가 포함되어 있지 않으면 서명의 유효성을 검사할 수 없습니다.

다음과 같은 세 가지 일반적인 XML 서명 유형이 있습니다.

  • 엔벌로프된 서명 - 서명이 서명하는 XML 데이터 내부에 삽입됩니다.

  • 엔벌로프 중인 서명 - 서명된 XML 데이터가 Signature 요소 내의 Object 요소 내에 포함됩니다.

  • 분리된 서명 - 서명된 데이터가 XML 서명의 외부 요소입니다. 서명된 데이터가 외부 파일에 있을 수 있습니다. 또는 Signature 요소의 부모 또는 자식 요소가 아닌 서명과 동일한 XML 문서에 있을 수 있습니다.

XML 서명은 URI를 사용하여 서명된 데이터를 참조합니다. 서명 및 유효성 검사 응용 프로그램은 이러한 URI를 확인하는 데 동일한 규칙을 사용해야 합니다. XMLSignatureValidator 클래스를 사용할 때 IURIDereferencer 인터페이스의 구현을 제공해야 합니다. 이러한 구현이 URI를 확인하고 서명된 데이터를 ByteArray 객체로 반환합니다. 반환된 ByteArray 객체는 서명의 다이제스트를 생성한 동일한 알고리즘을 사용하여 다이제스트됩니다.

인증서 및 신뢰

인증서는 공개 키, 식별 정보, 인증 발급 기관에 속한 하나 이상의 인증서로 구성되어 있습니다.

두 가지 방법을 사용하여 인증서의 신뢰를 설정할 수 있습니다. 물리적 미디어에서 또는 SSL 트랜잭션과 같은 안전한 디지털 전송을 통해 서명자에게서 직접 인증서 복사본을 얻어 신뢰를 설정할 수 있습니다. 또한 인증 기관을 통해 서명 인증서의 신뢰 여부를 확인할 수 있습니다.

인증 기관을 이용하려면 서명의 유효성을 검사하는 컴퓨터에서 신뢰할 수 있는 기관에서 서명 인증서를 발급해야 합니다. 대부분의 운영 체제 제조업체는 많은 인증 기관의 루트 인증서를 운영 체제 신뢰 저장소에 보관합니다. 또한 사용자는 저장소에서 인증서를 추가 및 제거할 수 있습니다.

신뢰할 수 있는 인증 기관에서 인증서를 발급한 경우에도 인증서가 신뢰할 수 있는 사람에 속하는지 여부를 결정해야 합니다. 대부분의 경우 최종 사용자가 이러한 결정을 내려야 합니다. 예를 들어 AIR 응용 프로그램이 설치되어 있는 경우 AIR 설치 프로그램에서는 응용 프로그램 설치를 원하는지 여부를 사용자가 확인하도록 요청할 때 게시자 인증서의 식별 정보를 표시합니다. 다른 경우 공개 키 또는 기타 인증서 정보를 허용되는 키 목록과 비교해야 할 수 있습니다. 이러한 목록은 변경되지 않도록 자체 서명을 사용하거나 AIR로 암호화된 로컬 저장소에 저장하여 보안을 유지해야 합니다.

참고: 서명이 "자체 서명"된 경우와 같이 독립적인 확인 없이 서명 인증서를 신뢰하도록 선택할 수 있는 경우에는 서명을 확인하여 중요한 사항을 많이 확인할 수는 없습니다. 서명을 만든 사람을 모르는 경우 서명이 변경되지 않았다는 확인 자체는 그리 중요하지 않습니다. 서명이 유효하게 서명된 위조일 가능성이 있습니다.

인증서 만료 및 해지

모든 인증서는 만료됩니다. 또한 인증서는 인증서와 관련된 개인 키가 손상되거나 도난당한 경우 인증 발급 기관에 의해 해지될 수 있습니다. 만료되거나 해지된 인증서를 사용하여 서명을 서명한 경우 해당 서명은 타임스탬프가 서명의 일부로 포함되지 않으면 유효하지 않은 서명으로 보고됩니다. 타임스탬프가 있는 경우 XMLSignatureValidator 클래스는 인증서가 서명 시 유효한 경우 서명의 유효성을 검사합니다.

타임스탬프는 데이터가 특정 시간 및 날짜에 서명되었음을 인증하는 타임스탬프 서비스의 서명된 디지털 메시지입니다. 타임스탬프는 타임스탬프 기관에 의해 발급되고 타임스탬프 기관의 자체 인증서에 의해 서명됩니다. 타임스탬프가 유효한 것으로 간주되려면 현재 시스템에서 타임스탬프에 포함된 타임스탬프 기관 인증서를 신뢰해야 합니다. XMLSignatureValidator는 타임스탬프의 유효성을 검사할 때 사용할 다른 인증서를 지정하는 데 API를 제공하지 않습니다.