[BACK]Return to ox-rfc-104.oxw CVS log [TXT][DIR] Up to [local] / OpenXM / doc / OpenXM-specs

File: [local] / OpenXM / doc / OpenXM-specs / ox-rfc-104.oxw (download)

Revision 1.4, Sat Mar 14 01:21:56 2020 UTC (4 years, 1 month ago) by takayama
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +199 -199 lines

euc --> utf8.
A note on XQuartz X11 and OX_XTERM_GEOMETRY.

$OpenXM: OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw,v 1.4 2020/03/14 01:21:56 takayama Exp $
/*&C

OX-RFC: 104                                    Nobuki Takayama
                                               October 14, 2004

*/

//&en  OX-RFC100  over HTTP protocol
//&ja  HTTP protocol で包むことによる OX-RFC 100 形式の通信方法

/*&C 

Status of this memo
  This is an experimental specification of sending OpenXM 100 packets
  over http (GET) and https.
  Distribution of this memo is unlimited.

Copyright Notice
  OpenXM.org, 2004

*/

//&ja @@要約
//&en @@Abstract
/*&ja

  OpenXM 100 形式の通信を HTTP GET (または POST) で wrap する方法を定義
  する.  この wrapping により, 次のことを実現することを目標とする.
  1. OpenXM 100 対応のサーバを容易に CGI サービス化する.
  2. OpenXM のサービスを http を基本にグリッド化する.

  OpenXM 100 ではサーバを立ち上げるには "login" することが一般に必要である.
  OpenXM-100 over HTTP GET  (以下 OoHG  と略記) は次のように login不要,
  login必要の二つの動作モードをもつ.
  1. 不特定人が一度のみの計算利用をするような場合に login 不要で動作する.
  2. OpenXM 100 と同様に login して session を維持することも可能である.

  このメモでは HTTP GET (POST) と HTTPS しか既存技術は利用していない.
  Web 技術に関して現在研究中や実用化初期段階のさまざまなプロトコルを活用して
  このメモと同等かそれ以上のことを実現することは可能であろう.
  我々は単純で必要十分な仕様を与えたいと思っている.
  その条件に合致する限り Web 技術に関して現在研究中や実用化初期段階の
  さまざまなプロトコルを活用することを否定するものではない.
  別のアプローチも試みよりよいプロトコルを作っていきたい.

*/


//&ja @@OX-RFC-100 (OpenXM 100) 形式の通信の復習
//&en @@Review of OX-RFC-100 for this memo.
/*&ja

OpenXM 100 およびその派生形式の通信は以下のような仕組みで行われる.

 client                                            server

     ---------------- step 1 ----------------------->
     ssh による server への login.
     localhost では ox100start/ox などの launcher が直接起動される.
     controle server, engine server との接続を確立するための
     ポート番号および      -control= ... , -data=...
     認証方法および        -authtype=NONE | <<oneTimePassword>>
     認証パスワード        -passControl=... , -passData=...
     も送信される.
     認証パスワードの暗号  -authEncoding=<<NONE>> | file | RSA
     化方法の指定.
     << >> は src/kxx/ox の標準値


    <----------------  step 2 -------------------------->
       -reverse の場合は <--- の向きに TCP/IP 接続が確立される.
       そうでないときは ---> の向きに TCP/IP 接続が確立される.

    <----------------  step 3 -------------------------->
       -authtype=oneTimePassword の時.
       connect した側が accept した側へ oneTimePassword を送る.

    以下 launcher の仕事は終了して, engine と control に制御が移る.
    <----------------  step 4 -------------------------->
       engine の byte order を設定.

    <---------------------------------------------------->
       OpenXM のパケット交換

    詳しくは OX-RFC-100, OX-RFC 103 (OX-RFC 100 補遺) を見よ.   
    
*/

//&en @@Data structure of OoHG
//&ja @@OoHG のデータ形式.

/*&ja

OoHG での通信は送信, 受信で非対称である.
GET を利用するためデータの形式は RFC 2396 で指定されている
いわゆる URL エンコーディング方法を用いる.
GET の利用の代わりに POST method を利用してもよい.
送信データは 
    キーワード = 値
を & で区切ったものである. キーワードは英数字と _ をもちいるものとする.
キーワードと値の組は入れ子構造となってもよい.

受信データは次の形式で送信する.

 OX100-OVER-HTTP-GET0-に下のキーワードをつないだもの : URL エンコードされた値

以下キーワードを列挙する.

oxMessageBody:       OpenXM のパケット. 複数の OX パケットを一度に送ってよい.

oxMessageEncoding:   OpenXM のパケットの encoding 方法の指定.
                    <<text_executeString_popString>> が省略時の値.
                     方法は以下のとおり.
                     1. xml_ox100  (OX-RFC100 に定義された XML 表現)
                     2. lisplike_ox100 (OX-RFC100 に定義された Lisp風表現)
                     3. binary_ox100 (OX-RFC100 に定義された binary 表現)
                     4. text_executeString_popString
                          これは一度のみの実行を想定している.
                          executeString に与える引数を text 形式で与える.
                     補助的な値として次のものがある.
                     a. 3DES   Body を 3DES で暗号化する.
                     b. RSA    Body を RSA で暗号化する.
                     なお oxMessageEncoding キーワードの値は二つ以上存在して
                     よい.  この場合 and として扱われる. たとえば
                     oxMessageEncoding=xml_ox100,3DES
                     の場合 xml_ox100 形式の情報が 3DES で暗号化されて
                     送られる. ("," は URL encoding される.)

dataChannelId:      data ポートの番号に相当.
controlChannelId:   control ポートの番号に相当.
sessionKeyFor3Des:  64 bit x 3  3Des 用の Des Key.  サーバ側が生成し,
                    RSA で暗号化されサーバより送信される.
channelKey:         サーバより一つ前の HTTP トランズアクションで与えられる
                    キー. 第3者が session に割り込むのを禁止するため.
                    10 桁以上の数字で与える.
                    サーバが与えるキーは nextChannelKey (Cookie に相当).
                  (ネットワークが盗聴されているときは, この方法は無力である.
                   https か 次の channelKeyIn3Des, nextChannelKeyIn3Des
                   を用いるべきである.)

channelKeyIn3Des:     3Des で暗号化された channelKey.
nextChannelKeyIn3Des: 3Des で暗号化された nextChannelKey.

responseEncoding:   サーバの返答の encoding 方法.
                    省略時には oxMessageEncoding に対応した方法で
                    本体部分は送られる.
                    nextChannelKey 等の情報は特に指定しない場合
                    OX100-OVER-HTTP-GET-nextChannelKey: による 
                    header を用いた返答を行う.
                    text_execute_popString の時は text 形式で送信される.
                    詳細後述.
                    その他.
                    1. presentation_html

loginRSA:           RSA 認証による login. challenge , challenge-response は
                    お互いの public key を用いて送信される. 下の例参照.
                    RSA については OX-RFC-103 を見よ.                    
logout:             logout


sessionTimeOut:

controlChannelKey:
nextControlChannelKey:
challenge:
challenge-response:

以下のキーワードについては後述.
doSignature:
response-doSignature:
getMathCap2:
grepDirectoryInfo:
sendPublicKey:

*/

//&ja @@始めての例
//&en @@The first example
/*&ja

例1.
fctr(x^2-1); を fctr.cgi へ送信する.
*/

//&C     http://fctr.openxm.org/fctr.cgi?oxMessageBody=fctr(x%5E2-1)%3B

/*&ja
oxMessageBody 以外の全てのキーワードが省略されているので,
anonymous, 1 回のみの実行, executeString & popString, 返答は text 形式
となり
*/
//&C    [[1,1],[x-1],[x+2]]
/*&ja
が戻る.
*/

/*&ja
例2.
同じ問題を session を確立してから実行する. URL encoding 部分は " ... " で記述.
RSA 暗号化されてる部分は ' ... 'で記述.
*/
/*&C
   --->
     http://fctr.openxm.org/fctr.cgi?loginRSA="takayama@hoge.org"
   <---   
     OX100-OVER-HTTP-GET-controlChannelId: 4010
     OX100-OVER-HTTP-GET-dataChannelId: 4011
     OX100-OVER-HTTP-GET-challenge: '.............'
   --->
     http://fctr.openxm.org/fctr.cgi?chanllenge-response='..........'
   <---
     OX100-OVER-HTTP-GET-nextChannelKey: 143245
     OX100-OVER-HTTP-GET-nextControlChannelKey: 534256
   --->  
     http://fctr.openxm.org/fctr.cgi?dataChannelId=4011&
                                     channelKey=143245&
                                     oxMessageEncoding="lisplike_ox100"&
                                     responseEncoding="text"
            oxMessageBody="(OX_DATA,(CMO_STRING,\"fctr(x^2-1);\"))
                           (OX_COMMAND,(SM_executeString))
                           (OX_COMMAND,(SM_popString))"
  <---
     Content-Type: text/plain
     OX100-OVER-HTTP-GET-nextChannelKey: 345137

     [[1,1],[x-1],[x+2]]
  --->
     http://fctr.openxm.org/fctr.cgi?dataChannelId=4011&
                                     channelKey=345137&
                                     logout&
*/


//&ja @@エラーコード一覧.

/*&ja 

HTTP 準拠のエラーの他, CMO エラー object を responseEncoding に従い
送る.

<< 以下まだ検討してない >>

*/

//&ja @@コントロールプロセスとの通信

/*&ja

接続中の connection が切断された場合, エンジン, コントロールサーバともに
終了する.
コントロールサーバに中断メッセージを送った場合, OX-RFC-103 の中断動作
をおこなう.
<< 以下まだ書いてない >>

*/

//&ja @@ホストのなりすましの防止

/*&ja
 https を利用する場合はサーバが偽物でないことの証明は https の機能を用いて
 実現される.  http の場合には RSA public キーを用いてサーバが偽物でない
 ことを証明することが可能である.  このためのキーワードが doSignature
 である.
*/
//&C doSignature=anonymous@fctr.openxm.org,'challenge words encrypted'

/*&ja
 'challenge words encrypted' は anonymous@fctr.openxm.org の public key
 を用いて RSA  暗号化される. サーバは response-DoSignature 
 キーワードを用いて送られた words をクライアントに戻す.

*/

//&ja @@OpenXM grid のサービス一覧提供方法.
//&en @@Directory service for OpenXM grid.

//&C @@@mathCap2

/*&ja
  mathCap2 は 
      キーワード = 値 
  形式で表現された mathCap である.  キーワードは以下のとおり.

  systemName
  systemVersion
  acceptOXtags
  acceptSMtags
  acceptCMOtags

  exportedCommands
     実行可能な関数名

     値は
     [名前,引数の数,引数1のデータ型, 引数2のデータ型, ...] 形式のリストである. 
     引数の数が -1 の場合引数は不定.
     引数のデータ型は省略してもよい.

     データ型の表現方法は XML name space の表記方法を用い, 文字列型で戻す.
     なおPolymorphic な関数の場合は同じ関数名で表記してかまわない.
     例:
      ["gcd", 2, 
       "<cmo:cmo_int32 xmlns:cmo="http://www.openxm.org/ox-rfc-100.xml">",
       "<cmo:cmo_int32 xmlns:cmo="http://www.openxm.org/ox-rfc-100.xml">" ]
     

  resourceLimit
     [time,値], [memory,値] 等の リスト

  注意: systemName, systemVersion,   acceptOXtags, acceptSMtags, acceptCMOtags
   は現在の MathCap の戻す情報にほかならない.

  注意:   ある一定のサーバでは変数に格納されたデータも関数として取り出す

  systemName は Java の package の命名方法の真似をする.
   例:  org.openxm.ox_sm1
        org.openxm.ox_polymake_2

*/

//&C @@@SM_getMathCap2
/*&ja
SM_printMathCap2 はそのサーバの mathCap2 を CMO データとして戻す
新しいスタックマシンコマンドである.
何らかのサービスを提供するサーバは 
*/
//&C (OX_COMMAND,(SM_getMathCap2)) (OX_COMMAND,(SM_popCMO))
/*&ja
が実行可能であるべきである.   このコマンドは anonymous に実行を許す場合
もあるので,  (OX_COMMAND,(SM_getMathCap2)) (OX_COMMAND,(SM_popCMO))
の省略形式が OoHG のキーワード   
             getMathCap2=1  
として用意されている.
*/

//&C Example: http://fctr.openxm.org/fctr.cgi?getMathCap2=1

//&C @@@ディレクトリサービス
/*&ja
OpenXM grid のディレクトリサービスは各サーバの mathCap2 の情報をもとに
している.  信用のおけるディレクトリサービスを実現するためには 
サーバの RSA public key が必須である.  このキーがあると doSignature
をもとにディジタル署名された mathCap2 情報を得ることが可能となる.

OpenXM grid のディレクトリ情報は
     キーワード=値  
の集合体である.  
この情報は次のいずれかの方法を用いて表現する.
1. キーワードを要素とする XML として表現. 
   XML の根要素は OpenXMnode.  OpenXMnode の集まりは OpenXMnodes.
2. CMO のリストとして キーワード, 値 のペアとして表現する.

必須のキーワード
   OpenXMnodeURL,  mathCap2,  listOfAnonymousPublicKeys 

OpenXM directory サーバはこれらの情報を検索して返答する. 
Directory サーバもまた OpenXM エンジンである.
たとえば factor をキーワードとする
grep 検索は以下のとおり.
   (OX_DATA,(CMO_STRING,"factor")) 
   (OX_DATA,(CMO_INT32,1))
   (OX_DATA,(CMO_STRING,"ox104_grepDirectoryInfo"))
   (OX_COMMAND,(SM_execute))
   (XO_COMMAND,(SM_popCMO))
同等な機能を実現する OoHG 用のキーワードとして
     grepDirectoryInfo
がある.
例:     grepDirectoryInfo="factor"

*/

//&en @@@OX-104 Directory service
//&ja @@@OX-104 Directory サービス
/*&ja

Directory サーバはいわゆる agent の一種である.
Directory サーバは個人のローカルマシンで動作させてよいが,
ox-rfc-104 では anonymous な計算サービスの検索のため,
いわゆる根となるべき directory server を以下のように定義する.
URLは以下のとおり.
   http://ox104_directory.openxm.org/cgi-bin/ox104_directory.sh
   http://ox104_directory.math.kobe-u.ac.jp/cgi-bin/ox104_directory.sh
   http://ox104_directory.math.kyushu-u.ac.jp/cgi-bin/ox104_directory.sh
   http://ox104_directory.s.kanazawa-u.ac.jp/cgi-bin/ox104_directory.sh

OX-server ox104_directory は次の関数をもつ.
  1. ox104_findSystem(String systemName)

      ox サーバを検索して戻す. 見付けたものを (cmo) リストとする.
      例:
        ox104_findSystem("org.openxm.ox_polymake_2");
       [server=
        [url="http://polymake.math.kobe-u.ac.jp/cgi-bin/cgi-polymake.sh",
         protocol="org.openxm.ox-rfc-104",
         description="CGI 版の polymake サーバ. Version 2 ベース",
         version="??",
         loadAverage=0,
         cpuType=, memory=, anonymous=]]

      なお directoryServer=[...] として情報が戻る場合は,
      あらためてそのサーバに聞く必要がある.

      例:
        ox104_findSystem("org.openxm.ox_sm1");
       [localServer=
        [path="/usr/local/OpenXM/bin/ox_sm1",
         protocol="org.openxm.ox-rfc-100"
        ]]
        
  2. ox104_grepDirectoryInfo(String key)
       情報を grep して該当するサーバを戻す.

OX-server ox104_directory は cash 機能を持つべきである.
サーバは機能の制限をしている場合がある.
その場合サーバに mathcap2 を問い合わせる必要がある.
*/

//&en @@@list of system names
//&ja @@@システム名のリスト

/*&C
    org.openxm.ox_polymake_2
    org.openxm.ox_asir
    org.openxm.ox_sm1
    << It has not yet been completed. >>
*/

//&ja @@@anonymous@host の RSA public key の入手方法

/*&ja
  anonymous@host の RSA public key は別の信頼できる情報源から入手するか,
  "host" にたいして  
      sendPublicKey="anonymous@host"
  要求を出すことにより入手する.
*/

/*&ja

<< 以下, まだ検討してない >>

*/

//&ja @@共通関数名
//&en @@Common name of functions

/*&ja

名前                引数の数
ox104_equal          2
ox104_add            2
ox104_sub            2
ox104_times          2
ox104_divide         2
ox104_power          2
ox104_inverse        1
ox104_translate      2

*/


//&ja @@関連する技術
//&en @@Related technologies

/*&ja

  IAMC  (symbolicnet.org)
  
*/

//&ja @@貢献者および試験実装
//&en @@Contributors and sample implementations


/*&ja
まだサンプル実装はない.
*/

//&ja @@参考文献
//&en @@Bibliography

/*&C

[OpenXM-RFC-100]  Design and Implementation of OpenXM Client-Server Model 
                 and Common Mathematical Object Format.  M.Noro, N.Takayama 

[OpenXM-RFC-101] Protocol to Start Engines.  K.Ohara

[OpenXM-RFC-103] Supplement to OX-RFC-100 
     --- Broadcasting in process trees and engine authentication.
                                              OpenXM committers.

[RFC1945] Hypertext Transfer Protocol -- HTTP/1.0. T. Berners-Lee, R.
     Fielding, H. Frystyk. May 1996. (Format: TXT=137582 bytes) (Status:
     INFORMATIONAL)

[RFC2660] The Secure HyperText Transfer Protocol. E. Rescorla, A.
     Schiffman. August 1999. (Format: TXT=95645 bytes) (Status:
     EXPERIMENTAL)
*/


$Id: ox-rfc-104.oxw,v 1.14 2004/10/14 07:03:55 taka Exp $