XML 서명

XML Signature

XML 서명(XMLDSig, XML-DSIG, XML-Sig라고도 함)은 디지털 서명에 대한 XML 구문을 정의하며 W3C 권장 XML 서명 구문처리에서 정의된다. 기능적으로는 PKCS #7과 많은 공통점을 가지고 있지만, 확장성이 뛰어나고 XML 문서 서명에 적합하다. SOAP, SAML 등 다양한 기술에서 활용되고 있다.

XML 서명은 모든 유형리소스(일반적으로 XML 문서)에 서명할 수 있지만 URL을 통해 액세스할 수 있는 모든 데이터에 서명할 수 있다. XML 문서가 들어 있는 외부 자원 서명 시 사용되는 XML 서명을 분리 서명이라고 하며, XML 서명이 포함된 문서의 일부에 서명하는 데 사용되면 폐쇄 서명이라고 하며, 서명된 데이터를 자체 내에 포함하는 경우 폐쇄 서명이라고 한다.

구조

XML 서명은 Signature 의 요소. http://www.w3.org/2000/09/xmldsig# 네임스페이스 기본 구조는 다음과 같다.

<시그니처> <시그니처인포> <시그니컬라이제이션 메소드 / <레퍼런스> <시그니처메소드 /> <디지스트메소드 /> </레퍼런스>   </SignedInfo> <SignatureValue /> <KeyInfo /> <Object /> </Signature> 
  • SignedInfo 요소는 서명된 데이터를 포함하거나 참조하고 사용되는 알고리즘을 지정한다.
    • SignatureMethod 그리고 CanonicalizationMethod 원소는 에 의해 사용된다. SignatureValue 원소 및 에 포함되어 있다. SignedInfo 변조를 막으려고 말이야
    • 하나 이상 Reference 요소는 URI 참조로 서명할 리소스와 서명하기 전에 리소스에 적용할 변환을 지정하십시오.
      • Transforms 서명하기 전에 리소스에 적용된 변환을 포함한다. 변환은 문서 트리의 정의된 하위 집합을 선택하는 XPath-표현일 수 있다.[1]
      • DigestMethod 해시를 적용하기 전에 해시 알고리즘을 지정하십시오.
      • DigestValue 에 정의된 변환된 리소스에 해시 알고리즘을 적용한 Base64 암호화 결과 포함 Reference 요소 속성
  • SignatureValue 요소에는 Base64로 인코딩된 서명 결과 포함 - 에서 지정된 매개 변수로 생성된 서명 SignatureMethod 요소 - 의 SignedInfo 에 의해 지정된 알고리즘을 적용한 후 요소 CanonicalizationMethod.
  • KeyInfo 일반적으로 하나 이상의 X.509 디지털 인증서의 형태로 서명자가 서명의 유효성을 확인하는 키를 수신자에게 제공할 수 있도록 선택적으로 요소를 허용한다. 신뢰할 수 있는 당사자는 다음과 같은 경우 문맥에서 키를 식별해야 한다. KeyInfo 존재하지 않는다.
  • Object 요소(선택사항)에는 서명된 데이터가 포함되며, 이 데이터가 포함되어야 한다.

검증 및 보안 고려 사항

XML 서명을 검증할 때는 코어 검증이라는 절차를 따른다.

  1. 참조 유효성 검사: 각각의 Reference의 다이제스트는 해당 리소스를 검색하고 변환을 적용한 다음 지정된 다이제스트 방법을 적용하여 검증된다. 그 결과는 기록된 것과 비교된다. DigestValue; 일치하지 않으면 유효성 검사가 실패함.
  2. 서명 검증:SignedInfo 요소에 지정된 표준화 방법을 사용하여 요소가 직렬화됨 CanonicalizationMethod, 주요 데이터는 다음을 사용하여 검색됨 KeyInfo 또는 다른 수단에 의해, 서명은 에 명시된 방법을 사용하여 검증된다. SignatureMethod.

이 절차는 그 자원이 그 혐의 당사자에 의해 실제로 서명되었는지 여부를 규명한다. 그러나 시논법과 변환법의 확장성 때문에 검증 당사자는 또한 실제로 서명되거나 소화된 것이 실제로 원본 데이터에 존재하는 것인지, 다시 말해, 거기서 사용된 알고리즘이 서명된 데이터의 의미를 바꾸지 않는 것으로 신뢰할 수 있는지 확인해야 한다.

서명된 문서의 구조는 "서명 포장" 공격으로 이어질 수 있기 때문에, 유효성 검사 과정에서도 XML 문서 구조를 다루어야 한다. 서명된 요소와 서명 요소는 절대 XPath 식을 사용하여 선택해야 하며, 절대 XPath 식을 사용하여 선택해서는 안 된다. getElementByName 방법들[2]

XML 표준화

XML 서명 작성은 주어진 XML 문서(XML 개발자들 사이에 공통적으로 사용되는 "인포셋")가 둘 이상의 합법적인 일련화된 표현을 가질 수 있기 때문에 일반 디지털 서명 작성보다 실질적으로 더 복잡하다. 예를 들어 XML 요소 내부의 공백은 구문적으로 유의하지 않으므로 <Elem > 와 구문론적으로 동일하다 <Elem>.

디지털 서명은 데이터 무결성을 보장하므로 단일 바이트 차이로 인해 서명이 달라질 수 있다. 또한, XML 문서가 컴퓨터에서 컴퓨터로 전송되는 경우, 회선 종단기는 CR에서 LF로, CR LF 등으로 변경될 수 있다. XML 문서를 소화하고 검증하는 프로그램은 나중에 요소 정의와 함께 속성 정의 사이에 여분의 공간을 추가하거나 상대적(vs. 절대적) URL을 사용하거나 네임스페이스 정의를 다시 정렬하여 XML 문서를 다른 방식으로 렌더링할 수 있다. 표준 XML은 XML 서명이 잘못된 원격 서버에 의해 시간적으로 렌더링될 수 있는 원격 문서를 참조할 때 특히 중요하다.

이러한 문제를 방지하고 논리적으로 식별된 XML 문서가 동일한 디지털 서명을 제공하도록 보장하기 위해 XML 문서에 서명할 때(일반적으로 약칭 C14n) XML 표준 변환을 사용한다. SignedInfo, 표준화는 필수 사항). 이러한 알고리즘은 의미론적으로 식별된 문서가 정확히 동일한 직렬화된 표현을 생성한다는 것을 보장한다.

또 다른 복잡성은 기본 표준화 알고리즘이 네임스페이스 선언을 처리하는 방법 때문에 발생한다; 자주 서명된 XML 문서를 다른 문서에 포함시킬 필요가 있다; 이 경우 원래의 표준화 알고리즘은 문서가 단독으로 처리되는 것과 같은 결과를 산출하지 않을 것이다. 이 때문에 주변 XML과 독립적으로 XML 네임스페이스 선언을 직렬화하는 이른바 배타적 표준화가 만들어졌다.

혜택들

XML 서명은 이진 데이터에서 동작하지 않기 때문에 Prety Good PrivacyCryptographic Message Syntax와 같은 다른 형태의 디지털 서명보다 유연하여 데이터의 하위 집합에서 작업할 수 있다(예를 들어, 바이너리 데이터의 블록을 인코딩하는 비표준적인 방법으로도 가능하다.s64 ASCII), 서명 및 서명된 정보를 바인딩하고 변환을 수행하는 다양한 방법 보유. 또 다른 핵심 개념은 "필수"에만 서명하여 공백이나 선 엔딩과 같은 의미 없는 차이를 제거하는 것을 표준화하는 것이다.

문제들

일반적으로 XML 보안의 아키텍처를 향한 비판도 있고, [3]특히 XML 데이터의 복잡성, 고유 처리 요건, 성능 특성 저하 등으로 인해 XML 데이터의 서명 및 암호화에 대한 프런트 엔드로서 XML 표준화의 적합성에 대한 비판도 있다.[4][5][6] XML 표준화를 수행하면 트랜잭션에 민감한 성능에 민감한 SOA 애플리케이션에 대해 극복하기 어려운 과도한 대기 시간이 발생한다는 주장이다.

이러한 문제는 XML Security Working Group에서 해결되고 있다.[7][8]

SOAP 및 WS-Security에서 XML Dsig를 적절하게 정책 및 구현하지[2] 않으면 XML 서명 래핑과 [9]같은 취약성이 발생할 수 있다.[10]

적용들

XML 서명 응용프로그램의 예:

참고 항목

참조

  1. ^ http://www.w3.org/TR/xmldsig-filter2/ XML-서명 XPath 필터 2.0
  2. ^ Jump up to: a b Pawel Krawczyk (2013). "Secure SAML validation to prevent XML signature wrapping attacks".
  3. ^ XML 보안이 손상된 이유
  4. ^ 웹 서비스 보안 성능
  5. ^ 그리드 서비스를 위한 보안 메커니즘의 성능 비교
  6. ^ Zhang, Jimmy (January 9, 2007). "Accelerate WSS applications with VTD-XML". JavaWorld. Retrieved 2020-07-24.
  7. ^ XML 시그니처 및 XML 암호화를 위한 다음 단계에 대한 W3C 워크샵, 2007
  8. ^ XML Security 2.0 요구 사항 및 설계 고려 사항
  9. ^ http://domino.research.ibm.com/library/cyberdig.nsf/papers/73053F26BFE5D1D385257067004CFD80/$File/rc23691.pdf
  10. ^ Juraj Somorovsky; Andreas Mayer; Jorg Schwenk; Marco Kampmann; Meiko Jensen (2012). "On Breaking SAML: Be Whoever You Want to Be" (PDF).
  11. ^ https://www.sbr-nl.nl/english/what-is-sbr/assurance/ SBR Assurance, 네덜란드 정부, 2018

외부 링크