=================================================================== RCS file: /home/cvs/OpenXM/doc/OpenXM-specs/OX-RFC-103.oxw,v retrieving revision 1.4 retrieving revision 1.9 diff -u -p -r1.4 -r1.9 --- OpenXM/doc/OpenXM-specs/OX-RFC-103.oxw 2004/09/18 11:40:16 1.4 +++ OpenXM/doc/OpenXM-specs/OX-RFC-103.oxw 2020/03/14 01:21:56 1.9 @@ -1,206 +1,215 @@ -% $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-103.oxw,v 1.3 2003/12/10 23:22:52 takayama Exp $ -%% OXWEAVE=${OpenXM_HOME}/bin/oxweave --recursive --plain -%% ${OXWEAVE} C ja >oxshell-ja.tex -//&ja \documentclass{jarticle} -//&en \documentclass{article} +% $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-103.oxw,v 1.8 2006/03/03 00:43:02 takayama Exp $ +/*&C -//&ja \title{OpenXM RFC 103 draft (RFC 100 $BDI2C(B)} -//&en \title{OpenXM RFC 103 draft (RFC 100 supplement} -//&C \author{OpenXM Committers} -//&C \date{December 9, 2003, September 18, 2004} -//&C \newtheorem{example}{Example} -\usepackage{html} +OX-RFC: 103 OpenXM committers + + December 9, 2003, + September 19, 2004 + February 4, 2006 -\begin{document} -\maketitle +*/ +//&en Supplement to OX-RFC-100 +//&en --- Broadcasting in process trees and engine authentication +//&en --- Structure of error packets. +//&ja OX-RFC-100 への追加機能 +//&ja --- プロセス木構造での同報とエンジン認証 +//&ja --- エラーパケットの構造. +/*&C + +Status of this memo + This is an experimental specification. + Distribution of this memo is unlimited. + +Copyright Notice + OpenXM.org, 2003, 2004, 2006 + +*/ + + /*&ja - $B$3$N(B RFC $B$O(B OpenXM RFC 100 ($B$*$h$S(B 101) $B$Ne0U2l9g$O(B {\tt ox\_get\_serverinfo() }). -\item $B;R6!%W%m%;%9$K=gHV$K(B OpenXM-RFC 100 $B$NCfCG%a%C%;!<%8$rAw$k(B. -\end{enumerate} + +OX RFC 103 では, +エンジンは OX RFC 100 に定義された中断処理を完了したのち, +さらに次の処理をおこなわないといけない. +上意下達の中断処理: +1. 自分の子供プロセスをすべてリストする + (たとえば asir の場合は ox_get_serverinfo()) +2. 子供プロセスに順番に OpenXM-RFC 100 の中断メッセージを送る. + */ /*&en + Engines complient to OX RFC 103 must execute the following procedures after finishing the interruption exception defined by OX RFC 100. -\begin{enumerate} -\item List all the child processes. - (For example, use the function {\tt ox\_get\_serverinfo() } in case of asir). -\item Send all the child processes the interruption message defined + +1. List all the child processes. + (For example, use the function ox_get_serverinfo() in case of asir). +2. Send all the child processes the interruption message defined OX RFC 100. -\end{enumerate} + */ -//&ja \subsection{$B%5!<%PLZ$NBg0hJQ?t(B} -//&en \subsection{Global variable of the tree of the servers} +//&ja @@@サーバ木の大域変数 +//&en @@@Global variable of the tree of the servers -//&ja OX RFC 103 $BBP1~$N%(%s%8%s$O%(%s%8%s4X?t(B +//&ja OX RFC 103 対応のエンジンはエンジン関数 /*&en The engines complient to OX RFC 103 implement the engine function */ /*&C -\begin{center} -{\tt ox103\_set\_shared\_variable(} CMO string {\tt Name}, CMO object {\tt -value}{\tt )} -\end{center} + ox103_set_shared_variable(CMO string Name, CMO object value) */ /*&ja -$B$rZpJs8r49(B (OX-RFC 100 $B;2>H(B) $B$NA0$K(B -$B%(%s%8%sG'>ZZ%W%m%H%3%k$K$O2<$N?^$N(B step 1, step 2, step 3 $B$G$"$k(B. +バイトオーダーを決めるための情報交換 (OX-RFC 100 参照) の前に +エンジン認証手続きをおこなう. -\begin{verbatim} +認証プロトコルには下の図の step 1, step 2, step 3 である. + client server ---------------- step 1 -----------------------> - ssh $B$K$h$k(B server $B$X$N(B login. - controle server, engine server $B$H$N@\B3$r3NN)$9$k$?$a$N(B - $B%]!<%HHV9f$*$h$S(B -control= ... , -data=... - $BG'>ZJ}K!$*$h$S(B -authtype=NONE | <> - $BG'>Z%Q%9%o!<%I(B -passControl=... , -passData=... - $B$bAw?.$5$l$k(B. - $BG'>Z%Q%9%o!<%I$N0E9f(B -authEncoding=<> | file | RSA - $B2=J}K!$N;XDj(B. - << >> $B$O(B src/kxx/ox $B$NI8=`CM(B + ssh による server への login. + controle server, engine server との接続を確立するための + ポート番号および -control= ... , -data=... + 認証方法および -authtype=NONE | <> + 認証パスワード -passControl=... , -passData=... + も送信される. + 認証パスワードの暗号 -authEncoding=<> | file | RSA + 化方法の指定. + << >> は src/kxx/ox の標準値 <---------------- step 2 --------------------------> - -reverse $B$N>l9g$O(B <--- $B$N8~$-$K(B TCP/IP $B@\B3$,3NN)$5$l$k(B. - $B$=$&$G$J$$$H$-$O(B ---> $B$N8~$-$K(B TCP/IP $B@\B3$,3NN)$5$l$k(B. + -reverse の場合は <--- の向きに TCP/IP 接続が確立される. + そうでないときは ---> の向きに TCP/IP 接続が確立される. <---------------- step 3 --------------------------> - -authtype=oneTimePassword $B$N;~(B. - connect $B$7$?B&$,(B accept $B$7$?B&$X(B oneTimePassword $B$rAw$k(B. - $BKvHx$N(B 0 $B$rAw?.$9$k(B. + -authtype=oneTimePassword の時. + connect した側が accept した側へ oneTimePassword を送る. + 末尾の 0 を送信する. - $B0J2<(B launcher $B$N;E;v$O=*N;$7$F(B, engine $B$H(B control $B$K@)8f$,0\$k(B. + 以下 launcher の仕事は終了して, engine と control に制御が移る. <---------------- step 4 --------------------------> - engine $B$N(B byte order $B$r@_Dj(B. + engine の byte order を設定. <----------------------------------------------------> - OpenXM $B$N%Q%1%C%H8r49(B + OpenXM のパケット交換 -\end{verbatim} + */ /*&ja -\begin{verbatim} + authtype は NONE か oneTimePassword である. + oneTimePassword は英数字で構成された列である. + oneTimePassword は常にクライアントで生成されて, なんらかの方法でサーバに + 配送される. connect 側が oneTimePassword を平文で accept 側に送信して + 認証が終了する. - authtype $B$O(B NONE $B$+(B oneTimePassword $B$G$"$k(B. - oneTimePassword $B$O1Q?t;z$G9=@.$5$l$?Ns$G$"$k(B. - oneTimePassword $B$O>o$K%/%i%$%"%s%H$G@8@.$5$l$F(B, $B$J$s$i$+$NJ}K!$G%5!<%P$K(B - $BG[Aw$5$l$k(B. connect $BB&$,(B oneTimePassword $B$rJ?J8$G(B accept $BB&$KAw?.$7$F(B - $BG'>Z$,=*N;$9$k(B. + authEncoding で oneTimePassword の配送方法を規定する. + authEncoding は NONE か file か RSA である. - authEncoding $B$G(B oneTimePassword $B$NG[AwJ}K!$r5,Dj$9$k(B. - authEncoding $B$O(B NONE $B$+(B file $B$+(B RSA $B$G$"$k(B. + authEncoding=NONE が選択された場合 oneTimePassword の配送に特別な方法を利用 + しない. + NONE を選択した場合, 現在の ox launcher の実装ではたとえば -passControl + のあとに oneTimePassword が生の形で現れることとなる. + Unix の場合これは command の引数であり client と server の通信路が + ssh 等で暗号化されていたとするとネットワークユーザは覗きみることはできないが, + 同一機のユーザは見ることが可能である. + したがって NONE の選択が可能であるのは client および server が十分信頼 + できるときに限る. - authEncoding=NONE $B$,A*Br$5$l$?>l9g(B oneTimePassword $B$NG[Aw$KFCJL$JJ}K!$rMxMQ(B - $B$7$J$$(B. - NONE $B$rA*Br$7$?>l9g(B, $B8=:_$N(B ox launcher $B$Nl9g$3$l$O(B command $B$N0z?t$G$"$j(B client $B$H(B server $B$NDL?.O)$,(B - ssh $BEy$G0E9f2=$5$l$F$$$?$H$9$k$H%M%C%H%o!<%/%f!<%6$OGA$-$_$k$3$H$O$G$-$J$$$,(B, - $BF10l5!$N%f!<%6$O8+$k$3$H$,2DG=$G$"$k(B. - $B$7$?$,$C$F(B NONE $B$NA*Br$,2DG=$G$"$k$N$O(B client $B$*$h$S(B server $B$,==J,?.Mj(B - $B$G$-$k$H$-$K8B$k(B. - -\end{verbatim} */ /*&ja -authEncoding=file $B$N>l9g(B. +@@@authEncoding=file の場合. -\begin{verbatim} - authEncoding=file $B$rA*Br$7$?>l9g$O(B oneTimePassword $B$OJL$KMQ0U$5$l$?0BA4$J(B - $BDL?.7PO)(B($B$?$H$($P(B scp) $B$rMQ$$$F(B file $B$H$7$FG[Aw$5$l$k(B. - oneTimePassword $B$,3JG<$5$l$?(B file $BL>$r(B -passControl, -passData $B0z?t$GEO$9(B. - file $BL>$O(B $HOME/.openxm/tmp.otp/ $B$+$i$NAjBP%Q%9L>$G$"$k(B. - $B%Q%9$N6h@Z$jJ8;z$O(B windows $B$G$b(B / $B$rMQ$$$k(B. - $B%/%i%$%"%s%H$O$r@8@.$9$k(B. - $B%U%!%$%kL>$K$O1Q?t;z$H(B . - _ $B$NMxMQ$7$+$f$k$5$l$J$$(B. $B%U%!%$%kL>$Oe$2$F(B 10 $BJ,Kh$N@5;~$KJQ49$7$?$b$N$H$9$k(B. - servernameUidPidSerial $B$O(B client $B$,(B oneTimePassword $B$r@8@.$7$F$+$i(B - 10 $BJ,4V(B, $B%/%i%$%"%s%H%7%9%F%`$G9b$$3NN($G0l0UE*$G$"$k$3$H$,J]>Z$5$l$F$$$k(B - $BJ8;zNs$J$i$J$s$G$b$h$$(B. + ここで time は time(2) の戻り値を数字文字列に変換した形式である. + oneTimePassword の生成時刻を切り上げて 10 分毎の正時に変換したものとする. + servernameUidPidSerial は client が oneTimePassword を生成してから + 10 分間, クライアントシステムで高い確率で一意的であることが保証されている + 文字列ならなんでもよい. - $BNc(B + 例 client server - oneTimePassword 1342546 $B$r3JG<$7$?%U%!%$%k(B - yama.openxm.org-00001-2312123123.pass $B$r@8@.(B + oneTimePassword 1342546 を格納したファイル + yama.openxm.org-00001-2312123123.pass を生成 - oneTimePassword 89123888 $B$r3JG<$7$?%U%!%$%k(B - yama.openxm.org-00002-2312123124.pass $B$r@8@.(B + oneTimePassword 89123888 を格納したファイル + yama.openxm.org-00002-2312123124.pass を生成 -----------------------------------------------------> - $B>e$NFs$D$N%U%!%$%k$r0BA4$JDL?.O)$rMQ$$$FG[Aw$9$k(B. - ($B$?$H$($P(B scp ) + 上の二つのファイルを安全な通信路を用いて配送する. + (たとえば scp ) -----------------------------------------------------> ox -authtype oneTimePassword @@ -210,100 +219,226 @@ authEncoding=file $B$N>l9g(B. <---------------- step 2 --------------------------> - -reverse $B$N>l9g$O(B <--- $B$N8~$-$K(B TCP/IP $B@\B3$,3NN)$5$l$k(B. - $B$=$&$G$J$$$H$-$O(B ---> $B$N8~$-$K(B TCP/IP $B@\B3$,3NN)$5$l$k(B. + -reverse の場合は <--- の向きに TCP/IP 接続が確立される. + そうでないときは ---> の向きに TCP/IP 接続が確立される. <---------------- step 3 --------------------------> - connect $B$7$?B&$,(B accept $B$7$?B&$X(B oneTimePassword $B$rJ?J8$G$*$/$k(B. + connect した側が accept した側へ oneTimePassword を平文でおくる. - oneTimePassword 1342546 $B$r3JG<$7$?%U%!%$%k(B - yama.openxm.org-00001-2312123123.pass $B$r(B server $B$K@8@.$9$k$?$a$K(B - $B$?$H$($P(B sendStringAsAfile(char *servername, char *serveruser, + oneTimePassword 1342546 を格納したファイル + yama.openxm.org-00001-2312123123.pass を server に生成するために + たとえば sendStringAsAfile(char *servername, char *serveruser, char *filename, char *otp); - $B$N$h$&$J(B API $B$rMQ0U$7$F$*$/$H$h$$$G$"$m$&(B. + のような API を用意しておくとよいであろう. - -\end{verbatim} - */ /*&ja -authEncoding=RSA $B$N>l9g(B. +@@@authEncoding=RSA の場合. -\begin{verbatim} -RSA $B$NHkL)80(B, $B8x3+80$r3JG<$9$k%U%!%$%kL>$O0J2<$N$H$*$j(B. -$HOME/.openxm/rsa/ox103-rsa0-identity ($BHkL)80$r$J$i$Y$?$b$N(B) -$HOME/.openxm/rsa/ox103-rsa0-identity.pub ($B8x3+80(B: $B$3$N7A<0$G$OMxMQ$5$l$:(B) -$HOME/.openxm/rsa/ox103-rsa0-authorizedkeys ($B8x3+80$r$J$i$Y$?$b$N(B) +RSA の秘密鍵, 公開鍵を格納するファイル名は以下のとおり. +$HOME/.openxm/rsa/ox103-rsa0-identity (秘密鍵をならべたもの) +$HOME/.openxm/rsa/ox103-rsa0-identity.pub (公開鍵: この形式では利用されず) +$HOME/.openxm/rsa/ox103-rsa0-authorizedkeys (公開鍵をならべたもの) -$B80%U%!%$%k$Ol9g$O(B -x --> x^65537 $B$rMQ$$(B, 128 byte (1024 bit) $B$E$D%G!<%?$r6h@Z$C$F=hM}$9$k(B -RSA $B$rMQ$$$k(B. 0 $B$O x^65537 mod n を用い, 128 byte (1024 bit) づつデータを区切って処理する. +秘密鍵暗号化は x --> x^d mod n を用いる. +フォーマット識別子 0 は実験用の意味. +秘密鍵は n,d , 公開鍵は n の形式で n と d は , で区切る. +文字列を送信するときは 0 が文字列終りのマークとなり, +0 でのこり部分を埋める. バイト列を送るときはデータの長さは別送する. -Todo: $B80$N3JGl9g$O$3$l$i$N80$rE,@Z$K(B .openxm/rsa $B$N2<$K(B -$BCV$+$J$$$H$$$1$J$$(B. .openxm/rsa $B$N(B permission $B$O(B rwx------ $B$G$"$k$3$H(B. +authEncoding=RSA を利用する場合はこれらの鍵を適切に .openxm/rsa の下に +置かないといけない. .openxm/rsa の permission は rwx------ であること. -$BCm0U(B: $BHkL)80$r@8$G3JG<$7$J$$>l9g%U%!%$%kL>$r(B ox103-rsa2-* $BEy$HJQ99$9$k(B -$BM=Dj(B. RSA encoding $BJ}K!$O?t;z$NBg$-$$$b$N$+$i=gHV$K%5!<%A$7$F$$$/$b$N$H$9$k(B. +注意: 秘密鍵を生で格納しない場合ファイル名を ox103-rsa2-* 等と変更する +予定. RSA encoding 方法は数字無し, 数字の大きいものから鍵ファイルを +順番にサーチして RSA のフォーマットを決定する. -authEncoding=RSA $B$N>l9g(B -passData $B$*$h$S(B -passControl $B$O(B -oneTimePassword ($BJ8;zNs(B) $B$r(B bit data $B$H$_$F(B rsa $B$G0E9f2=$7$?$b$N$r(B -URL encoding $B$7$?7A$GAw$k(B. +authEncoding=RSA の場合 -passData および -passControl は +oneTimePassword (文字列) を bit data とみて rsa で暗号化したものを +URL encoding した形で送る. -oneTimePassword $B$N<~4|$O==J,Bg$-$/$J$$$H$$$1$J$$(B. -$B0lG/$O(B 31536000 $BIC$G$"$k(B. 100 $BG/$O(B 3153600000 $BIC(B (10 $B7e(B) $B$G$"$k(B. -oneTimePassword $B$O?t;z$N>l9g(B 10 $B7e0J>e$G$"$k$3$H$,K>$^$7$$(B. +oneTimePassword の周期は十分大きくないといけない. +一年は 31536000 秒である. 100 年は 3153600000 秒 (10 桁) である. +oneTimePassword は数字の場合 10 桁以上であることが必須であり, +20 桁以上であることが望ましい. -\end{verbatim} */ -//&ja \section{$B9W8%2A$r$*$3$J$C$?(B. -({\tt OpenXM/src/asir-contrib/packages/src/oxrfc103.rr}, - {\tt OpenXM/src/kan96xx/Doc/oxrfc103.sm1} - $B$r$_$h(B). +中断および変数の伝播については高山が設計, asir および kan/sm1 への +実装, 評価をおこなった. +(OpenXM/src/asir-contrib/packages/src/oxrfc103.rr, + OpenXM/src/kan96xx/Doc/oxrfc103.sm1 + をみよ). + +エンジン認証手続きの file encoding 法は野呂と高山の議論から生まれた. +エンジン認証手続きは ox100start, ox に部分実装されている. + OpenXM/src/kxx/ +のファイル群および + OpenXM/src/kan96xx/Doc/ox.sm1 +をみよ. +例: sm1を起動後, (ox.sm1) run asirconnectr */ /*&ja -$B9TNs(B, $B%Y%/%H%k$N(B CMO $B$O(B NTL $B$N%5!<%P2=$r%F%9%H%1!<%9$H$7$F(B -$B4d:,$,@_7W(B, $B2A$r9T$C$?(B. -RSA $B$N%-!<@8@.$N(B OpenXM $B$X$N