Xml Security
Upcoming SlideShare
Loading in...5
×
 

Xml Security

on

  • 1,359 views

大学での講義資料

大学での講義資料

Statistics

Views

Total Views
1,359
Views on SlideShare
1,340
Embed Views
19

Actions

Likes
0
Downloads
5
Comments
0

1 Embed 19

https://twitter.com 19

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Xml Security Xml Security Presentation Transcript

  • XML セキュリティ概説 羽田知史 (Satoshi Hada) IBM 東京基礎研究所 (IBM Tokyo Research Lab) mailto: satoshih at jp ibm com
  • アジェンダ
    • SSL などセキュリティ技術の復習
    • XML の概要説明
    • XML セキュリティ標準
  • SSL の概要 Satoshi Hada (IBM Tokyo Research Lab)
  • SSL: データの秘匿性・完全性
  • SSL: サーバー認証
  • SSL: クライアント認証
  • SSL: クライアント認証 自分の秘密鍵で、自分の身元を証明する
  • 暗号アルゴリズムの種類
    • ディジタル署名
    • RSA
    • DSA
    • メッセージ認証コード (MAC)
    • CMC-MAC
    • HMAC
    完全性
    • 公開鍵暗号
    • RSA
    • ElGamal
    • 共通鍵暗号
    • DES
    • AES
    秘匿性 公開鍵暗号ベース (非対称暗号) 共通鍵暗号ベース (対称暗号)
  • 共通鍵暗号と公開鍵暗号
    • 共通鍵暗号
      • 暗号化と復号に同じ鍵を使用
      • 鍵の配送が課題
    • 公開鍵暗号
      • 暗号化と復号に異なる鍵を使用
      • さらに、暗号化に使用する鍵は公開できる
  • 公開鍵暗号では、鍵管理が楽になります
  • 共通鍵暗号
    • 暗号化と復号で同じ秘密鍵を使用する
    • 例:
      • 1976: Data Encryption Standard (DES)
      • 2001: Advanced Encryption Standard (AES)
    • 利点:
      • 高速 : MB/sec ~ GB/sec
    • 問題:
      • 鍵管理:どうやって秘密鍵を共有するか?
  • メッセージ認証コード
    • 秘密鍵を所持している人だけが、生成&検証できるデータ。
    • 例:
      • CBC-MAC
        • 共通鍵ブロック暗号を使用
      • HMAC (IETF RFC 2104)
        • SHA-1 や MD5 などのハッシュ関数を使用
     E K M 1  E K M 2  E K M 3 MAC 0 例えば、 DES
  • 公開鍵暗号
    • 暗号化と復号に異なる鍵を使用
      • さらに、暗号化に使用する鍵は公開できる
      • RSA :素因数分解の困難性
      • ElGamal :離散対数問題の困難性
    • 利点:
      • 鍵管理が比較的簡単
    • 問題点:
      • 低速 : KB/sec
  • ディジタル署名
    • 秘密鍵で、自分だけが、生成できるデータ(否認不可)。
    • 公開鍵を使用して、誰でも、検証できる。
    • 例:
      • RSA :素因数分解の困難性
      • DSA :離散対数問題の困難性
  • サーバ クライアント 公開鍵・秘密鍵ペア 認証局 公開鍵 証明書 の発行 公開鍵 証明書 の発行 SSL Certificate Authority (CA) PKI ( Public Key Infrastructure )概要 公開鍵・秘密鍵ペア
    • 公開鍵
    • 持ち主の名前
    • この証明書を発行する認証局の名前
    • 認証局によって生成された電子署名
    MIIB8DCCAVkCBDnQPm GA1UEBhMCSlAxDDAKB oTA0lCTTEMMAoGA1UE FJMMRQwEgYDVQQDEw UkEgS2VudDAeFw0wMDA NjEyNTJaFw0wMDEyMjUw TJaMD8xCzAJBgNVBAYT QwwCgYDVQQKEwNJQk BgNVBAsTA1RSTDEUMB 公開鍵証明書 (Certificate) の概要
  • SSL/TLS History
    • 1994: Secure Sockets Layer (SSL) V2.0
    • 1996: Secure Sockets Layer (SSL) V3.0
    • 1999: Transport Layer Security (TLS) V1.0
    • 2005/2006: TLS V1.1 (currently in the RFC Editor’s Queue awaiting publication)
  • SSL プロトコルスタック HTTP SOAP TCP/UDP IP Ethernet など SSL が使用されないとき SSL が使用されるとき HTTP SOAP TCP/UDP IP Ethernet など SSL
  • サーバ クライアント 秘密鍵 秘密鍵 公開鍵 証明書 公開鍵 証明書 ハンドシェーク プロトコル 秘密鍵 (セッション鍵) の共有 レコード プロトコル メッセージ MAC 暗号化 公開鍵証明書の交換 利用 SSL :プロトコル概要
  • サーバ クライアント 秘密鍵 公開鍵 証明書 SSL: セッション鍵の共有 セッション鍵 (乱数) K を生成 Encyprt(ServerPK, K) 復号して K を取り出す 注意:実際には、認証とあわせて実行される
  • サーバ クライアント 秘密鍵 公開鍵 証明書 SSL: サーバ認証 乱数 R Sig (Server’s SK, R) サーバの公開鍵で署名を検証 注意:実際には、セッション鍵の共有とあわせて実行される
  • XML (Extensible Markup Language) とは? Satoshi Hada (IBM Tokyo Research Lab)
  • HTML (Hyper Text Markup Language)
  • HTML (Hyper Text Markup Language)
    • <?xml version=&quot;1.0&quot; encoding=&quot;Shift_JIS&quot;?>
    • <!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
    • &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;>
    • <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;ja&quot; lang=&quot;ja&quot;>
    • <head>
    • <title>HTML のサンプル </title>
    • </head>
    • <body>
    • <p>HTML のサンプルです。 </p>
    • </body>
    • </html>
  • XML 文書
    • タグを含んだテキスト
    • 開始タグと終了タグ
      • <p> 段落 </p>
    • 空要素タグ
      • <br/>
    • 開始タグ,空要素タグは属性を持つ
      • <p xml:lang=“ja”>
  • Web アプリケーションの観点から見た XML とは? HTML ( 表示 ) TCP/IP (通信) XML (データ) Java (プログラ ミング言語)
  • XML はメタ言語です。 XML HTML RSS J2EE Deployment Descriptor ... XACML XBRL
  • OpenOffice 文書は XML で表現されます
  • Google Gadget は XML で表現されます
  • 金融庁は、 XBRL の使用を義務付ける予定です
    •  金融庁は 2008 年度から有価証券報告書(有報)などを提出する上場企業など約 8000 社に、財務諸表などのデータを容易に加工できる新しいコンピューター言語の使用を義務づける。投資家はサイト上の財務諸表を自分のパソコンに取り込むことで、企業の財務比較など加工・分析作業をしやすくなる。
    •  財務報告用の新しいコンピューター言語は「XBRL」と呼ばれる。すでに米国など主要国は採用し、国際規格となりつつある。各国は任意採用にとどめているが、日本は一気に義務化する。
    <group period=&quot;2000&quot;> <item type=&quot;ci:incomeStatement.otherIncreaseDecreaseInUnappropriatedRetainedEarnings&quot;>371</item> <item type=&quot;ci:incomeStatement.unappropriatedRetainedEarningsEndOfYear&quot;>700</item> <item type=&quot;ci:notesToFinancialStatements.treasuryStockObtainedForDirectors&quot;>3</item> <item type=&quot;ci:notesToFinancialStatements.depreciationOfTangibleAssets&quot;>3496</item> <item type=&quot;ci:notesToFinancialStatements.netIncomePerShare&quot;>8.78</item> </group>
  • なぜ XML にするか ?
    • XML でいちおう表現できる
    • 徹底的な国際化がされている
    • 人間にとって読みやすく、理解しやすい
    • ツールが充実
      • 特に、完成度の高い XML パーサがどこにでも無料で入手できる
  • XML の意義は、 XML のレベルで定義された様々な標準技術が、そのまま、アプリケーションのレベルで使用できることである XML ( メタ言語 ) HTML XBRL J2EE Deployment Descriptor ...
    • アクセスAPI (DOM, SAX)
    • XPath
    • XSLT
    • XQuery
    • XML 署名・暗号
  • XML 文書を操作するための API
    • DOM (Document Object Model)
      • パーサがメモリ上に XML 文書を展開する
      • アプリケーションは、展開された XML 文書を操作する
    • SAX (Simple API for XML)
      • パーサは、 XML 文書中の開始タグ,終了タグ,文字内容を見つけるために、アプリケーションプログラムを呼び出す
      • アプリケーションは呼び出されるたびに 何らかの処理をする
  • DOM API
    • <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;ja&quot; lang=&quot;ja&quot;>
    • <head>
    • <title>HTML のサンプル </title>
    • </head>
    • <body>
    • <p>HTML のサンプルです。 </p>
    • </body>
    • </html>
    html head body title p import org.w3c.dom.*; NodeList nl; Document doc=…; Element root=doc.getDocumentElement(); String xmlns=root.getAttribute(“xmlns”); nl=root.getElementsByNameNS(xmlns, “head”); Element head=(Element)nl.itemi(0); nl=head.getElementByNameNS(xmlns, “title”); Element title=(Element)nl.itemi(0); nl=title.getChildNodes();
  • XPath
    • <bib>
    • <book>
    • <publisher> Addison-Wesley </publisher> <author> Serge Abiteboul </author> <author>
    • <first-name> Rick </first-name> <last-name> Hull </last-name> </author> <author> Victor Vianu </author> <title> Foundations of Databases </title> <year> 1995 </year>
    • </book> <book price =“ 55 ”>
    • <publisher> Freeman </publisher> <author> Jeffrey D. Ullman </author> <title> Principles of Database and Knowledge Base Systems </title> <year> 1998 </year>
    • </book>
    • </bib>
    /bib/book/year Result: <year> 1995 </year> <year> 1998 </year> /bib/paper/year Result: Empty //title Result: <title> Foundations of Database </title> <title> Principles of Database and Knowledge Base Systems </title> 斉藤 太郎(東京大学)さんの資料からの抜粋
  • XSLT (XSL Transformations) XSLT プロセッサー HTML <group period=&quot;2000&quot;> <item>371</item> <item>700</item> <item>3</item> <item>3496</item> <item>8.78</item> </group> HTML XML <xsl:template match=&quot;element1&quot;> <element2> <xsl:apply-templates /> </element2> </xsl:template> XML XSL (Extensible Stylesheet Lnaugage)
  • XQuery
    • FOR $x IN document(&quot;bib.xml&quot;) /bib/book
    • WHERE $x/year > 1995
    • RETURN $x/title
    <title> Principles of Database and Knowledge Base Systems </title> <bib> <book> <publisher> Addison-Wesley </publisher> <author> Serge Abiteboul </author> <author> <first-name> Rick </first-name> <last-name> Hull </last-name> </author> <author> Victor Vianu </author> <title> Foundations of Databases </title> <year> 1995 </year> </book> <book price =“ 55 ”> <publisher> Freeman </publisher> <author> Jeffrey D. Ullman </author> <title> Principles of Database and Knowledge Base Systems </title> <year> 1998 </year> </book> </bib> 斉藤 太郎(東京大学)さんの資料からの抜粋
  • XML セキュリティ標準 ワシントン大学の講義資料に基づいて作成されています http://www.cs.washington.edu/education/courses/csep590/06wi/lectures/ Satoshi Hada (IBM Tokyo Research Lab)
  • XML セキュリティの位置づけ
    • Session ベースのプロトコル
      • Kerberos
      • SSL/TLS
      • IPSEC
    • Message ベースのプロトコル
      • S/MIME( バイナリデータが対象 )
      • XML-DSIG & XML-ENC ( XML データが対象)
  • XML の暗号化や署名に、 S/MIME を使用することは可能ですが、いくつか問題があります。
    • 暗号化・署名共通の問題
      • XML の暗号化や署名の結果がバイナリデータになり、 XML でなくなってしまう。その結果、 XML の様々なツールが使えない。
    • 署名特有の問題
      • 厳密には異なる XML データであっても、同じ Semantics をもつ場合がある。そのような異なる XML データの署名データは同じ値になるべきであるが、 S/MIME を使用すると異なる署名データになる。
  • XML-DSIG と XML-ENC の標準化
    • XML-DSIG
      • July 1999 に W3C&IETF の共同プロジェクトとしてスタート
      • スペック
        • W3C Recommendation (12 February 2002 )
        • IETF RFC 3275 ( March 2002 )
      • 標準API - JSR-105: XML Digital Signature APIs (Final release)
    • XML-ENC
      • Summer 2000 に W3C でスタート
      • スペック - W3C Recommendation (10 December 2002)
      • 標準API - JSR 106: XML Digital Encryption APIs (in progress)
  • XML 署名 XML-DSIG
  • 署名の例
    • <Signature xmlns=&quot;http://www.w3.org/2000/09/xmldsig#&quot;>
    • <SignedInfo>
    • <CanonicalizationMethod
    • Algorithm=&quot;http://www.w3.org/TR/2001/REC-xml-c14n-20010315&quot; />
    • <SignatureMethod
    • Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#rsa-sha1&quot;/>
    • <Reference URI=&quot;http://www.farcaster.com/index.htm&quot;>
    • <DigestMethod
    • Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#sha1&quot; />
    • <DigestValue>XoaHIm+jLKnPocR7FX0678DUOqs=</DigestValue>
    • </Reference>
    • </SignedInfo>
    • <SignatureValue> M5BhlrxPaOEYcCwSZ3WEDR6dfK5id/ef1JWK6OO5PEGHp9/JxrdA2xT5TYr5egArZGdVURpMVGUeViWoeHcGAyMNG9Cmc/I56sYd/TSV/MjLgb/mxq+6Fh/HWtVhjHIG+AdL4lA+ZxxEi147QVVzgCl4+dvIZaGo7oAFneDKv0I=
    • </SignatureValue>
    • </Signature>
  • XML-DSIG 標準の概要
    • ディジタル署名と MAC の両方に対応。
    • 署名データは XML として表現される。
    • 署名対象のデータは、 XML 文書でも任意のバイナリデータでもよい。
    • WS-Security への応用
  • XML-DSIG の主な特徴
    • XML-DSIG は3種類の署名形態がある。
      • Wrapped, Detached and Embedded
    • XML-DSIG は、 XML 文書全体やその一部に対して、適用可能
    • XML-DSIG は、 Canonicalization( 正規化 ) をサポート
      • Some modifications to the text must be allowed and not break the signature
    • XML-DSIG は、複数の XML 文書への署名が可能
  • Wrapped Signatures
    • 署名対象のデータが署名データに含まれる。
    • CMS (S/MIME) と同様
    • 署名対象のデータのサイズが小さいときに利用される
    XMLDSIG Signature SignedInfo Includes pointer to Signed content Signed Content
  • Detached Signatures
    • 署名対象のデータと署名データは、分離される。
    • non-XML データを署名するときに有用
      • E.g. audio/visual data stream
    XMLDSIG Signature SignedInfo Includes pointer to Signed content Signed Content (separate XML resource)
  • Embedded Signatures
    • XML-DSIG ユニークなメカニズム
    • 署名対象のデータが、署名データを含む
      • あらかじめ署名対象のデータのスキーマがそのように設計されているべき
    XMLDSIG Signature SignedInfo Includes pointer to Signed content Signed Content
  • Workflow Scenario Alice Bob Alice completes her part and sends F to Bob so Bob can complete his part Bob’s part Form F On-line form Alice’s part Bob’s part Form F Alice starts with a blank form Bob completes his part and fills out the remainder of the form Alice’s sig On-line form Alice’s part Alice’s sig Bob’s sig On-line form Alice’s part Bob’s part Form F
  • XML-DSIG では、署名前に入力データを加工する仕組みがあります。
    • 署名する前に、 Transformation を通じて、入力データを加工するメカニズム
      • Canonicalization( 正規化 )
      • BASE64 の Decoding
      • XPath フィルタリング
      • XSLT
    Transform 1 Input Content Transform 2 Transform n ... To-be-signed Content
  • XML 文書の正規化  Canonicalization (C14N)
    • XML のテキスト表現を canonical form bytestream に変換する
    • すべての semantically-equivalent な XML 文書は同じ canonical form bytestream をもつ
      • 属性は、アルファベット順にソートされる
      • 文字のエンコーディング方式を「 UTF-8 」に統一する
      • 改行文字は「 #xA 」に統一する
      • 空要素は開始タグと終了タグを続け、「 <xxx></xxx> 」と記述する
      • 不要な空白は削除する
      • タグの途中で改行しない
    <Contract id=“abcdefeg” date=“2007/05/29”> I pay for … </Contract> <Contract date=“2007/05/29” id=“abcdefeg”> I pay for … </Contract> C14N
  • 署名生成のフロー
    • 署名データは、 C14N の結果をハッシュした後に、生成される。
    Input Content To-be-signed Content C14N Bytestream Hash function Signature Algorithm 0-n Transforms Signature Value
  • XML-DSIG スキーマの概要
    • ルート要素 <Signature>
      • <SignedInfo> と <SignatureValue> は required
      • <Keyinfo> と <Object> は optional
    Signature SignedInfo Identifies the signature algorithm, canonicalization method and the list of signed contents. KeyInfo (optional) Information related to the signing key SignatureValue The actual signature value, computed over the contents of the SignedInfo element Object (optional) Optional sub-element usually used to embed signed content within the signature
  • <SignedInfo> 要素の概要
    • The <SignedInfo> element contains a list <Reference> elements
    • Each <Reference> element points to a piece of signed content
      • <SignedInfo> is a manifest listing all the contents signed by the signature
    SignedInfo CanonicalizationMethod Identifies the canonicalization algorithm. Reference (one or more) Identify specific content signed by the signature SignatureMethod Identifies the digital signature algorithm. URI (pointer to content) DigestMethod (hash algorithm for content) DigestValue (content’s hash value) Transforms (optional) – Used to select a portion of the URI’s content for signing
  • 署名の例
    • <Signature xmlns=&quot;http://www.w3.org/2000/09/xmldsig#&quot;>
    • <SignedInfo>
    • <CanonicalizationMethod
    • Algorithm=&quot;http://www.w3.org/TR/2001/REC-xml-c14n-20010315&quot; />
    • <SignatureMethod
    • Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#rsa-sha1&quot;/>
    • <Reference URI=&quot;http://www.farcaster.com/index.htm&quot;>
    • <DigestMethod
    • Algorithm=&quot;http://www.w3.org/2000/09/xmldsig#sha1&quot; />
    • <DigestValue>XoaHIm+jLKnPocR7FX0678DUOqs=</DigestValue>
    • </Reference>
    • </SignedInfo>
    • <SignatureValue> M5BhlrxPaOEYcCwSZ3WEDR6dfK5id/ef1JWK6OO5PEGHp9/JxrdA2xT5TYr5egArZGdVURpMVGUeViWoeHcGAyMNG9Cmc/I56sYd/TSV/MjLgb/mxq+6Fh/HWtVhjHIG+AdL4lA+ZxxEi147QVVzgCl4+dvIZaGo7oAFneDKv0I=
    • </SignatureValue>
    • </Signature>
  • XML 暗号 XML-ENC
  • XML-ENC 標準の概要
    • 暗号化の対象となるデータは、 XML 要素、 XML 要素の内容、および、任意のデータ( XML 文書を含む)です。
    • 暗号化の結果は、 XML 要素であり、暗号文そのもの、あるいは、暗号文への参照を含みます。
  • XML-ENC サンプル
    • <?xml version='1.0'?>
    • <PaymentInfo xmlns='http://example.org/paymentv2'>
    • <Name>John Smith</Name>
    • <CreditCard Limit='5,000' Currency='USD'>
    • <Number>4019 2445 0277 5567</Number>
    • <Issuer>Example Bank</Issuer>
    • <Expiration>04/07</Expiration>
    • </CreditCard>
    • </PaymentInfo> s
    • <CreditCard> 要素そのもの
    • <CreditCard> 要素の内容(子要素など)
    • <Number> 要素の内容(テキスト)
  • XML-ENC サンプル (1)
    • <?xml version='1.0'?>
    • <PaymentInfo xmlns='http://example.org/paymentv2'>
    • <Name>John Smith</Name>
    • <EncryptedData
    • Type='http://www.w3.org/2001/04/xmlenc#Element’
    • xmlns='http://www.w3.org/2001/04/xmlenc#'>
    • <CipherData>
    • <CipherValue>A23B45C56</CipherValue>
    • </CipherData>
    • </EncryptedData>
    • </PaymentInfo>
    <CreditCard> 要素が、暗号化された結果、 <EncryptedData> で置き換えられる。
  • XML-ENC サンプル (2)
    • <?xml version='1.0'?>
    • <PaymentInfo xmlns='http://example.org/paymentv2'>
    • <Name>John Smith</Name>
    • <CreditCard Limit='5,000' Currency='USD'>
    • <EncryptedData
    • xmlns='http://www.w3.org/2001/04/xmlenc#‘
    • Type='http://www.w3.org/2001/04/xmlenc#Content’>
    • <CipherData>
    • <CipherValue>A23B45C56</CipherValue>
    • </CipherData>
    • </EncryptedData>
    • </CreditCard>
    • </PaymentInfo>
    <CreditCard> 要素の内容(子要素など)が、暗号化された結果、 <EncryptedData> で置き換えられる。
  • XML-ENC サンプル (3)
    • <?xml version='1.0'?>
    • <PaymentInfo xmlns='http://example.org/paymentv2'>
    • <Name>John Smith</Name>
    • <CreditCard Limit='5,000' Currency='USD'>
    • <Number>
    • <EncryptedData
    • xmlns='http://www.w3.org/2001/04/xmlenc#’
    • Type='http://www.w3.org/2001/04/xmlenc#Content'>
    • <CipherData>
    • <CipherValue>A23B45C56</CipherValue>
    • </ CipherDat a>
    • </ EncryptedDat a>
    • </Number>
    • <Issuer>Example Bank</Issuer>
    • <Expiration>04/07</Expiration>
    • </CreditCard>
    • </PaymentInfo>
    <Number> 要素の内容(テキスト)が、暗号化された結果、 <EncryptedData> で置き換えられる。
  • XML-ENC の主な特徴
    • Wrapped あるいは detached CipherData
      • 暗号化されたデータはどのように暗号化されたかを示すメタデータ内に保持されてもよいし、あるいは、別に送信されてもよい
    • EncryptedKey inside KeyInfo
      • Bulk データの暗号化に使用する鍵(受け取り手の公開鍵で暗号化された)はデータと共に送信可能 (S/MIME と同様に ) 。
    • Detached CipherData の参照は、 XML-DSIG と同じ Transform のメカニズムを使用している
    • ルート要素は <EncryptedData> あるいは <EncryptedKey>
    • <EncryptedKey> は、 <EncryptedData> から派生しており、2つ追加の特長をもつ
      • <CipherData> は常に秘密鍵を暗号かしたもの
      • <EncryptedKey> は、 <EncryptedData> の <KeyInfo> 内に保持される場合がある
    XML-ENC スキーマの概要 EncryptedData or EncryptedKey EncryptionMethod (optional) Optional element that describes the encryption algorithm used to protect the CipherData. CipherData Envelopes or references encrypted data KeyInfo Information identifying the key used to encrypt the CipherData EncryptionProperties (optional) Optional sub-element
  • その他のセキュリティ関係の XML 標準
    • OASIS
      • WS-Security
      • XACML
    • Security Assertion Markup Language (SAML)
      • XML syntax on security assertions
        • Authentication assertions
        • Attribute assertions
        • Authorization decision assertions