Annotation of OpenXM/doc/OpenXM-specs/OX-RFC-103.oxw, Revision 1.9
1.9 ! takayama 1: % $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-103.oxw,v 1.8 2006/03/03 00:43:02 takayama Exp $
1.5 takayama 2: /*&C
3:
4: OX-RFC: 103 OpenXM committers
5:
6: December 9, 2003,
7: September 19, 2004
1.7 takayama 8: February 4, 2006
1.5 takayama 9:
10: */
11: //&en Supplement to OX-RFC-100
12: //&en --- Broadcasting in process trees and engine authentication
1.6 takayama 13: //&en --- Structure of error packets.
1.9 ! takayama 14: //&ja OX-RFC-100 への追加機能
! 15: //&ja --- プロセス木構造での同報とエンジン認証
! 16: //&ja --- エラーパケットの構造.
1.5 takayama 17:
18: /*&C
19:
20: Status of this memo
21: This is an experimental specification.
22: Distribution of this memo is unlimited.
23:
24: Copyright Notice
1.6 takayama 25: OpenXM.org, 2003, 2004, 2006
1.5 takayama 26:
27: */
1.1 takayama 28:
29:
30: /*&ja
1.5 takayama 31:
1.9 ! takayama 32: @@要約
! 33: この RFC は OpenXM RFC 100 (および 101) の実装により明らかになった種々の問題点をもとに
! 34: RFC 100 プロトコルへの幾つかの追加を提案する.
1.5 takayama 35:
1.1 takayama 36: */
37:
1.9 ! takayama 38: //&ja @@中断および変数の伝播
1.5 takayama 39: //&en @@Propagation of an interruption and a value of a variable
1.3 takayama 40:
1.9 ! takayama 41: //&ja @@@中断
1.5 takayama 42: //&en @@@Interruption
1.1 takayama 43:
1.2 takayama 44: /*&ja
1.5 takayama 45:
1.9 ! takayama 46: OX RFC 103 では,
! 47: エンジンは OX RFC 100 に定義された中断処理を完了したのち,
! 48: さらに次の処理をおこなわないといけない.
! 49: 上意下達の中断処理:
! 50: 1. 自分の子供プロセスをすべてリストする
! 51: (たとえば asir の場合は ox_get_serverinfo())
! 52: 2. 子供プロセスに順番に OpenXM-RFC 100 の中断メッセージを送る.
1.5 takayama 53:
1.2 takayama 54: */
55:
56: /*&en
1.5 takayama 57:
1.2 takayama 58: Engines complient to OX RFC 103 must execute the following
59: procedures after finishing the interruption exception
60: defined by OX RFC 100.
1.5 takayama 61:
62: 1. List all the child processes.
63: (For example, use the function ox_get_serverinfo() in case of asir).
64: 2. Send all the child processes the interruption message defined
1.2 takayama 65: OX RFC 100.
1.5 takayama 66:
1.2 takayama 67: */
1.1 takayama 68:
1.9 ! takayama 69: //&ja @@@サーバ木の大域変数
1.5 takayama 70: //&en @@@Global variable of the tree of the servers
1.3 takayama 71:
1.9 ! takayama 72: //&ja OX RFC 103 対応のエンジンはエンジン関数
1.3 takayama 73: /*&en
74: The engines complient to OX RFC 103 implement the engine function
75: */
76: /*&C
1.5 takayama 77: ox103_set_shared_variable(CMO string Name, CMO object value)
1.3 takayama 78: */
79: /*&ja
1.9 ! takayama 80: を実装している.
! 81: この関数が呼ばれると, エンジンスタックマシンの変数 Name に値 value
! 82: が設定され, さらに子どものプロセスすべてのエンジン関数
1.5 takayama 83: ox103_set_shared_variable
1.9 ! takayama 84: をよぶ.
1.3 takayama 85: */
86: /*&en
87: When this function is called,
1.5 takayama 88: the value value is assigned to
89: the variable Name of the engine stackmachine
1.3 takayama 90: and the engine calls the function
1.5 takayama 91: ox103_set_shared_variable
1.3 takayama 92: of all the child processes with the same arguments.
93: */
94:
95: /*&ja
1.9 ! takayama 96: たとえば,
! 97: この機能は asir-contrib において変数 Xm_noX (ox server 用の debug
! 98: window を表示するかしないかのフラグ) の値を同報するのに用いている.
1.3 takayama 99: */
100: /*&en
101: For example,
102: this protocol is used in the asir-contrib
1.5 takayama 103: to broad cast the value of the variable Xm\_noX,
1.3 takayama 104: which is the flag of hiding the debug window of an ox server.
105: */
106:
107:
1.9 ! takayama 108: //&ja @@新しい CMO
1.5 takayama 109: //&en @@New CMO
1.1 takayama 110:
1.9 ! takayama 111: //&ja @@ファイルへの読み書き
1.5 takayama 112: //&en @@File IO
1.1 takayama 113:
1.9 ! takayama 114: //&ja @@エンジン認証手続き
1.5 takayama 115: //&en @@Engine authentication
1.1 takayama 116:
1.2 takayama 117: /*&ja
1.5 takayama 118:
1.9 ! takayama 119: バイトオーダーを決めるための情報交換 (OX-RFC 100 参照) の前に
! 120: エンジン認証手続きをおこなう.
1.4 takayama 121:
1.9 ! takayama 122: 認証プロトコルには下の図の step 1, step 2, step 3 である.
1.4 takayama 123:
124:
125: client server
126:
127: ---------------- step 1 ----------------------->
1.9 ! takayama 128: ssh による server への login.
! 129: controle server, engine server との接続を確立するための
! 130: ポート番号および -control= ... , -data=...
! 131: 認証方法および -authtype=NONE | <<oneTimePassword>>
! 132: 認証パスワード -passControl=... , -passData=...
! 133: も送信される.
! 134: 認証パスワードの暗号 -authEncoding=<<NONE>> | file | RSA
! 135: 化方法の指定.
! 136: << >> は src/kxx/ox の標準値
1.4 takayama 137:
138:
139: <---------------- step 2 -------------------------->
1.9 ! takayama 140: -reverse の場合は <--- の向きに TCP/IP 接続が確立される.
! 141: そうでないときは ---> の向きに TCP/IP 接続が確立される.
1.4 takayama 142:
143: <---------------- step 3 -------------------------->
1.9 ! takayama 144: -authtype=oneTimePassword の時.
! 145: connect した側が accept した側へ oneTimePassword を送る.
! 146: 末尾の 0 を送信する.
1.4 takayama 147:
1.9 ! takayama 148: 以下 launcher の仕事は終了して, engine と control に制御が移る.
1.4 takayama 149: <---------------- step 4 -------------------------->
1.9 ! takayama 150: engine の byte order を設定.
1.4 takayama 151:
152: <---------------------------------------------------->
1.9 ! takayama 153: OpenXM のパケット交換
1.4 takayama 154:
1.5 takayama 155:
1.4 takayama 156: */
157:
158: /*&ja
159:
1.9 ! takayama 160: authtype は NONE か oneTimePassword である.
! 161: oneTimePassword は英数字で構成された列である.
! 162: oneTimePassword は常にクライアントで生成されて, なんらかの方法でサーバに
! 163: 配送される. connect 側が oneTimePassword を平文で accept 側に送信して
! 164: 認証が終了する.
1.4 takayama 165:
1.9 ! takayama 166: authEncoding で oneTimePassword の配送方法を規定する.
! 167: authEncoding は NONE か file か RSA である.
1.4 takayama 168:
1.9 ! takayama 169: authEncoding=NONE が選択された場合 oneTimePassword の配送に特別な方法を利用
! 170: しない.
! 171: NONE を選択した場合, 現在の ox launcher の実装ではたとえば -passControl
! 172: のあとに oneTimePassword が生の形で現れることとなる.
! 173: Unix の場合これは command の引数であり client と server の通信路が
! 174: ssh 等で暗号化されていたとするとネットワークユーザは覗きみることはできないが,
! 175: 同一機のユーザは見ることが可能である.
! 176: したがって NONE の選択が可能であるのは client および server が十分信頼
! 177: できるときに限る.
1.4 takayama 178:
179: */
180:
181: /*&ja
182:
1.9 ! takayama 183: @@@authEncoding=file の場合.
1.4 takayama 184:
1.9 ! takayama 185: authEncoding=file を選択した場合は oneTimePassword は別に用意された安全な
! 186: 通信経路(たとえば scp) を用いて file として配送される.
! 187: oneTimePassword が格納された file 名を -passControl, -passData 引数で渡す.
! 188: file 名は $HOME/.openxm/tmp.otp/ からの相対パス名である.
! 189: パスの区切り文字は windows でも / を用いる.
! 190: クライアントは次の規則でファイル名を生成する.
! 191: ファイル名には英数字と . - _ の利用しかゆるされない. ファイル名は次の形式
! 192: である.
1.4 takayama 193:
194: clientname-servernameUidPidSerial-time.pass
195:
1.9 ! takayama 196: ここで time は time(2) の戻り値を数字文字列に変換した形式である.
! 197: oneTimePassword の生成時刻を切り上げて 10 分毎の正時に変換したものとする.
! 198: servernameUidPidSerial は client が oneTimePassword を生成してから
! 199: 10 分間, クライアントシステムで高い確率で一意的であることが保証されている
! 200: 文字列ならなんでもよい.
1.4 takayama 201:
1.9 ! takayama 202: 例
1.4 takayama 203: client server
204:
1.9 ! takayama 205: oneTimePassword 1342546 を格納したファイル
! 206: yama.openxm.org-00001-2312123123.pass を生成
1.4 takayama 207:
1.9 ! takayama 208: oneTimePassword 89123888 を格納したファイル
! 209: yama.openxm.org-00002-2312123124.pass を生成
1.4 takayama 210: ----------------------------------------------------->
1.9 ! takayama 211: 上の二つのファイルを安全な通信路を用いて配送する.
! 212: (たとえば scp )
1.4 takayama 213:
214: ----------------------------------------------------->
215: ox -authtype oneTimePassword
216: -authEncoding file
217: -passControl yama.openxm.org-00001-2312123123.pass
218: -passData yama.openxm.org-00002-2312123124.pass
219:
220:
221: <---------------- step 2 -------------------------->
1.9 ! takayama 222: -reverse の場合は <--- の向きに TCP/IP 接続が確立される.
! 223: そうでないときは ---> の向きに TCP/IP 接続が確立される.
1.4 takayama 224:
225: <---------------- step 3 -------------------------->
1.9 ! takayama 226: connect した側が accept した側へ oneTimePassword を平文でおくる.
1.4 takayama 227:
228:
229:
1.9 ! takayama 230: oneTimePassword 1342546 を格納したファイル
! 231: yama.openxm.org-00001-2312123123.pass を server に生成するために
! 232: たとえば sendStringAsAfile(char *servername, char *serveruser,
1.4 takayama 233: char *filename, char *otp);
1.9 ! takayama 234: のような API を用意しておくとよいであろう.
1.4 takayama 235:
236: */
237:
238: /*&ja
239:
1.9 ! takayama 240: @@@authEncoding=RSA の場合.
1.4 takayama 241:
1.9 ! takayama 242: RSA の秘密鍵, 公開鍵を格納するファイル名は以下のとおり.
! 243: $HOME/.openxm/rsa/ox103-rsa0-identity (秘密鍵をならべたもの)
! 244: $HOME/.openxm/rsa/ox103-rsa0-identity.pub (公開鍵: この形式では利用されず)
! 245: $HOME/.openxm/rsa/ox103-rsa0-authorizedkeys (公開鍵をならべたもの)
1.4 takayama 246:
1.9 ! takayama 247: 鍵ファイルは次のデータを空白で区切って並べたものである.
! 248: user識別子 鍵(10進数字列) RSAフォーマット識別子(optional)
! 249: コメント行は # で始まる.
! 250: 各データの区切りは 0xd または 0xa または 両方である.
1.4 takayama 251:
1.9 ! takayama 252: フォーマット識別子が 0 の場合は公開鍵暗号化
! 253: x --> x^65537 mod n を用い, 128 byte (1024 bit) づつデータを区切って処理する.
! 254: 秘密鍵暗号化は x --> x^d mod n を用いる.
! 255: フォーマット識別子 0 は実験用の意味.
! 256: 秘密鍵は n,d , 公開鍵は n の形式で n と d は , で区切る.
! 257: 文字列を送信するときは 0 が文字列終りのマークとなり,
! 258: 0 でのこり部分を埋める. バイト列を送るときはデータの長さは別送する.
1.4 takayama 259:
1.9 ! takayama 260: Todo: 鍵の格納方法, データ区切りの方法など可能な限り
! 261: RFC3447 に準拠するように変更せよ. 準拠が完了したら -rsa0- を
! 262: -rsa- と変更する.
1.4 takayama 263:
1.9 ! takayama 264: 例:
1.4 takayama 265:
1.9 ! takayama 266: client 側
1.4 takayama 267:
268: ox103-rsa0-identity
1.9 ! takayama 269: # client 側が使う秘密鍵
1.4 takayama 270: takayama@client.math.kobe-u.ac.jp 1234523....
271:
272:
273: ox103-rsa0-authorizedkeys
1.9 ! takayama 274: @ server 側が使う秘密鍵に対応する公開鍵
1.4 takayama 275: takayama@server.math.kobe-u.ac.jp 8989898....
276:
1.9 ! takayama 277: server 側
1.4 takayama 278: ox103-rsa0-identity
1.9 ! takayama 279: # server 側が使う秘密鍵
1.4 takayama 280: takayama@server.math.kobe-u.ac.jp 8781234....
281:
282: ox103-rsa0-authorizedkeys
1.9 ! takayama 283: @ client 側が使う秘密鍵に対応する公開鍵
1.4 takayama 284: takayama@client.math.kobe-u.ac.jp 89891....
285:
1.9 ! takayama 286: authEncoding=RSA を利用する場合はこれらの鍵を適切に .openxm/rsa の下に
! 287: 置かないといけない. .openxm/rsa の permission は rwx------ であること.
1.4 takayama 288:
1.9 ! takayama 289: 注意: 秘密鍵を生で格納しない場合ファイル名を ox103-rsa2-* 等と変更する
! 290: 予定. RSA encoding 方法は数字無し, 数字の大きいものから鍵ファイルを
! 291: 順番にサーチして RSA のフォーマットを決定する.
1.4 takayama 292:
1.9 ! takayama 293: authEncoding=RSA の場合 -passData および -passControl は
! 294: oneTimePassword (文字列) を bit data とみて rsa で暗号化したものを
! 295: URL encoding した形で送る.
1.4 takayama 296:
1.9 ! takayama 297: oneTimePassword の周期は十分大きくないといけない.
! 298: 一年は 31536000 秒である. 100 年は 3153600000 秒 (10 桁) である.
! 299: oneTimePassword は数字の場合 10 桁以上であることが必須であり,
! 300: 20 桁以上であることが望ましい.
1.5 takayama 301:
302: */
303:
304: /*&ja
305:
1.9 ! takayama 306: @@@Step 1 が失敗した場合について.
1.5 takayama 307:
1.9 ! takayama 308: Step 1 の失敗の原因には次のような可能性がある.
! 309: 1. ssh による remote login の失敗.
! 310: 2. Remote server のパスに ox100start/ox 等のローンチャが存在しない.
! 311: 3. Remote server に xterm が存在しないか, 存在しても X サーバの接続に失敗する.
! 312: 4. Remote server にエンジンが存在しない.
! 313: 5. Remote server と client の TCP/IP 接続がなんらかの原因で失敗する.
1.5 takayama 314:
1.9 ! takayama 315: 失敗の場合に対応するため,
! 316: TCP/IP 接続での Accept 側はタイムアウト動作をすること.
1.5 takayama 317:
318:
1.9 ! takayama 319: 失敗の原因を知らせるプロトコルはきめられていないが,
! 320: 実装上の対策として以下のものがある.
! 321: 1. エラーメッセージを出力して sleep(10); する.
! 322: 2. エラーメッセージをファイル等に出力する.
1.5 takayama 323:
1.9 ! takayama 324: なお OX-RFC-101 では Step 1 が分離しているため, エラーの通知がより簡単である.
1.4 takayama 325:
1.2 takayama 326: */
327:
1.5 takayama 328:
1.9 ! takayama 329: //&ja @@貢献者および試験実装
1.5 takayama 330: //&en @@Contributors and sample implementations
1.2 takayama 331:
332: /*&ja
1.9 ! takayama 333: 中断および変数の伝播については高山が設計, asir および kan/sm1 への
! 334: 実装, 評価をおこなった.
1.5 takayama 335: (OpenXM/src/asir-contrib/packages/src/oxrfc103.rr,
336: OpenXM/src/kan96xx/Doc/oxrfc103.sm1
1.9 ! takayama 337: をみよ).
1.5 takayama 338:
1.9 ! takayama 339: エンジン認証手続きの file encoding 法は野呂と高山の議論から生まれた.
! 340: エンジン認証手続きは ox100start, ox に部分実装されている.
1.5 takayama 341: OpenXM/src/kxx/
1.9 ! takayama 342: のファイル群および
1.5 takayama 343: OpenXM/src/kan96xx/Doc/ox.sm1
1.9 ! takayama 344: をみよ.
! 345: 例: sm1を起動後, (ox.sm1) run asirconnectr
1.3 takayama 346: */
347:
348: /*&ja
1.9 ! takayama 349: 行列, ベクトルの CMO は NTL のサーバ化をテストケースとして
! 350: 岩根が設計, 実装, 評価を行った.
! 351: RSA のキー生成, DES 等の OpenXM crypt ライブラリの実装は岩根がおこなっている.
! 352: OpenXM/src/ox_ntl/crypt をみよ.
1.6 takayama 353: */
354:
1.9 ! takayama 355: //&ja @@エラーパケットの構造.
1.6 takayama 356: //&en @@Structure of error packets
357:
358: /*&en
359: English translation has not been done.
360: */
361:
362: /*&ja
1.9 ! takayama 363: Error packet は CMO_ARRAY を body 部分とする CMO であるが,
! 364: ここではその body 部分の array の構造を定義する.
! 365: 0 番目の成分は CMO_INT32 である. エラー発生の原因となったパケット番号.
! 366: わからないときは -1.
! 367: 1 番目の成分は CMO_INT32 である. CMO_ERROR2 共通エラー番号.
! 368: わからないときは -1.
! 369: 2 番目の成分は CMO_STRING でありエラーメッセージを格納する.
! 370: 3 番目の成分(optional) が ox-rfc-103 で新しく定義する部分である.
! 371: 3 番目の成分のデータ型は CMO_ARRAY である.
! 372: Array の各要素はまた長さ 2 の CMO_ARRAY であり,
! 373: 第一成分が CMO_STRING, 第2成分は CMO オブジェクトである.
! 374: 第一成分はキーワードが格納され, 第2成分はその値である.
! 375: キーワードとして現在次のものを ox-rfc-103 として提案している.
! 376: なおサーバは全てのキーワードの値を戻す必要はない.
! 377: エラー情報は言語の仕様に依存するため asir_where の用に asir 言語に依存した
! 378: 形式のエラー情報のわたしかたもある. 今後何通りかの方法に収束していくと予想している.
! 379:
! 380: reason_of_error, (CMO_STRING)実行時エラーの理由
! 381: where, (CMO_ARRAY) 実行時エラーの場所をあらわす CMO_STRING のarray.
! 382: lines, (CMO_ARRAY) 実行時エラーを起こした行番号(CMO_INT32) のarray.
! 383: -1 は不明を表す.
! 384: locals, (CMO_ARRAY) 実行時エラーの時の局所変数の名前と値の
! 385: pair(長さ2のarray) の array
! 386: parse_error_at, (CMO_INT32) parse エラーをおこした行番号.
! 387: reason_of_parse_error, (CMO_STRING) parse エラーの理由.
! 388: asir_where, (CMO_ARRAY) asir形式のエラー位置情報.
! 389: [場所,関数名,行番号] または [場所,行番号] のリスト.
! 390: 負の行番号は意味のない情報でありクライアントは無視すべきである.
1.6 takayama 391: */
392:
393: /*&C
394:
395: Example 1.
396: [["parse_error_at", 3 ],
397: ["reason_of_parse_error","parse error after (x-)"],
398: ]
399:
400: Example 2.
401: [["reason_of_error", "invalid argument"],
402: ["where",["shell","length"]],
403: ["lines", [15,-1]]
404: ]
1.8 takayama 405:
406: Example 3.
407: ["asir_where"
408: [["toplevel", 10],
1.9 ! takayama 409: ["string","foo",3], // string は execute_string で渡された string 内を意味する.
1.8 takayama 410: ["/usr/local/lib/OpenXM/asir/lib/afo.rr","abc",4]
411: ]
412: ]
1.6 takayama 413:
414: */
415:
416: /*&ja
1.9 ! takayama 417: 例2の補足.
1.6 takayama 418: ["where",["shell","length"]],
419: ["lines", [15,-1]]
1.9 ! takayama 420: の lines の意味は解説を要するであろう.
! 421: [15,-1] の 15 は executeString に与えられた文字列の 15 行目に出現している
! 422: 関数 shell でエラーが起こったことを意味している.
! 423: 関数 shell の中から呼ばれている length 関数でエラーが起きているのであるが,
! 424: -1 はその行(shell 関数の定義中での相対的な行番号)は不明であるということを
! 425: 意味している.
1.2 takayama 426: */
1.1 takayama 427:
1.9 ! takayama 428: //&ja @@参考文献
1.5 takayama 429: //&en @@Bibliography
430:
431: /*&C
432:
433: [OpenXM-RFC-100] Design and Implementation of OpenXM Client-Server Model
434: and Common Mathematical Object Format. M.Noro, N.Takayama
435:
436: [OpenXM-RFC-101] Protocol to Start Engines. K.Ohara
437:
438:
439: [RFC3447] Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography
440: Specifications Version 2.1. J. Jonsson, B. Kaliski. February 2003.
441: (Format: TXT=143173 bytes) (Obsoletes RFC2437) (Status:
442: INFORMATIONAL)
443:
444: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>