Annotation of OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw, Revision 1.4
1.4 ! takayama 1: $OpenXM: OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw,v 1.3 2004/10/14 07:05:21 takayama Exp $
1.1 takayama 2: /*&C
1.2 takayama 3:
1.1 takayama 4: OX-RFC: 104 Nobuki Takayama
1.3 takayama 5: October 14, 2004
1.1 takayama 6:
7: */
8:
1.2 takayama 9: //&en OX-RFC100 over HTTP protocol
1.4 ! takayama 10: //&ja HTTP protocol で包むことによる OX-RFC 100 形式の通信方法
1.1 takayama 11:
12: /*&C
13:
14: Status of this memo
15: This is an experimental specification of sending OpenXM 100 packets
1.2 takayama 16: over http (GET) and https.
1.1 takayama 17: Distribution of this memo is unlimited.
18:
19: Copyright Notice
20: OpenXM.org, 2004
21:
22: */
23:
1.4 ! takayama 24: //&ja @@要約
1.2 takayama 25: //&en @@Abstract
1.1 takayama 26: /*&ja
27:
1.4 ! takayama 28: OpenXM 100 形式の通信を HTTP GET (または POST) で wrap する方法を定義
! 29: する. この wrapping により, 次のことを実現することを目標とする.
! 30: 1. OpenXM 100 対応のサーバを容易に CGI サービス化する.
! 31: 2. OpenXM のサービスを http を基本にグリッド化する.
1.2 takayama 32:
1.4 ! takayama 33: OpenXM 100 ではサーバを立ち上げるには "login" することが一般に必要である.
! 34: OpenXM-100 over HTTP GET (以下 OoHG と略記) は次のように login不要,
! 35: login必要の二つの動作モードをもつ.
! 36: 1. 不特定人が一度のみの計算利用をするような場合に login 不要で動作する.
! 37: 2. OpenXM 100 と同様に login して session を維持することも可能である.
1.1 takayama 38:
1.4 ! takayama 39: このメモでは HTTP GET (POST) と HTTPS しか既存技術は利用していない.
! 40: Web 技術に関して現在研究中や実用化初期段階のさまざまなプロトコルを活用して
! 41: このメモと同等かそれ以上のことを実現することは可能であろう.
! 42: 我々は単純で必要十分な仕様を与えたいと思っている.
! 43: その条件に合致する限り Web 技術に関して現在研究中や実用化初期段階の
! 44: さまざまなプロトコルを活用することを否定するものではない.
! 45: 別のアプローチも試みよりよいプロトコルを作っていきたい.
1.1 takayama 46:
47: */
48:
1.2 takayama 49:
1.4 ! takayama 50: //&ja @@OX-RFC-100 (OpenXM 100) 形式の通信の復習
1.2 takayama 51: //&en @@Review of OX-RFC-100 for this memo.
1.1 takayama 52: /*&ja
53:
1.4 ! takayama 54: OpenXM 100 およびその派生形式の通信は以下のような仕組みで行われる.
1.1 takayama 55:
56: client server
57:
58: ---------------- step 1 ----------------------->
1.4 ! takayama 59: ssh による server への login.
! 60: localhost では ox100start/ox などの launcher が直接起動される.
! 61: controle server, engine server との接続を確立するための
! 62: ポート番号および -control= ... , -data=...
! 63: 認証方法および -authtype=NONE | <<oneTimePassword>>
! 64: 認証パスワード -passControl=... , -passData=...
! 65: も送信される.
! 66: 認証パスワードの暗号 -authEncoding=<<NONE>> | file | RSA
! 67: 化方法の指定.
! 68: << >> は src/kxx/ox の標準値
1.1 takayama 69:
70:
71: <---------------- step 2 -------------------------->
1.4 ! takayama 72: -reverse の場合は <--- の向きに TCP/IP 接続が確立される.
! 73: そうでないときは ---> の向きに TCP/IP 接続が確立される.
1.1 takayama 74:
75: <---------------- step 3 -------------------------->
1.4 ! takayama 76: -authtype=oneTimePassword の時.
! 77: connect した側が accept した側へ oneTimePassword を送る.
1.1 takayama 78:
1.4 ! takayama 79: 以下 launcher の仕事は終了して, engine と control に制御が移る.
1.1 takayama 80: <---------------- step 4 -------------------------->
1.4 ! takayama 81: engine の byte order を設定.
1.1 takayama 82:
83: <---------------------------------------------------->
1.4 ! takayama 84: OpenXM のパケット交換
1.1 takayama 85:
1.4 ! takayama 86: 詳しくは OX-RFC-100, OX-RFC 103 (OX-RFC 100 補遺) を見よ.
1.1 takayama 87:
88: */
89:
1.2 takayama 90: //&en @@Data structure of OoHG
1.4 ! takayama 91: //&ja @@OoHG のデータ形式.
1.2 takayama 92:
1.1 takayama 93: /*&ja
94:
1.4 ! takayama 95: OoHG での通信は送信, 受信で非対称である.
! 96: GET を利用するためデータの形式は RFC 2396 で指定されている
! 97: いわゆる URL エンコーディング方法を用いる.
! 98: GET の利用の代わりに POST method を利用してもよい.
! 99: 送信データは
! 100: キーワード = 値
! 101: を & で区切ったものである. キーワードは英数字と _ をもちいるものとする.
! 102: キーワードと値の組は入れ子構造となってもよい.
1.1 takayama 103:
1.4 ! takayama 104: 受信データは次の形式で送信する.
1.2 takayama 105:
1.4 ! takayama 106: OX100-OVER-HTTP-GET0-に下のキーワードをつないだもの : URL エンコードされた値
1.2 takayama 107:
1.4 ! takayama 108: 以下キーワードを列挙する.
1.1 takayama 109:
1.4 ! takayama 110: oxMessageBody: OpenXM のパケット. 複数の OX パケットを一度に送ってよい.
1.1 takayama 111:
1.4 ! takayama 112: oxMessageEncoding: OpenXM のパケットの encoding 方法の指定.
! 113: <<text_executeString_popString>> が省略時の値.
! 114: 方法は以下のとおり.
! 115: 1. xml_ox100 (OX-RFC100 に定義された XML 表現)
! 116: 2. lisplike_ox100 (OX-RFC100 に定義された Lisp風表現)
! 117: 3. binary_ox100 (OX-RFC100 に定義された binary 表現)
1.1 takayama 118: 4. text_executeString_popString
1.4 ! takayama 119: これは一度のみの実行を想定している.
! 120: executeString に与える引数を text 形式で与える.
! 121: 補助的な値として次のものがある.
! 122: a. 3DES Body を 3DES で暗号化する.
! 123: b. RSA Body を RSA で暗号化する.
! 124: なお oxMessageEncoding キーワードの値は二つ以上存在して
! 125: よい. この場合 and として扱われる. たとえば
1.2 takayama 126: oxMessageEncoding=xml_ox100,3DES
1.4 ! takayama 127: の場合 xml_ox100 形式の情報が 3DES で暗号化されて
! 128: 送られる. ("," は URL encoding される.)
1.1 takayama 129:
1.4 ! takayama 130: dataChannelId: data ポートの番号に相当.
! 131: controlChannelId: control ポートの番号に相当.
! 132: sessionKeyFor3Des: 64 bit x 3 3Des 用の Des Key. サーバ側が生成し,
! 133: RSA で暗号化されサーバより送信される.
! 134: channelKey: サーバより一つ前の HTTP トランズアクションで与えられる
! 135: キー. 第3者が session に割り込むのを禁止するため.
! 136: 10 桁以上の数字で与える.
! 137: サーバが与えるキーは nextChannelKey (Cookie に相当).
! 138: (ネットワークが盗聴されているときは, この方法は無力である.
! 139: https か 次の channelKeyIn3Des, nextChannelKeyIn3Des
! 140: を用いるべきである.)
! 141:
! 142: channelKeyIn3Des: 3Des で暗号化された channelKey.
! 143: nextChannelKeyIn3Des: 3Des で暗号化された nextChannelKey.
! 144:
! 145: responseEncoding: サーバの返答の encoding 方法.
! 146: 省略時には oxMessageEncoding に対応した方法で
! 147: 本体部分は送られる.
! 148: nextChannelKey 等の情報は特に指定しない場合
! 149: OX100-OVER-HTTP-GET-nextChannelKey: による
! 150: header を用いた返答を行う.
! 151: text_execute_popString の時は text 形式で送信される.
! 152: 詳細後述.
! 153: その他.
1.1 takayama 154: 1. presentation_html
155:
1.4 ! takayama 156: loginRSA: RSA 認証による login. challenge , challenge-response は
! 157: お互いの public key を用いて送信される. 下の例参照.
! 158: RSA については OX-RFC-103 を見よ.
1.1 takayama 159: logout: logout
160:
161:
162: sessionTimeOut:
163:
164: controlChannelKey:
165: nextControlChannelKey:
166: challenge:
167: challenge-response:
168:
1.4 ! takayama 169: 以下のキーワードについては後述.
1.2 takayama 170: doSignature:
171: response-doSignature:
172: getMathCap2:
173: grepDirectoryInfo:
174: sendPublicKey:
175:
1.1 takayama 176: */
177:
1.4 ! takayama 178: //&ja @@始めての例
1.2 takayama 179: //&en @@The first example
1.1 takayama 180: /*&ja
181:
1.4 ! takayama 182: 例1.
! 183: fctr(x^2-1); を fctr.cgi へ送信する.
1.2 takayama 184: */
1.1 takayama 185:
1.2 takayama 186: //&C http://fctr.openxm.org/fctr.cgi?oxMessageBody=fctr(x%5E2-1)%3B
1.1 takayama 187:
1.2 takayama 188: /*&ja
1.4 ! takayama 189: oxMessageBody 以外の全てのキーワードが省略されているので,
! 190: anonymous, 1 回のみの実行, executeString & popString, 返答は text 形式
! 191: となり
1.2 takayama 192: */
193: //&C [[1,1],[x-1],[x+2]]
194: /*&ja
1.4 ! takayama 195: が戻る.
1.2 takayama 196: */
1.1 takayama 197:
1.2 takayama 198: /*&ja
1.4 ! takayama 199: 例2.
! 200: 同じ問題を session を確立してから実行する. URL encoding 部分は " ... " で記述.
! 201: RSA 暗号化されてる部分は ' ... 'で記述.
1.2 takayama 202: */
203: /*&C
1.1 takayama 204: --->
205: http://fctr.openxm.org/fctr.cgi?loginRSA="takayama@hoge.org"
206: <---
207: OX100-OVER-HTTP-GET-controlChannelId: 4010
208: OX100-OVER-HTTP-GET-dataChannelId: 4011
209: OX100-OVER-HTTP-GET-challenge: '.............'
210: --->
1.2 takayama 211: http://fctr.openxm.org/fctr.cgi?chanllenge-response='..........'
1.1 takayama 212: <---
213: OX100-OVER-HTTP-GET-nextChannelKey: 143245
214: OX100-OVER-HTTP-GET-nextControlChannelKey: 534256
215: --->
216: http://fctr.openxm.org/fctr.cgi?dataChannelId=4011&
217: channelKey=143245&
218: oxMessageEncoding="lisplike_ox100"&
219: responseEncoding="text"
220: oxMessageBody="(OX_DATA,(CMO_STRING,\"fctr(x^2-1);\"))
221: (OX_COMMAND,(SM_executeString))
222: (OX_COMMAND,(SM_popString))"
223: <---
224: Content-Type: text/plain
225: OX100-OVER-HTTP-GET-nextChannelKey: 345137
226:
227: [[1,1],[x-1],[x+2]]
228: --->
229: http://fctr.openxm.org/fctr.cgi?dataChannelId=4011&
230: channelKey=345137&
231: logout&
232: */
233:
234:
1.4 ! takayama 235: //&ja @@エラーコード一覧.
1.2 takayama 236:
237: /*&ja
238:
1.4 ! takayama 239: HTTP 準拠のエラーの他, CMO エラー object を responseEncoding に従い
! 240: 送る.
1.2 takayama 241:
1.4 ! takayama 242: << 以下まだ検討してない >>
1.2 takayama 243:
244: */
245:
1.4 ! takayama 246: //&ja @@コントロールプロセスとの通信
1.2 takayama 247:
248: /*&ja
249:
1.4 ! takayama 250: 接続中の connection が切断された場合, エンジン, コントロールサーバともに
! 251: 終了する.
! 252: コントロールサーバに中断メッセージを送った場合, OX-RFC-103 の中断動作
! 253: をおこなう.
! 254: << 以下まだ書いてない >>
1.2 takayama 255:
256: */
257:
1.4 ! takayama 258: //&ja @@ホストのなりすましの防止
1.2 takayama 259:
260: /*&ja
1.4 ! takayama 261: https を利用する場合はサーバが偽物でないことの証明は https の機能を用いて
! 262: 実現される. http の場合には RSA public キーを用いてサーバが偽物でない
! 263: ことを証明することが可能である. このためのキーワードが doSignature
! 264: である.
1.2 takayama 265: */
266: //&C doSignature=anonymous@fctr.openxm.org,'challenge words encrypted'
267:
268: /*&ja
1.4 ! takayama 269: 'challenge words encrypted' は anonymous@fctr.openxm.org の public key
! 270: を用いて RSA 暗号化される. サーバは response-DoSignature
! 271: キーワードを用いて送られた words をクライアントに戻す.
1.2 takayama 272:
273: */
274:
1.4 ! takayama 275: //&ja @@OpenXM grid のサービス一覧提供方法.
1.2 takayama 276: //&en @@Directory service for OpenXM grid.
277:
278: //&C @@@mathCap2
279:
1.1 takayama 280: /*&ja
1.4 ! takayama 281: mathCap2 は
! 282: キーワード = 値
! 283: 形式で表現された mathCap である. キーワードは以下のとおり.
1.2 takayama 284:
285: systemName
286: systemVersion
287: acceptOXtags
288: acceptSMtags
289: acceptCMOtags
290:
291: exportedCommands
1.4 ! takayama 292: 実行可能な関数名
1.3 takayama 293:
1.4 ! takayama 294: 値は
! 295: [名前,引数の数,引数1のデータ型, 引数2のデータ型, ...] 形式のリストである.
! 296: 引数の数が -1 の場合引数は不定.
! 297: 引数のデータ型は省略してもよい.
! 298:
! 299: データ型の表現方法は XML name space の表記方法を用い, 文字列型で戻す.
! 300: なおPolymorphic な関数の場合は同じ関数名で表記してかまわない.
! 301: 例:
1.3 takayama 302: ["gcd", 2,
303: "<cmo:cmo_int32 xmlns:cmo="http://www.openxm.org/ox-rfc-100.xml">",
304: "<cmo:cmo_int32 xmlns:cmo="http://www.openxm.org/ox-rfc-100.xml">" ]
305:
1.1 takayama 306:
1.2 takayama 307: resourceLimit
1.4 ! takayama 308: [time,値], [memory,値] 等の リスト
1.1 takayama 309:
1.4 ! takayama 310: 注意: systemName, systemVersion, acceptOXtags, acceptSMtags, acceptCMOtags
! 311: は現在の MathCap の戻す情報にほかならない.
1.3 takayama 312:
1.4 ! takayama 313: 注意: ある一定のサーバでは変数に格納されたデータも関数として取り出す
1.3 takayama 314:
1.4 ! takayama 315: systemName は Java の package の命名方法の真似をする.
! 316: 例: org.openxm.ox_sm1
1.3 takayama 317: org.openxm.ox_polymake_2
318:
1.2 takayama 319: */
1.1 takayama 320:
1.2 takayama 321: //&C @@@SM_getMathCap2
322: /*&ja
1.4 ! takayama 323: SM_printMathCap2 はそのサーバの mathCap2 を CMO データとして戻す
! 324: 新しいスタックマシンコマンドである.
! 325: 何らかのサービスを提供するサーバは
1.1 takayama 326: */
1.2 takayama 327: //&C (OX_COMMAND,(SM_getMathCap2)) (OX_COMMAND,(SM_popCMO))
328: /*&ja
1.4 ! takayama 329: が実行可能であるべきである. このコマンドは anonymous に実行を許す場合
! 330: もあるので, (OX_COMMAND,(SM_getMathCap2)) (OX_COMMAND,(SM_popCMO))
! 331: の省略形式が OoHG のキーワード
1.2 takayama 332: getMathCap2=1
1.4 ! takayama 333: として用意されている.
1.2 takayama 334: */
335:
336: //&C Example: http://fctr.openxm.org/fctr.cgi?getMathCap2=1
1.1 takayama 337:
1.4 ! takayama 338: //&C @@@ディレクトリサービス
1.1 takayama 339: /*&ja
1.4 ! takayama 340: OpenXM grid のディレクトリサービスは各サーバの mathCap2 の情報をもとに
! 341: している. 信用のおけるディレクトリサービスを実現するためには
! 342: サーバの RSA public key が必須である. このキーがあると doSignature
! 343: をもとにディジタル署名された mathCap2 情報を得ることが可能となる.
! 344:
! 345: OpenXM grid のディレクトリ情報は
! 346: キーワード=値
! 347: の集合体である.
! 348: この情報は次のいずれかの方法を用いて表現する.
! 349: 1. キーワードを要素とする XML として表現.
! 350: XML の根要素は OpenXMnode. OpenXMnode の集まりは OpenXMnodes.
! 351: 2. CMO のリストとして キーワード, 値 のペアとして表現する.
1.2 takayama 352:
1.4 ! takayama 353: 必須のキーワード
1.2 takayama 354: OpenXMnodeURL, mathCap2, listOfAnonymousPublicKeys
355:
1.4 ! takayama 356: OpenXM directory サーバはこれらの情報を検索して返答する.
! 357: Directory サーバもまた OpenXM エンジンである.
! 358: たとえば factor をキーワードとする
! 359: grep 検索は以下のとおり.
1.3 takayama 360: (OX_DATA,(CMO_STRING,"factor"))
1.2 takayama 361: (OX_DATA,(CMO_INT32,1))
362: (OX_DATA,(CMO_STRING,"ox104_grepDirectoryInfo"))
363: (OX_COMMAND,(SM_execute))
364: (XO_COMMAND,(SM_popCMO))
1.4 ! takayama 365: 同等な機能を実現する OoHG 用のキーワードとして
1.3 takayama 366: grepDirectoryInfo
1.4 ! takayama 367: がある.
! 368: 例: grepDirectoryInfo="factor"
1.3 takayama 369:
370: */
371:
372: //&en @@@OX-104 Directory service
1.4 ! takayama 373: //&ja @@@OX-104 Directory サービス
1.3 takayama 374: /*&ja
1.1 takayama 375:
1.4 ! takayama 376: Directory サーバはいわゆる agent の一種である.
! 377: Directory サーバは個人のローカルマシンで動作させてよいが,
! 378: ox-rfc-104 では anonymous な計算サービスの検索のため,
! 379: いわゆる根となるべき directory server を以下のように定義する.
! 380: URLは以下のとおり.
1.3 takayama 381: http://ox104_directory.openxm.org/cgi-bin/ox104_directory.sh
382: http://ox104_directory.math.kobe-u.ac.jp/cgi-bin/ox104_directory.sh
383: http://ox104_directory.math.kyushu-u.ac.jp/cgi-bin/ox104_directory.sh
384: http://ox104_directory.s.kanazawa-u.ac.jp/cgi-bin/ox104_directory.sh
385:
1.4 ! takayama 386: OX-server ox104_directory は次の関数をもつ.
1.3 takayama 387: 1. ox104_findSystem(String systemName)
388:
1.4 ! takayama 389: ox サーバを検索して戻す. 見付けたものを (cmo) リストとする.
! 390: 例:
1.3 takayama 391: ox104_findSystem("org.openxm.ox_polymake_2");
392: [server=
393: [url="http://polymake.math.kobe-u.ac.jp/cgi-bin/cgi-polymake.sh",
394: protocol="org.openxm.ox-rfc-104",
1.4 ! takayama 395: description="CGI 版の polymake サーバ. Version 2 ベース",
1.3 takayama 396: version="??",
397: loadAverage=0,
398: cpuType=, memory=, anonymous=]]
399:
1.4 ! takayama 400: なお directoryServer=[...] として情報が戻る場合は,
! 401: あらためてそのサーバに聞く必要がある.
1.3 takayama 402:
1.4 ! takayama 403: 例:
1.3 takayama 404: ox104_findSystem("org.openxm.ox_sm1");
405: [localServer=
406: [path="/usr/local/OpenXM/bin/ox_sm1",
407: protocol="org.openxm.ox-rfc-100"
408: ]]
409:
410: 2. ox104_grepDirectoryInfo(String key)
1.4 ! takayama 411: 情報を grep して該当するサーバを戻す.
1.3 takayama 412:
1.4 ! takayama 413: OX-server ox104_directory は cash 機能を持つべきである.
! 414: サーバは機能の制限をしている場合がある.
! 415: その場合サーバに mathcap2 を問い合わせる必要がある.
1.3 takayama 416: */
1.1 takayama 417:
1.3 takayama 418: //&en @@@list of system names
1.4 ! takayama 419: //&ja @@@システム名のリスト
1.1 takayama 420:
1.3 takayama 421: /*&C
422: org.openxm.ox_polymake_2
423: org.openxm.ox_asir
424: org.openxm.ox_sm1
425: << It has not yet been completed. >>
1.1 takayama 426: */
427:
1.4 ! takayama 428: //&ja @@@anonymous@host の RSA public key の入手方法
1.1 takayama 429:
430: /*&ja
1.4 ! takayama 431: anonymous@host の RSA public key は別の信頼できる情報源から入手するか,
! 432: "host" にたいして
1.2 takayama 433: sendPublicKey="anonymous@host"
1.4 ! takayama 434: 要求を出すことにより入手する.
1.2 takayama 435: */
1.1 takayama 436:
1.2 takayama 437: /*&ja
1.1 takayama 438:
1.4 ! takayama 439: << 以下, まだ検討してない >>
1.1 takayama 440:
441: */
442:
1.4 ! takayama 443: //&ja @@共通関数名
1.2 takayama 444: //&en @@Common name of functions
445:
446: /*&ja
447:
1.4 ! takayama 448: 名前 引数の数
1.2 takayama 449: ox104_equal 2
450: ox104_add 2
451: ox104_sub 2
452: ox104_times 2
453: ox104_divide 2
454: ox104_power 2
455: ox104_inverse 1
456: ox104_translate 2
457:
458: */
459:
460:
1.4 ! takayama 461: //&ja @@関連する技術
1.2 takayama 462: //&en @@Related technologies
463:
464: /*&ja
465:
466: IAMC (symbolicnet.org)
467:
468: */
469:
1.4 ! takayama 470: //&ja @@貢献者および試験実装
1.2 takayama 471: //&en @@Contributors and sample implementations
472:
473:
474: /*&ja
1.4 ! takayama 475: まだサンプル実装はない.
1.2 takayama 476: */
477:
1.4 ! takayama 478: //&ja @@参考文献
1.2 takayama 479: //&en @@Bibliography
480:
481: /*&C
482:
483: [OpenXM-RFC-100] Design and Implementation of OpenXM Client-Server Model
484: and Common Mathematical Object Format. M.Noro, N.Takayama
485:
486: [OpenXM-RFC-101] Protocol to Start Engines. K.Ohara
487:
488: [OpenXM-RFC-103] Supplement to OX-RFC-100
489: --- Broadcasting in process trees and engine authentication.
490: OpenXM committers.
491:
492: [RFC1945] Hypertext Transfer Protocol -- HTTP/1.0. T. Berners-Lee, R.
493: Fielding, H. Frystyk. May 1996. (Format: TXT=137582 bytes) (Status:
494: INFORMATIONAL)
495:
496: [RFC2660] The Secure HyperText Transfer Protocol. E. Rescorla, A.
497: Schiffman. August 1999. (Format: TXT=95645 bytes) (Status:
498: EXPERIMENTAL)
499: */
500:
501:
1.3 takayama 502: $Id: ox-rfc-104.oxw,v 1.14 2004/10/14 07:03:55 taka Exp $
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>