Download presentation
Presentation is loading. Please wait.
Published byRose Sanders Modified 6년 전
1
2002.11.26 컴퓨터 과학과 김지현 (http://cs.sookmyung.ac.kr/~yeronica/xml/)
보안에서의 전자서명과 xmldsig 컴퓨터 과학과 김지현 (
2
목 차 1. XML 정보보호기술의 필요성 2. XML 전자서명 표준화 및 응용 동향
※ 참고 문서 RFC3275 XML Security (Blake Dournaee) – RSA PRESS 한국정보보호진흥원 - 전자서명 및 인증제도
3
XML 정보보호기술의 필요성
4
Password 기반, PKI 기반, SSL 기반의 보안 서비스 - 현재의 전자상거래 시스템을 지원하는 기술
전자거래에 필요한 전자거래 정보보호 기술 Password 기반, PKI 기반, SSL 기반의 보안 서비스 - 현재의 전자상거래 시스템을 지원하는 기술 2. XML 정보보호 기술 기반의 보안 서비스 새롭게 출현하고 있는 XML 기반 전자상거래 프레임워크인 ebXML, Web Service 기반 전자상거래 지원
5
전자상거래가 활성화되는 경우 발생할 수 있는 정보화의 역기능을 방지하기 위해 다음과 같은 정보 보호가 요구됨
기밀성 : 전송되는 정보의 비밀 보장 무결성 : 전송되는 정보가 변경되지 않음을 보장 인 증 : 전송자의 신문을 증명 부인방지 : 사후 자신의 행위에 대한 부인 불가 암호화 시스템 : 기밀성 보장 전자서명시스템 : 무결성, 인증, 부인방지 보장 주요 XML 기반 보안 기술 표준화 수행 XML 전자서명 XML Encryption XKMS
6
2. XML 전자서명 표준화 및 응용 동향
7
XML 전자서명 표준화 동향 XML Signatures (xmldsig) IETF Working Group
IETF와 W3C의 공동 작업으로 XML 전자서명 표준화 작업 진행 W3C
8
XML 전자서명 표준화 동향 The mission of this working group
웹 자원과 프로토콜 메시지 부분(ex.http 등) 등에 대한 디지털 서명을 표현하는 XML 형식의 구문의 개발 서명의 계산/생성과 확인을 위한 절차의 개발
9
XML 전자서명 표준화 문서 Internet-Drafts:
Exclusive XML Canonicalization, Version 1.0 Request For Comments: XML-Signature Requirements (RFC 2807) XML-Signature Syntax and Processing (RFC 3075) Canonical XML Version 1.0 (RFC 3076) XML-Signature Syntax and Processing (RFC 3275)
10
XML 전자서명 응용 동향 Toolkits and SDKs Baltimore
Entrust/Toolkit™ ; for Java™ IAIK XML Signature Library (IXSIL) IBM XML Security Suite Infomosaic Microsoft NEC XMLDSIG Phaos RSA BSAFE Cert-J Ubisecure Verisign
11
XML 전자서명 구현 오픈 소스 Apache XML Security for Java, Christian Geuer-Pollmann (BSD License) GapXse for Java, University of Pisa (LGPL License) Canonical XML and Exclusive Canonical XML for Python, Joseph Reagle and Richard Salz (W3C and Python Licenses) Canonical XML for Perl, T.J. Mather (Perl License) XML Security Library, Aleksey Sanin (MIT License)
12
3. XML 전자서명 이해를 위한 기반 지식 참고 자료 : 전자서명 및 인증제도 ( 한국정보보호센터 )
13
대칭형 암호시스템 Bob Alice 대칭형 암호시스템 •특징 : 암호화키와 복호화키가 동일
공통비밀키 암호화 복호화 대칭형 암호시스템 •특징 : 암호화키와 복호화키가 동일 •장점 : 암호화 및 복호화 속도가 빠름 •단점 : 키관리의 어려움. 키분배의 문제. 다양한 응용의 어려움 •사례 : DES, FEAL 등
14
비대칭 암호 시스템 Alice Bob 비대칭형 암호시스템 •특징 : 복호화키(=개인키)와 암호화키(=공개키)가 다름
•장점 : 키관리가 용이. 다양한 응용이 가능. 안전성이 뛰어남 •단점 : 암호화 및 복호화 속도가 느림 •사례 : RSA 등
15
해쉬 함수 • 특징 : 일방향 함수 + 메시지 다이제스트(Message Digest) • 장점 : 디지털서명에서 주로 사용
문서번호 : 1 수신 : 홍길동 참조 : 제목 : Dyejsmldmnf mdfnmd,sdd fnfnfnlkfekkfe ekfkjefjefelfee 문서 Y (메시지 다이제스트) 문서 X 해쉬함수 • 특징 : 일방향 함수 + 메시지 다이제스트(Message Digest) • 장점 : 디지털서명에서 주로 사용 • 사례 : MD5, SHA 등
16
메시지 다이제스트 (Message Digest)
함수의 출력에 기반한 함수의 입력을 추론할 수 없음. Hash 함수에서 파일의 데이터는 단방향 Hash 함수의 입력으로 사용되어서 Hash 값을 생성함 누군가 파일을 수정하면 Hash 값이 변경 되고, 메시지 다이제스트의 수신자는 변경된 사실을 눈치채게 됨 동일한 메시지 다이제스트를 생성할 대체의 메시지를 궁리한다는 것이 어려움.
17
전자서명의 기능 위조불가 : 개인키를 소유하지 않은 자는 전자서명 생성 불가
변경불가 (Message Authentication) : 개인키를 소유하지 않은 자는 전자문서 변경 불가 서명자 인증 (Signer Authentication) : 생성키를 소유한 자가 전자서명의 행위자임을 인증 부인불가 : 개인키의 소유자가 전자서명후에 행위에 대한 부인 불가
18
전자서명 생성 과정 <전자서명 생성작업 세부 수행도> 전자서명 생성 프로그램 전자문서 해쉬함수 메시지 다이제스트
개인키 전자서명 전자서명 알고리즘(암호화) <전자서명 생성작업 세부 수행도>
19
전자서명 검증 과정 <전자서명 검증작업 세부 수행도> 전자서명 검증 프로그램 전자문서 해쉬함수 메시지다이제스트1
맞으면 유효 비교 전자서명 전자서명 알고리즘 (복호화) 틀리면 무효 전자서명 공개키 메시지다이제스트2 <전자서명 검증작업 세부 수행도>
20
전자서명 키생성 전자서명 키 생성 전자서명 개인키 전자서명 공개키 개인키(생성키)는 안전한 장치(스마트카드등)에 보관
공개키(검증키)는 공개되는 정보 개인키/공개키는 유일한 하나의 쌍 개인키/공개키는 안전한 키 생성 알고리즘을 통해 생성
21
4. XML 전자서명의 개요 및 생성 검증 과정
22
The XML Signature namespace
23
The XML Signature namespace and its related element
<Transforms> <Signature> <SignedInfo> <SignatureMethod> <CanonicalizationMethod> <Reference> <DigestMethod> <SignatureValue> <DigestValue>
24
XML 전자서명 구조 <Signature> <SignedInfo> ….
<SignatureValue> (<KeyInfo>)? (<Object ID?>)* </Signature> <CanonicalizationMethod/> <SignatureMethod/> (<Reference URI? > (<Transforms>)? <DigestMethod> <DigestValue> </Reference>)+
25
XML 전자서명 형식 Enveloped (피포함) 형식 Enveloping (포함) 형식 Detached (분리) 형식
26
Enveloped 형식 서명될 data object안에 서명이 포함되어 있음. <RootNode>
<Signature>..</Signature> </RootNode> 서명 대상 <RootNode> 서명 <Signature>
27
Enveloping 형식 예제 <rootElement><price>$12000</price>
<Signature xmlns=" <SignedInfo> <CanonicalizationMethod Algorithm=" c 14n "></CanonicalizationMethod> <SignatureMethod Algorithm=" </SignatureMethod> <Reference URI=""> <Transforms> <Transform Algorithm=" signature"></Transform> <Transform Algorithm=" "></Transform> </Transforms> <DigestMethod Algorithm=" </DigestMethod> <DigestValue>gps9eU5GIlAzw188faGc2eQ56L0=</DigestValue> </Reference> </SignedInfo> <SignatureValue>kqFSSPN3tNibQT3dYnKKR8FEE3mUf7aGo=</SignatureValue> <KeyInfo>….</KeyInfo> </Signature> </rootElement>
28
Enveloping 형식 서명될 data object가 서명에 포함되어 있음. <Signature>
<childNode>..</childNode> </Signature> 서명 <Signature> 서명대상 <childNode>
29
Enveloping 형식 예제 <Signature xmlns=" <SignedInfo> <CanonicalizationMethod Algorithm=" "></CanonicalizationMethod> <SignatureMethod Algorithm=" </SignatureMethod> <Reference URI="#Object1"> <Transforms> <Transform Algorithm=" </Transform> </Transforms> <DigestMethod Algorithm=" </DigestMethod> <DigestValue>iUSD6LYG1b1nrUTUnBHE3iLL3LU=</DigestValue> </Reference> </SignedInfo> <SignatureValue>Ir4w44JiqvnpVxD5lQL4srJGeupypXGI4e++RL2BiLQ==</SignatureValue> <KeyInfo>….</KeyInfo> <Object Id="Object1"><list> <item>1234</item><price>$1200</price></list></Object> </Signature>
30
Detached 형식 서명될 data object와 서명이 분리되어 있음
<Signature> .. </Signature> 서명대상 ( 서명 <Signature>
31
Detached 형식 예제 <Signature xmlns=" <SignedInfo> <CanonicalizationMethod Algorithm=" xml-c14n "> </CanonicalizationMethod> <SignatureMethod Algorithm=" </SignatureMethod> <Reference URI=" <DigestMethod Algorithm=" </DigestMethod> <DigestValue>v+iN7uP9BJsZxVcaWXkSunAEepo=</DigestValue> </Reference> </SignedInfo> <SignatureValue> tpywEpNfgWQoH5NFr3wG2y5CIDrsT1KkTdcFfALWKdI8IiwwMz</SignatureValue> <KeyInfo>….</KeyInfo> </Signature>
32
5. XML 전자서명의 문법 및 구문 분석
33
<Signature> XML 전자서명의 루트원소 DTD : <!ELEMENT Signature
(SignedInfo, SignatureValue, KeyInfo?, Object*) > <!ATTLIST Signature xmlns CDATA #FIXED ' Id ID #IMPLIED >
34
<SignedInfo> 실제로 서명되는 정보로 검증시의 대상이 됨 검증시의 두 단계
- <SignedInfo>에 대한 서명의 검증과 <SignedInfo> 안의 각 Reference의 다이제스트에 대한 검증 DTD : <!ELEMENT SignedInfo (CanonicalizationMethod, SignatureMethod, Reference+) > <!ATTLIST SignedInfo Id ID #IMPLIED>
35
<CanonicalizationMethod>
SignedInfo 원소를 다이제스트하기 전에 그 원소를 정규화할때 사용하는 알고리즘을 지정 정규화 알고리즘 : 문서내 주석 포함 여부에 따라 두가지로 나뉨 - With Comments : - Omit Comments : DTD : <!ELEMENT CanonicalizationMethod (#PCDATA %Method.ANY;)* > <!ATTLIST CanonicalizationMethod Algorithm CDATA #REQUIRED >
36
정규화(Canonicalization)
디지털 서명은 검증 계산이 서명 계산과 정확히 같은 비트들에 대해 수행될 경우에만 제대로 작동 서명된 데이터의 표면상의 표현이 서명과 확인 사이에서 변경 가능함 변화될 수 있는 부분을 표준화하기 위한 어떤 방법이 반드시 서명과 확인 전에 사용되어야함 EX) 서명 시점과 서명 확인 시점에서 한가지 행 종료 방법에서 다른 방법으로 변경되는 것이 가능하므로, 서명과 확인전에 행 종료를 표준형으로 정규화 할 필요 있으며, 그렇지 않으면 검증은 실패한다.
37
<SignatureMethod>
정규화된 <SignedInfo>를 SignatureValue로 변환할 때 사용하는 알고리즘 지정 서명 알고리즘 - DSA - RSA DTD <!ELEMENT SignatureMethod (#PCDATA|HMACOutputLength %Method.ANY;)* > <!ATTLIST SignatureMethod Algorithm CDATA #REQUIRED >
38
<Reference> Reference의 URI 속성은 서명될 데이터 객체를 식별 DTD :
<!ELEMENT Reference (Transforms?, DigestMethod, DigestValue) > <!ATTLIST Reference Id ID #IMPLIED URI CDATA #IMPLIED Type CDATA #IMPLIED>
39
<Reference> URI Type Data Type
Binary octets URI=“ URI=“ URI=“file:///c:\files\foo.doc” URI=“#SomeElement” Node-set URI=“”
40
<Transforms> 자원의 콘텐트가 다이제스트 되기 전에 그에 적용된 처리 단계의 순서화된 목록, 정규화, 인코딩/디코딩(압축포함), XSLT, XPath(소스 문서의 일부분을 누락한 XML 문서 변환 허용) 변환 알고리즘 - Enveloped Signature - XPath - XSLT DTD : <!ELEMENT Transforms (Transform+)> <!ELEMENT Transform (#PCDATA|XPath %Transform.ANY;)* > <!ATTLIST Transform Algorithm CDATA #REQUIRED > <!ELEMENT XPath (#PCDATA) >
41
<DigestMethod>
Transforms가 적용된 이후 DigestValue를 만들어 내기 위해 데이터에 적용되는 알고리즘 다이제스트 알고리즘 SHA1 DTD : <!ELEMENT DigestMethod (#PCDATA %Method.ANY;)* > <!ATTLIST DigestMethod Algorithm CDATA #REQUIRED >
42
<DigestValue> 데이터객체에 Transform들을 적용한 후 결과로부터 얻은 다이제스트 값, BASE64로 인코드됨. DTD : <!ELEMENT DigestValue (#PCDATA) >
43
<SignatureValue>
<SignedInfo>에 지정된 알고리즘에 근거하여 SignedInfo를 정규화하고 그 결과에 대해 서명된 디지털 서명의 실제 값을 가짐, BASE64로 인코드됨 DTD : <!ELEMENT SignatureValue (#PCDATA) > <!ATTLIST SignatureValue Id ID #IMPLIED>
44
<KeyInfo> 서명 검증에 사용될 공개키(검증키)를 포함 DTD :
<!ELEMENT KeyInfo (#PCDATA|KeyName|KeyValue|RetrievalMethod| X509Data|PGPData|SPKIData|MgmtData %KeyInfo.ANY;)* > <!ATTLIST KeyInfo Id ID #IMPLIED >
45
<Object> 서명 원소 안이나 혹은 다른 곳의 데이터 객체를 포함시키는데 사용 DTD :
<!ELEMENT Object (#PCDATA|Signature|SignatureProperties|Manifest %Object.ANY;)* > <!ATTLIST Object Id ID #IMPLIED MimeType CDATA #IMPLIED Encoding CDATA #IMPLIED >
46
6. XML 전자서명 생성 및 검증 과정
47
Core Generation - Reference 생성 과정 - Signature 생성 과정 Core Validation - Reference 검증 - Signature 검증
48
Core Generation 각 서명 대상 객체에 대한 Step1의 과정의 생성 규칙을 적용한 이후에 Step2의 생성 규칙을 적용시킴. Step1) Reference 생성 Step2) Signature 생성
49
XML 전자서명 생성 <SignedInfo> Key Canonicalizer Signature
<Reference>.. </Reference> <SignatureMethod> <CanonicalizationMethod> <SignedInfo> Canonicalizer <Signature> <SignedInfo> .. </SignedInfo> <SignatureValue> </SignatureValue> </Signature> Key Signature <SignatureValue> …… </SignatureValue> XML 전자서명 생성
50
Reference 생성 과정 데이터 객체에 어플리케이션이 정하는 바의 Transform들을 적용
결과인 데이터 객체에 각각에 대해 다이제스트 값을 계산 데이터 객체의 식별(옵션), 모든 변환 원소(옵션), 다이제스트 알고리즘, DigestValue를 포함하는 Reference 원소를 생성
51
Reference 생성 과정 예제 <Reference URI=" http://mm.sookmyung.ac.kr ">
<Transforms> <Transform Algorithm=" </Transform> </Transforms> <DigestMethod Algorithm=" </DigestMethod> <DigestValue>iUSD6LYG1b1nrUTUnBHE3iLL3LU=</DigestValue> </Reference>
52
Signature 생성 과정 <SignatureMethod>, <CanonicalizationMethod>, <Reference> 등을 갖는 <SignedInfo> 원소를 생성 2. <SignedInfo>의 <CanonicalizationMethod>에 지정된 알고리즘을 사용하여 SignedInfo를 정규화하고 그 결과에 대해 <SignatureMethod>에 지정된 알고리즘으로 서명 후 <SignatureValue>를 계산 3. <SignedInfo>, <KeyInfo>, <SignatureValue> 등을 포함하는 <Signature> 원소를 구성
53
Core Validation Reference 검증
- Reference로 규정되어 식별되고 변환된 콘텐트의 해쉬 값이 지정된 DigestValue와 일치하는지 검증 2. Signature 검증 - SignatureValue가 핵심 검증에 지정된 CanonicalizationMethod와 SignatureMethod를 사용하여 SignedInfo를 처리한 결과와 일치하는지 검증
54
XML 전자서명 검증 및 신뢰 Trust Engine XML Parser Yes/No Signature Validation
Root Certificate Store <KeyInfo> .. 공개키 .. </KeyInfo> Trust Engine <Signature> .. <KeyInfo> </KeyInfo> </Signature> XML Parser Yes/No <Signature> .. </Signature> Signature Validation XML 전자서명 검증 및 신뢰
55
Reference 검증 <SignedInfo>에 들어 있는 <CanonicalizationMethod> 에 근거하여 SignedInfo 원소를 정규화 다이제스트될 데이터 객체를 얻음 결과 데이터 객체에 Reference에서 지정된 DigestMethod를 사용하여 다이제스트를 계산 계산된 다이제스트 값을 SignedInfo의 Reference에 들어 있는 DigestValue와 비교. 비교가 조금이라도 다르면 검증은 실패
56
Signature 검증 KeyInfo로부터 외부 소스로부터 키 정보를 얻는다
<CanonicalizationMethod>를 사용하여 <SignatureMathod>의 정규형을 얻고 그 결과를 사용하여 SignedInfo 원소에 대해 <SignatureValue>를 검증한다.
Similar presentations