66
XMLベースの 分散処理システム 伊藤 貴之 情報学研究科 非常勤講師 学術情報メディアセンター COE研究員(客員助教授) 日本アイ・ビー・エム()東京基礎研究所 主任研究員

XMLベースの 分散処理システムitot/paper/ItotLJ6.pdf分散処理システム 伊藤貴之 情報学研究科非常勤講師 学術情報メディアセンターcoe研究員(客員助教授)

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

XMLベースの分散処理システム

伊藤貴之

情報学研究科非常勤講師学術情報メディアセンター COE研究員(客員助教授)日本アイ・ビー・エム(株)東京基礎研究所主任研究員

自己紹介

1968年生1997年博士(工学)京大なのに神奈川県在住日本アイ・ビー・エム(株)東京基礎研究所勤務 (1992年より)新幹線で京大に出勤

専門分野CG, CAD, CAE, Visualization 分散処理システム、ネットワークセキュリティ、インターネットプロトコル

音楽?

連絡先: [email protected]

この講義で習得する知識は…多種多様な計算環境が自在に接続できるための基盤技術

インターネット

企業や大学のイントラネット

プロバイダと家庭用PC

携帯電話会社

並列計算システム

この基盤技術の実現に必要なものは?

インターネット

企業や大学のイントラネット

プロバイダと家庭用PC

携帯電話会社

並列計算システム

例えば、こんな回答が考えられるプラットフォームや開発言語に依存しないシステムデータ書式やAPIの標準化インターネット上での接続性のよさ計算機資源の有効活用セキュリティの確保

この講義で学ぶ主な項目

XMLデータ書式の標準化

Webサービスインターネットを介した自在な計算機接続の実現へ

グリッド・コンピューティング

計算機資源の透過的な共有による有効活用へ

セキュリティ(電子署名・暗号化)

データの完全性(改ざんを防ぐ)や機密性(盗聴を防ぐ)

講義内容

XMLWebサービスグリッド・コンピューティング

セキュリティ

総論

XMLとは … (HTMLと比較して学ぶ)

HTML = Hyper Text Markup Language以前は Hyper Text Modeling Language とも言われていた主にWebブラウザでの表示を目的とするタグを使って文書の構造を定義する (見栄え目的)構造とは: 見出し、本文、段落、引用、画像挿入…

XML = Extensive Markup Language Webブラウザに限定せず、幅広く計算機アプリケーションに用いられるHTML と同様に、タグを用いて文書に木構造を与える拡張性: タグを自由に定義できる

整形式: 記述したタグは必ず閉じないといけない閉じ方1: <aaa> … </aaa>閉じ方2: <aaa ….. />

HTMLとXMLの例

<PAGE><BODY>

<H1> 伊藤貴之です。 </H1>よろしくおねがいします。<P>

<A HREF=…> メール… </A><IMG SRC=“takayuki,jpg” />

</P></BODY>

</PAGE>

(2) (1)をXML的に書き換えた例

<HTML><BODY>

<H1> 伊藤貴之です。</H1>よろしくおねがいします。<P><A HREF=“mailto:[email protected]”> メールはこちら </A><IMG SRC=“takayuki.jpg”>

</BODY></HTML>

見出し

本文

段落

引用

画像挿入

(1) HTML の例

HTML

BODY

H1 P

AHREF IMG SRC

(3) (2)の木構造を表現した例

タグを自由に定義できるといっても…

例えば、こんなXMLを処理するためには、あらかじめ何かを知る必要があるのでは?

<book-list><book>

<name> XML </name><publisher> A出版 </publisher><price> 2000 </price>

</book><book>

<name> Webサービス </name><publisher> B出版 </publisher><price> 2500 </price>

</book></book-list>

それぞれのタグの意味は?

bookの下は name, publisher, price の3個で十分?

Price の下は整数?文字列?

Bookは2個で固定?個数制限なし?

スキーマ

要素(タグ)の種類、出現(場所や順番)などに関する定義

スキーマを記述する言語DTD (Document Type Definition) 要素の名前、親子関係などを記述できるXMLスキーマ

XMLスキーマ要素によって構成されるデータ構造・データ書式を記述できる

XMLスキーマ自体もXMLの一種である

スキーマのおかげで、XMLは計算機どうしの自動処理に向いた言語として使われる妥当性:スキーマに従ったXML文書は計算機が信用できる自己記述性:スキーマ記述言語が動的にXML文書の構造を定義できる

DTDの例

<PAGE><BODY>

<H1> 伊藤貴之です。</H1>よろしくおねがいします。<P><A HREF=mailto:[email protected]> メールはこちら </A><IMG SRC=“takayuki.jpg”>

</BODY></PAGE>

<!ELEMENT PAGE (BODY)><!ELEMENT BODY (H1, P+)><!ELEMENT H1 (#PCDATA)><!ELEMENT P (A | IMG | #PCDATA)><!ELEMENT A (#PCDATA)><!ELEMENT IMG EMPTY><!ELEMENT A HREF CDATA #REQUIRED><!ELEMENT IMG SRC CDATA #REQUIRED>

PAGEの下にはBODYBODYの下にはH1と1個以上のP

BODYの下には文書Pの下にはA,IMG,文書のいずれかAの下には文書IMGの下には何もない

Aには属性HREFが必須

IMGには属性SRCが必須

XML

DTD

XMLスキーマの例

<book-list><book>

<name> XML </name><publisher> A出版 </publisher><price> 2000 </price>

</book><book>

<name> Webサービス </name><publisher> B出版 </publisher><price> 2500 </price>

</book></book-list>

<schema><element name=“book-list”>

<complexType><sequence>

<element ref=“book”maxOccurs=“unbounded” />

</sequence></complexType>

</element><element name=“book”>

<complexType><sequence>

<element name=“name” /><element name=“publisher” /><element name=“price” />

</sequence></complexType>

</element></schema>

要素名はbook-list複合型

下にはbook要素(個数制限なし)

要素名はbook

複合型

下にはname,publisher,priceの3要素(1個ずつ)

XML XMLスキーマ

名前空間

個々の要素名がどこで定義されたのかを明記する方法上位要素にて、【接頭尾=“…”】の形で、個々の要素名がどこで定義されたかを明記

当該する下位要素にて、要素名の前に接頭尾をつける

<unified-book-list xmlns:fb=“http://fbook.xsd” xmlns:db=http://dbook.xsd xmlns=“ubook.xsd” >

<description> 国外書籍と国内書籍の総合リスト </description><fb:book>

<fb:title> XML </fb:title><fb:date> Jan/3/2003 </fb:date><fb:price> 2000 </fb:price>

</fb:book><db:book>

<db:name> Webサービス </db:name><db:publisher> B出版 </db:publisher><db:price> 2500 </db:price>

</db:book></unified-book-list>

接頭尾fbがついているのでfbook.xsdに定義された要素名

接頭尾dbがついているのでdbook.xsdに定義された要素名

3つの名前空間の定義 (fb,db,デフォルト)

XML関係ツール(1) パーサー

XML文書を解析し、開発言語のデータ構造に変換するソフトウェア

DOMパーサー: XML文書の木構造を生成する

SAXパーサー: XML文書の要素を読むたびにイベントを発する

<soap><body>

<req1><req2>

….

Parser

soap

body …

req1 req2

<soap><body>

<req1><req2>

….

Parser

soap

body

req1

req2

XML関連ツール(2)データバインディング(開発言語との相互変換 )

スキーマ記述言語 (DTD)<xml …><!ELEMENT purchaseOrder

(customer, comment, items)><!ELEMENT customer

(name, customerId, address)>…

開発言語 (Java)public class purchaseOrder() {

private Customer _customer;private String _comment;private String _items;

Customer getCustomer(){ return _customer; }String getComment(){ return _comment; } String getItems(){ return _items; }

private class Customer {private String _name;….

}….

}

復習をかねて:XMLを用いることの恩恵

文法の要旨は標準化されている

→汎用的なソフトウェアを多方面に使いまわせる

→計算機どうしの自動処理に向いている

要素名を自由に定義できる

→多様なアプリケーションに利用可能

テキスト(=可視)である

→バイナリデータに比べて理解・デバッグ等が容易

→OSやプログラミング言語に依存しないデータ記述

講義内容

XMLWebサービスグリッド・コンピューティング

セキュリティ

総論

Web サービス とは・・・インターネットを使ったオープンな分散処理モデル公開されたサービスプログラムをクライアントが自由に呼び出せる仕組み

クライアント

アプリケーション

インターネット(ウェブ)

要求情報

返答情報

ウェブサーバー

サービスプログラム

Web ページからWeb サービスへ

Phase1: HTML(静的なWebページ)

ブラウザ

Webサーバー

リクエスト HTML

Phase2: CGI(掲示板・チャット等)

ブラウザ

Webサーバー

データ付リクエスト

動的なHTML

Perl

データ更新

Phase3:動的ウェブ(ゲーム・ショップ等)

ブラウザ

Webサーバー

データ付リクエスト

動的な表示

アプリサーバー

プログラム実行

Phase4:Web サービス

アプリ

Webサーバー

パラメータを含むXML

返り値を含むXML

アプリサーバー

プログラム実行

メッセージ例:CGI掲示板へのカキコミ

POST /Delivery HTTP/1.1Content-Type: text/plain; charset=utf-8Content-Length: nnn

…はじめまして。伊藤です。…

HTTP/1.1 200 OKContent-Type: text/html; charset=utf-8Content-Length: mmm

<html> …はじめまして。伊藤です。… </html>

Web サーバー

リクエストメッセージ:掲示板へのカキコミ内容を含むリクエスト

レスポンスメッセージ:掲示板へのカキコミ内容を含むHTML

掲示板ユーザー

メッセージ例:Web サービスの要求と回答

POST /Delivery HTTP/1.1Content-Type: text/xml; charset=utf-8Content-Length: nnnSOAPAction: “http://com.com/service/

<soap:Envelope> …はじめまして。伊藤です。… </soap:Envelope>

HTTP/1.1 200 OKContent-Type: text/xml; charset=utf-8Content-Length: mmm

<soap:Envelope> …こちらこそはじめまして。サーバーです。… </soap:Envelope>

Web サーバー

リクエストメッセージ:SOAPによる要求情報

レスポンスメッセージ:SOAPによる返信情報

アプリケーションによる呼出し

main() {…call();…

}

Web サービスを実現するための典型的なアーキテクチャ

クライアント サーバー

ウェブサーバー

HTTPサーバー

SOAPエンジン

SOAPエンジン

サービスプログラム

返答情報

要求情報

要求情報を含むSOAP

返答情報を含むSOAP

アプリケーション

要求情報

返答情報

SOAP (Simple Object Access Protocol)

Web サービスでデータ等を運ぶために用いられているXMLベースのメッセージ形式Envelope = 封筒、Header = 封筒書き、Body = 便箋SOAP自体は通信プロトコルを選ばない(HTTPでもFTPでもSMTPでも…)が、HTTPを用いる場合が最も多い2種類のインタフェース:SOAP-Messaging と SOAP-RPC

SOAPヘッダー:主に通信上の付加情報を含む

SOAPボディー:主にアプリケーションデータを含む

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv=….>

<soapenv:Header> …

</soapenv:Header> <soapenv:Body …. >

......

</soapenv:Body></soapenv:Envelope>

SOAP-Messaging:アプリケーションのXML文書をSOAPで運ぶ方法

SOAPボディーの下にXML文書を挿入する挿入するXML文書には名前空間を定義する必要がある

<unified-book-list xmlns:fb=… xmlns:db=… xmlns=… >

<description> 総合リスト </description><fb:book>

<fb:title> XML </fb:title><fb:date> Jan/3/2003 </fb:date><fb:price> 2000 </fb:price>

</fb:book><db:book>

<db:name> Webサービス </db:name><db:publisher> B出版 </db:publisher><db:price> 2500 </db:price>

</db:book></unified-book-list>

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv=….>

<soapenv:Header> …

</soapenv:Header> <soapenv:Body xmlns:ub=…. >

<ub:unified-book-list xmlns:fb=… xmlns:db=… >

<ub:description> …</ub:description><fb:book> … </fb:book><db:book> …</db:book>

</ub:unified-book-list></soapenv:Body>

</soapenv:Envelope>

アプリケーションのXML文書 SOAP文書

SOAP-RPC: サーバーの関数やメソッドを呼び出すためにSOAPを使う方法リクエスト側のSOAPメッセージには、引数が含まれるレスポンス側のSOAPメッセージには、返り値が含まれる

クライアント サーバー: server.com

SOAPエンジン

中間コード

add(){receive(

“add”, a,b);c=add(a,b);send(c);

}

add(a,b){return a+b;

}

サービスプログラム

main() {a=1;b=2:c=add(a,b)

}

アプリケーション 中間コード

add(){send(

server.com,“add”, a,b);

c=receive();return c;

}

SOAPエンジン

add,a,b

c

SOAP-RPC におけるSOAPの例

main() {a=1;b=2:c=add(a,b)

}

アプリケーション

<soapenv:Body xmlns:calc=“http://Calc”><calc:add xmlns:xsi=“http://XMLSchema-instance”

xmlns:xs=“http://XMLSchema”><calc:a xsi:type=“xs:int”> 1 </a><calc:b xsi:type=“xs:int”> 2 </b>

</calc:add></soapenv:Body>クライアントからのリクエストSOAPの一部要求名add, 変数名a,b, 変数の型int, 値1,2 が書かれている

<soapenv:Body xmlns:calc=“http://Calc”><calc:addResponse xmlns:xsi=“http://XMLSchema-instance”

xmlns:xs=“http://XMLSchema”><calc:c xsi:type=“xs:int”> 3 </a>

</calc:addResponse></soapenv:Body>

サーバーからのレスポンスSOAPの一部返信名addResponse, 変数名c, 変数の型int, 値3 が書かれている

Web サービスの普及に必要なもの:サービスレジストリとWSDL,UDDIサービスレジストリサービスプロバイダによって公開されたサービスを登録し、サービスリクエスタが発見できるようにする仕組み

WSDL: サービスを公開するための記述言語UDDI:サービスレジストリのインタフェースの記述言語

サービスプロバイダStep 3. サービス要求&提供

SOAP

サービスリクエスタ

サービスレジストリ

UDDI Step 1.サービス登録依頼

WSDL

Step 2.サービス検索&紹介

WSDL

上記定義に基づいたサービスのアドレス等

手続きechoのためのSOAPメッセージの定義

入力echoRequestと出力echoResponseを持つ手続きecho

メッセージ型 echoRequest と echoResponse

データ型 MyComplexType

WSDLの例

<definitions … ><types>

<schema><complexType name="MyComplexType">

<sequence><element name="simpleItem" … />

</sequence></complexType><element name="MyElement“

type="MyComplexType" /> </schema>

</types><message name="echoRequest">

<part element="MyElement" /> </message><message name="echoResponse">

<part element=MyElement" /> </message>

<portType name="Echo"><operation name="echo“

parameterOrder="MyElement"><input message="echoRequest" /><output message=echoResponse" />

</operation></portType><binding name=“EchoSoapBinding” ….>

<operation name="echo"><input name="echoRequest">

<body …><input><output name="echoResponse">

<body …></output>

</operation></binding><service name="ComplexEchoService">

<port binding="EchoSoapBinding" …><address location="http://..." />

</port></service>

</definitions>

WSDLで用いられる代表的な要素名

[types]要素の型に関する宣言の一式を括ったもの[complexType]複数の要素を下にもつ要素の型宣言[message]要素の集合で構成されるXML文書の宣言[operation]手続き(関数やメソッド)の宣言[portType] messageとoperationの一式を括ったもの[binding] プロトコルの詳細を記述するために、messageの詳細を記述した宣言

[service] binding やアドレスなどの集合で表現されるWebサービスの宣言

WSDLから中間コードを作成するXMLから開発言語(Java等)への変換により、以下の中間コードを自動生成するツールがあるクライアント側:スタブ サーバー側:スケルトン

サーバー: server.com

SOAPエンジン

中間コード(スケルトン)

add(){receive(

“add”, a,b);c=add(a,b);send(c);

}

add(a,b){return a+b;

}

サービスプログラム

クライアント

main() {a=1;b=2:c=add(a,b)

}

アプリケーション 中間コード(スタブ)

add(){send(

server.com,“add”, a,b);

c=receive();return c;

}

SOAPエンジン

add,a,b

c

WSDL

複数のサービスを動的に接続する~ BtoBtoCの実現へ

サービスプロバイダD

サービスプロバイダC

サービスプロバイダB

サービスプロバイダA

サービスリクエスタ

サービスレジストリ

サービスブローカ

(1) サービス一式の要求

(2) サービスの検索… WSDL一式入手

WSDL C

WSDL D

WSDL A

WSDL B

(4) 個々のサービスの要求・提供

(5) サービス一式の提供

(3) サービスの選択… WSDLからコード生成

復習をかねて:Web サービスを用いることの恩恵

多くの企業・団体の支持SOAP, WSDL, UDDI などのインタフェースはすべて標準化

インターネットのインフラと相性がよい最初からHTTPを使うことを意識している(注) HTTP以外のプロトコルでも利用可能

XMLの恩恵を継承多様なアプリケーションに利用可能

OSや開発言語に依存しない運用が可能

人間の介在が不要自律的にサービスを検索・要求できる

自律的に複数のサービスを連携できる

講義内容

XMLWebサービスグリッド・コンピューティング

セキュリティ

総論

グリッド・コンピューティング

分散した多種多様の情報資源(CPU, 記憶媒体, ソフトウェア, 周辺装置など)を複数の人で透過的に共有できる仕組みを提供する基盤技術

「仮想組織」が情報資源を括る、という考え方に基づく

電気・水道・ガスと同様、接続するだけでいつでも資源にアクセスできる、という環境を目標とする

Grid=電力網、を語源とする

組織A

組織B

組織C

組織D

仮想組織

Globus ToolkitGlobusプロジェクトによる、Gridのためのデファクト標準(=事実上の標準)ソフトウェアツール群

OS,ハードウェア

高級ミドルウェア

アプリケーション

GSI (セキュリティ)

GridFTP(データ転送)

MDS(情報提供)

GRAM(資源管理)

低級ミドルウェア(Globus Toolkit)

データへのアクセス、データの転送、レプリカの作成や更新、などを実現する機構

資源の状況、有効性、などの情報を統一的に提供する機構

リモートからのジョブの操作や管理、通信、などを実現する資源管理機構

個々の資源の管理体制にあわせながら柔軟なアクセス制御、シングルサインオンなどを実現するセキュリティ管理機構

Globus Toolkit の貢献と課題貢献:主に科学技術計算の分野において多数の計算機間におけるセキュリティ管理

大規模計算のための資源状況の検索や監視

大規模分散データへの高速アクセス

課題:他の分野にも適用するために…⇒少数の熟達者だけの環境よりも、もっと使いやすい環境へ多数のプロトコルやセキュリティ技術の統一化

高級ミドルウェアの充実システムの仮想化、ワークフローの制御…

Webサービスの考え方を適用

OGSA (Open Grid Services Architecture)

OGSA (Open Grid Service Architecture)

Grid技術の上にWebサービス技術を結合アプリケーションのみならず、Gridの提供するミドルウェア機能をすべて「サービス」にすることが可能

XMLをベースにして標準化されたインタフェースを適用

Grid

情報提供 資源管理アプリケーションWSDL

SOAP

SOAP

グリッドからOGSAに移行することで

計算機資源を有効活用するための機能を…Grid: 難解なAPIを勉強しないと利用できないOGSA: サービス化すれば簡単に利用できる

多種多様なセキュリティやプロトコルを…Grid: その都度ユーザーが選択して実装する必要があるOGSA: サービスに隠蔽されているので意識しなくてもよい

異なる計算機や開発言語の接続性は…Grid: その都度考えて実装する必要があるOGSA: XMLベースで標準化されているので容易である

OGSAのためのWebサービスの拡張(1)サービスインスタンス(実体)の生成・消滅

Webサービスでは、サービスは継続的に稼動するのが原則OGSAでは、動的かつ一時的にサービスを生成・消滅できるファクトリーサービスへの要求で、サービスインスタンスを生成する

サービスインスタンスは明示的に破壊することもできるし、一定期間の寿命をもたせることもできる

資源の最適活用のために、例えば最も手の空いているCPUをそのつど選んでサービスインスタンスを立ち上げる、ということが可能になる

ファクトリーサービス

サービスインスタンス

(1) ファクトリーサービスにインスタンス生成を要求

(2) 指定された計算機上にインスタンスを生成

(3) サービスインスタンスにアクセス

OGSAのためのWebサービスの拡張(2)ハンドルリゾルバからのWSDL入手

OGSAでは、サービスはGSH(Grid Services Handle)を持つGSH は URI (URL のような固有名詞) として記述するハンドルリゾルバサービスにGSHを送ると、それに対応するサービスの記述言語である GSR(Grid Services Reference)を返すGSRにWSDLのような標準化された言語を採用すると、便利であるGSRに現在稼動しているサービスインスタンスのアドレスを記述できるような機構があると、便利である

ハンドルリゾルバサービス

サービスインスタンス

(1) ハンドルリゾルバサービスにGSHを提示

(3) サービスインスタンスにアクセス

(2) 受信したGSRをもとにコードを生成

OGSAのためのWebサービスの拡張(3)非同期通知

OGSAでは、リクエストメッセージとは非同期に通知メッセージを送付することができるリクエスタは通知メッセージの依頼、停止、状況照会ができる

例えば、継続的に稼動しているサービスインスタンスから、リクエスタが状況報告を自動受信したいとき、などに便利である

(1) サービスインスタンスに通知メッセージを依頼

(2) リクエストが来なくても通知メッセージを自動送付

復習をかねて: Grid技術の上にWebサービス技術を結合

Webサービスの恩恵をGrid上で実現計算機資源機能の活用度の向上セキュリティ、プロトコルなどの隠蔽化異なる計算機、開発言語間の接続性の向上

サービスインスタンスの動的な生成サービスを稼動するのに最適な計算機を自在に選択

ハンドルリゾルバによるサービス記述言語の供給サービスインスタンスの状況に応じて動的にサービス記述言語を生成し、クライアント側もそれに応じて動的にコードを生成できる

非同期通知サービスに常時接続していなくても通知を受け取れる

講義内容

XMLWebサービスグリッド・コンピューティング

セキュリティ

総論

セキュリティと一言にいっても、いろいろな研究分野がありますが…

暗号化

電子署名

SPAM対策

ウィルス対策

ファイルシステム管理

認証

アカウント管理

不正侵入発見

ファイアウォール

セキュア・シェル

コンテンツ管理

本講義の対象

本講義が対象とする脅威と対策

脅威なりすまし: 別の計算機のふりをしてメッセージを送る

改ざん:第三者がメッセージを書き換える

盗聴:第三者がメッセージを盗み見る

否認:メッセージ送信者があとになって「送信してない」と言い張る

対策証明書などを用いた認証→なりすまし防止

メッセージ認証コード →改ざん防止

メッセージへの電子署名→改ざん、否認防止

メッセージの暗号化→盗聴防止

本講義で扱うセキュリティ技術の要旨

電子署名:メッセージの完全性

暗号化:メッセージの機密性

本文

s3De…

本文

本文から算出した署名を添付

メッセージ送付

s3De…

本文

署名検証(受信者による署名の再算出)

本文

検証(再算出)結果が正しければ本文は改ざんされてことを信用できる

本文 Sq7R…

本文を暗号値に差し替える

メッセージ送付

Sq7R…

送信者の用いた鍵に対応する鍵を持っている受信者だけが復号化できる

本文

暗号化により他人には盗聴されない

前提知識(1) 共有鍵方式暗号…対称鍵方式、秘密鍵方式ともいう同じ鍵を暗号化と復号化の両方に使う

通信相手ごと、通信セッションごとに、対象者だけで鍵を共有し、その外には漏らさないように使う

ストリーム暗号: RC4 (SSLで使われている)ブロック暗号: DES, TripleDES, AES対象者だけで鍵を共有する環境を用意する必要がある

前提知識(2) 公開鍵方式暗号

送信者の公開鍵で暗号化したら、受信者の私有鍵で復号化

送信者の私有鍵で暗号化したら、受信者の公開鍵で復号化公開鍵: 利用者に無制限に渡せる鍵

私有鍵: 自分だけで利用し、他者に一切渡さない鍵

RSA, DSA, Diffie-Hellmen など機密性が高いかわりに、私有鍵使用時の処理時間が大きい

前提知識(3) メッセージダイジェスト

ハッシュ関数など、元に戻せない関数を用いる

MD5, SHA1 など電子署名に用いる

前提知識(4) PKI (Public Key Infrastructure)

信用できる認証機関が、公開鍵証明書と私有鍵のペアを発行する仕組み

私有鍵で電子署名を生成し、公開鍵証明書と一緒に送れば、受信者は公開鍵証明書を用いて電子署名を検証できる

認証機関

文書作成者

公開鍵証明書と私有鍵を発行

s3De…

本文

私有鍵で本文の署名を算出する

s3De…

本文

公開鍵証明書をつけて送信する

文書受信者

公開鍵を使って署名を検証する

SSL (Secure Socket Layer)

多くのWeb サイトで採用されているセキュリティ技術Web ページだけでなく、Web サービスにも適用可能「なりすまし」「改ざん」「盗聴」を防ぐことができる

サービスリクエスタ サービスプロバイダ

1. 公開鍵証明書の交換

2. 共有鍵の使用合意

3.共有鍵を用いた認証コード算出、暗号化 本文 認証コード

暗号化

中間サーバー

SSLよりも安全なWebサービスのために:SOAP文書への電子署名や暗号化公開鍵による電子署名で「否認」を防ぐ

中間サーバーによって電子署名や暗号化を解消されないので、中間サーバーによる改ざんや盗聴を防ぐことができる

複数のサービスに対して選択的にセキュリティを適用できる

サービスリクエスタ

s3De…

s3De…

Aの鍵で暗号化 Bの鍵で暗号化

サービスプロバイダA

サービスプロバイダB鍵をもたないので改ざん・盗聴できない

s3De…

s3De…

Aの鍵で復号化

s3De…

s3De…

Bの鍵で復号化

SOAP文書へのセキュリティの適用方法XML電子署名・XML暗号化のSOAP文書への適用鍵や証明書などをSOAP文書に挿入

受信側送信側

アプリケーションアプリケーション

SOAP構築SOAP構築

署名生成・暗号化署名生成・暗号化

アプリケーションアプリケーション

SOAP解読SOAP解読

署名検証・復号化署名検証・復号化

<SOAP><body>Itoh.T

</body></SOAP>

<SOAP><body>XdRswr..

</body></SOAP>

<SOAP><body>Itoh.T

</body></SOAP>

<SOAP><body>XdRswr..

</body></SOAP>

WebWeb

署名検証署名生成

署名情報を再生成

XML電子署名の処理手順

….

署名情報を生成

署名対象

ダイジェスト値

署名情報を受取

ダイジェスト値

ダイジェスト値

署名値を受取

復号化ダイジェスト値

暗号化

署名値を生成

ダイジェスト値

算出

算出

署名対象

ダイジェスト値

算出

ダイジェスト値

比較

算出

署名対象

ダイジェスト値比較

算出

署名対象

ダイジェスト値比較

算出

署名対象の参照 (SHA1でダイジェスト)

署名値算出に用いる署名情報

署名値算出に用いる鍵情報

署名値 (DSA で暗号化)

<Signature … ><SignedInfo>

<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#dsa-sha1"/> <Reference URI=“#SignHere">

<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <DigestValue>j6lwx3rvEPO0vKtMup4NbeVu8nk=</DigestValue>

</Reference> </SignedInfo> <SignatureValue>MC0CFFrVLtRlk=...</SignatureValue> <KeyInfo> … </KeyInfo>

</Signature><Body Id=“SignHere”>

….</Body>

XML電子署名を適用した文書の例

署名対象(ここに対してダイジェスト算出)

XML電子署名に用いられる主な要素

Signature (署名)SignatureValue (署名値)SignedInfo (署名情報)

CanonicalizationMethod: XML正規化手法SignatureMethod: 署名値算出アルゴリズムReference: 署名対象への参照

Reference (署名対象への参照)Transforms: XML処理手法DigestValue: ダイジェスト値DigestMethod: ダイジェスト値算出アルゴリズム

KeyInfo (署名値算出に用いた鍵の情報)KeyName: 鍵の名前KeyValue: 鍵の実体

復号化暗号化

共有鍵 S4rGq0sItoh T.

メッセージ暗号化

Itoh T.共有鍵

メッセージ復号化

S4rGq0s

鍵復号化

共有鍵 or私有鍵

共有鍵(自動生成)

メッセージ暗号化

共有鍵(自動生成)

S4rGq0sItoh T.

鍵暗号化

共有鍵 or公開鍵

メッセージ復号化

Itoh T.S4rGq0s

XML暗号化の処理手順

暗号化された鍵も同時に送付

メッセージの暗号化に用いる鍵の情報

メッセージの暗号化

メッセージ暗号化結果

暗号化アルゴリズム

この鍵によって暗号化されたメッセージの参照

メッセージの暗号化に用いる鍵の暗号化

鍵を暗号化した結果

暗号化アルゴリズム

鍵の暗号化に用いる鍵の情報

<EncryptedData Id='ED' …> <EncryptionMethod Algorithm='http://…/xmlenc#aes128-cbc'/> <ds:KeyInfo …>

<ds:RetrievalMethod URI='#EK' … /> </ds:KeyInfo> <CipherData><CipherValue>DEADBEEF</CipherValue></CipherData>

</EncryptedData>

<EncryptedKey Id='EK' xmlns='http://www.w3.org/2001/04/xmlenc#'> <EncryptionMethod Algorithm="http://.../xmlenc#rsa-1_5"/> <ds:KeyInfo xmlns:ds='http://www.w3.org/2000/09/xmldsig#'>

<ds:KeyName>John Smith</ds:KeyName> </ds:KeyInfo> <CipherData><CipherValue>xyzabc</CipherValue></CipherData> <ReferenceList>

<DataReference URI='#ED'/> </ReferenceList>

</EncryptedKey>

XML暗号化を適用した文書の例

XML暗号化に用いられる主な要素

EncryptedData (XML文書の暗号化結果)EncryptedKey (鍵の暗号化結果)EncryptionMethod (暗号化アルゴリズム)CipherData (暗号化結果)

CipherValue: 暗号値ds:KeyInfo鍵情報… XML-Signature参照)

ReferenceListこの鍵を用いた暗号化結果への参照リストDataReference: XML文書の暗号化結果の参照KeyReference: 鍵の暗号化結果の参照

SOAP文書へのセキュリティの適用例

署名値算出に用いた鍵は証明書の中にあるので、鍵情報として証明書を参照している

送信者の認証に用いる証明書(この証明書は、署名に用いた鍵を内部に含んでいる)

署名対象の参照

署名対象

暗号化された部分

メッセージの暗号化に用いた鍵 (暗号化された部分への参照を含む)

署名に関する記述

<S:Envelope …><S:Header> <wsse:Security>

<wsse:BinarySecurityToken … Id="X509Token" > MIIEZzCCA9... </wsse:BinarySecurityToken><xenc:EncryptedKey>

…<xenc:ReferenceList><xenc:DataReference URI="#enc1"/></xenc:ReferenceList>

</xenc:EncryptedKey><ds:Signature>

<ds:SignedInfo>…<ds:Reference URI=“dsig1”> … </ds:Reference>

</ds:SignedInfo><ds:SignatureValue> Hp1ZkmFZ/... </ds:SignatureValue><ds:KeyInfo>

<wsse:SecurityTokenReference><wsse:Reference URI="#X509Token"/>

</wsse:SecurityTokenReference></ds:KeyInfo>

</ds:Signature></wsse:Security> </S:Header>

<S:Body Id=“dsig1”><xenc:EncryptedData … Id="enc1"> … </xenc:EncryptedData>

</S:Body></S:Envelope>

SOAP文書のセキュリティに用いられる主な要素

Security以下の情報を束ねて SOAPヘッダーに格納する

XML電子署名の情報XML暗号化に用いた鍵の暗号化結果送信者の認証などに必要な情報

BinarySecurityToken送信者の認証などに必要な情報のうち、バイナリ形式のもの例えば、X509証明書、Kerberosチケットなど

UsernameToken送信者の認証などに必要な、ユーザーID、パスワードなど

SecurityTokenReferenceBinarySecurityTokenや UsernameTokenへの参照証明書の中に鍵がある場合、KeyInfo要素の中に記述される

復習をかねて: SOAPメッセージへのセキュリティ適用

電子署名・暗号化・認証技術の適用証明書などを用いた認証→なりすまし防止メッセージへの電子署名→改ざん、否認防止メッセージの暗号化→盗聴防止

セキュリティの主要なアルゴリズム共有鍵方式暗号公開鍵方式暗号メッセージダイジェスト

SOAPメッセージへのセキュリティ適用… SSLよりも安全性の高いセキュリティメカニズム公開鍵による電子署名で「否認」を防ぐ中間サーバーによって電子署名や暗号化を解消されないので、中間サーバーによる改ざんや盗聴を防ぐことができる複数のサービスに対して選択的にセキュリティを適用できる

講義内容

XMLWebサービスグリッド・コンピューティング

セキュリティ

総論

この講義で習得した知識は…多種多様な計算環境が自在に接続できるための基盤技術

インターネット

企業や大学のイントラネット

プロバイダと家庭用PC

携帯電話会社

並列計算システム

XMLデータ書式の標準化

Webサービスインターネットを介した自在な計算機接続の実現へ

グリッド・コンピューティング計算機資源の透過的な共有による有効活用へ

セキュリティ(電子署名・暗号化)データの完全性(改ざんを防ぐ)や機密性(盗聴を防ぐ)

今後考えうる研究テーマは、例えば…

XMLのさらなる普及XML以前の計算機技術をどのように吸収するか?

ミドルウェアの処理速度の向上

標準化と引き換えに、データは拡大している

ユビキタス機器も視野に入れた分散計算環境現在の携帯電話は、7年前のPCより高性能

新たなセキュリティ対策

新しいシステムには新しい破壊者がつきもの

本講義の課題

講義終了時にお伝えします。

課題提出は、メールで [email protected]へこの資料ファイルは以下のURLからも入手できます

http://hawk.ise.chuo-u.ac.jp/makino-lab/person/itot/lecuture/Kyoto-Lecture2003.pdf