version 1.8, 2006/03/03 00:43:02 |
version 1.9, 2020/03/14 01:21:56 |
|
|
% $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-103.oxw,v 1.7 2006/02/04 10:44:22 takayama Exp $ |
% $OpenXM: OpenXM/doc/OpenXM-specs/OX-RFC-103.oxw,v 1.8 2006/03/03 00:43:02 takayama Exp $ |
/*&C |
/*&C |
|
|
OX-RFC: 103 OpenXM committers |
OX-RFC: 103 OpenXM committers |
Line 11 OX-RFC: 103 OpenXM c |
|
Line 11 OX-RFC: 103 OpenXM c |
|
//&en Supplement to OX-RFC-100 |
//&en Supplement to OX-RFC-100 |
//&en --- Broadcasting in process trees and engine authentication |
//&en --- Broadcasting in process trees and engine authentication |
//&en --- Structure of error packets. |
//&en --- Structure of error packets. |
//&ja OX-RFC-100 $B$X$NDI2C5!G=(B |
//&ja OX-RFC-100 への追加機能 |
//&ja --- $B%W%m%;%9LZ9=B$$G$NF1Js$H%(%s%8%sG'>Z(B |
//&ja --- プロセス木構造での同報とエンジン認証 |
//&ja --- $B%(%i!<%Q%1%C%H$N9=B$(B. |
//&ja --- エラーパケットの構造. |
|
|
/*&C |
/*&C |
|
|
|
|
|
|
/*&ja |
/*&ja |
|
|
@@$BMWLs(B |
@@要約 |
$B$3$N(B RFC $B$O(B OpenXM RFC 100 ($B$*$h$S(B 101) $B$N<BAu$K$h$jL@$i$+$K$J$C$?<o!9$NLdBjE@$r$b$H$K(B |
この RFC は OpenXM RFC 100 (および 101) の実装により明らかになった種々の問題点をもとに |
RFC 100 $B%W%m%H%3%k$X$N4v$D$+$NDI2C$rDs0F$9$k(B. |
RFC 100 プロトコルへの幾つかの追加を提案する. |
|
|
*/ |
*/ |
|
|
//&ja @@$BCfCG$*$h$SJQ?t$NEAGE(B |
//&ja @@中断および変数の伝播 |
//&en @@Propagation of an interruption and a value of a variable |
//&en @@Propagation of an interruption and a value of a variable |
|
|
//&ja @@@$BCfCG(B |
//&ja @@@中断 |
//&en @@@Interruption |
//&en @@@Interruption |
|
|
/*&ja |
/*&ja |
|
|
OX RFC 103 $B$G$O(B, |
OX RFC 103 では, |
$B%(%s%8%s$O(B OX RFC 100 $B$KDj5A$5$l$?CfCG=hM}$r40N;$7$?$N$A(B, |
エンジンは OX RFC 100 に定義された中断処理を完了したのち, |
$B$5$i$K<!$N=hM}$r$*$3$J$o$J$$$H$$$1$J$$(B. |
さらに次の処理をおこなわないといけない. |
$B>e0U2<C#$NCfCG=hM}(B: |
上意下達の中断処理: |
1. $B<+J,$N;R6!%W%m%;%9$r$9$Y$F%j%9%H$9$k(B |
1. 自分の子供プロセスをすべてリストする |
($B$?$H$($P(B asir $B$N>l9g$O(B ox_get_serverinfo()) |
(たとえば asir の場合は ox_get_serverinfo()) |
2. $B;R6!%W%m%;%9$K=gHV$K(B OpenXM-RFC 100 $B$NCfCG%a%C%;!<%8$rAw$k(B. |
2. 子供プロセスに順番に OpenXM-RFC 100 の中断メッセージを送る. |
|
|
*/ |
*/ |
|
|
Line 66 defined by OX RFC 100. |
|
Line 66 defined by OX RFC 100. |
|
|
|
*/ |
*/ |
|
|
//&ja @@@$B%5!<%PLZ$NBg0hJQ?t(B |
//&ja @@@サーバ木の大域変数 |
//&en @@@Global variable of the tree of the servers |
//&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 |
/*&en |
The engines complient to OX RFC 103 implement the engine function |
The engines complient to OX RFC 103 implement the engine function |
*/ |
*/ |
Line 77 The engines complient to OX RFC 103 implement the engi |
|
Line 77 The engines complient to OX RFC 103 implement the engi |
|
ox103_set_shared_variable(CMO string Name, CMO object value) |
ox103_set_shared_variable(CMO string Name, CMO object value) |
*/ |
*/ |
/*&ja |
/*&ja |
$B$r<BAu$7$F$$$k(B. |
を実装している. |
$B$3$N4X?t$,8F$P$l$k$H(B, $B%(%s%8%s%9%?%C%/%^%7%s$NJQ?t(B Name $B$KCM(B value |
この関数が呼ばれると, エンジンスタックマシンの変数 Name に値 value |
$B$,@_Dj$5$l(B, $B$5$i$K;R$I$b$N%W%m%;%9$9$Y$F$N%(%s%8%s4X?t(B |
が設定され, さらに子どものプロセスすべてのエンジン関数 |
ox103_set_shared_variable |
ox103_set_shared_variable |
$B$r$h$V(B. |
をよぶ. |
*/ |
*/ |
/*&en |
/*&en |
When this function is called, |
When this function is called, |
Line 93 of all the child processes with the same arguments. |
|
Line 93 of all the child processes with the same arguments. |
|
*/ |
*/ |
|
|
/*&ja |
/*&ja |
$B$?$H$($P(B, |
たとえば, |
$B$3$N5!G=$O(B asir-contrib $B$K$*$$$FJQ?t(B Xm_noX (ox server $BMQ$N(B debug |
この機能は asir-contrib において変数 Xm_noX (ox server 用の debug |
window $B$rI=<($9$k$+$7$J$$$+$N%U%i%0(B) $B$NCM$rF1Js$9$k$N$KMQ$$$F$$$k(B. |
window を表示するかしないかのフラグ) の値を同報するのに用いている. |
*/ |
*/ |
/*&en |
/*&en |
For example, |
For example, |
Line 105 which is the flag of hiding the debug window of an ox |
|
Line 105 which is the flag of hiding the debug window of an ox |
|
*/ |
*/ |
|
|
|
|
//&ja @@$B?7$7$$(B CMO |
//&ja @@新しい CMO |
//&en @@New CMO |
//&en @@New CMO |
|
|
//&ja @@$B%U%!%$%k$X$NFI$_=q$-(B |
//&ja @@ファイルへの読み書き |
//&en @@File IO |
//&en @@File IO |
|
|
//&ja @@$B%(%s%8%sG'>Z<jB3$-(B |
//&ja @@エンジン認証手続き |
//&en @@Engine authentication |
//&en @@Engine authentication |
|
|
/*&ja |
/*&ja |
|
|
$B%P%$%H%*!<%@!<$r7h$a$k$?$a$N>pJs8r49(B (OX-RFC 100 $B;2>H(B) $B$NA0$K(B |
バイトオーダーを決めるための情報交換 (OX-RFC 100 参照) の前に |
$B%(%s%8%sG'>Z<jB3$-$r$*$3$J$&(B. |
エンジン認証手続きをおこなう. |
|
|
$BG'>Z%W%m%H%3%k$K$O2<$N?^$N(B step 1, step 2, step 3 $B$G$"$k(B. |
認証プロトコルには下の図の step 1, step 2, step 3 である. |
|
|
|
|
client server |
client server |
|
|
---------------- step 1 -----------------------> |
---------------- step 1 -----------------------> |
ssh $B$K$h$k(B server $B$X$N(B login. |
ssh による server への login. |
controle server, engine server $B$H$N@\B3$r3NN)$9$k$?$a$N(B |
controle server, engine server との接続を確立するための |
$B%]!<%HHV9f$*$h$S(B -control= ... , -data=... |
ポート番号および -control= ... , -data=... |
$BG'>ZJ}K!$*$h$S(B -authtype=NONE | <<oneTimePassword>> |
認証方法および -authtype=NONE | <<oneTimePassword>> |
$BG'>Z%Q%9%o!<%I(B -passControl=... , -passData=... |
認証パスワード -passControl=... , -passData=... |
$B$bAw?.$5$l$k(B. |
も送信される. |
$BG'>Z%Q%9%o!<%I$N0E9f(B -authEncoding=<<NONE>> | file | RSA |
認証パスワードの暗号 -authEncoding=<<NONE>> | file | RSA |
$B2=J}K!$N;XDj(B. |
化方法の指定. |
<< >> $B$O(B src/kxx/ox $B$NI8=`CM(B |
<< >> は src/kxx/ox の標準値 |
|
|
|
|
<---------------- step 2 --------------------------> |
<---------------- step 2 --------------------------> |
-reverse $B$N>l9g$O(B <--- $B$N8~$-$K(B TCP/IP $B@\B3$,3NN)$5$l$k(B. |
-reverse の場合は <--- の向きに TCP/IP 接続が確立される. |
$B$=$&$G$J$$$H$-$O(B ---> $B$N8~$-$K(B TCP/IP $B@\B3$,3NN)$5$l$k(B. |
そうでないときは ---> の向きに TCP/IP 接続が確立される. |
|
|
<---------------- step 3 --------------------------> |
<---------------- step 3 --------------------------> |
-authtype=oneTimePassword $B$N;~(B. |
-authtype=oneTimePassword の時. |
connect $B$7$?B&$,(B accept $B$7$?B&$X(B oneTimePassword $B$rAw$k(B. |
connect した側が accept した側へ oneTimePassword を送る. |
$BKvHx$N(B 0 $B$rAw?.$9$k(B. |
末尾の 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 --------------------------> |
<---------------- step 4 --------------------------> |
engine $B$N(B byte order $B$r@_Dj(B. |
engine の byte order を設定. |
|
|
<----------------------------------------------------> |
<----------------------------------------------------> |
OpenXM $B$N%Q%1%C%H8r49(B |
OpenXM のパケット交換 |
|
|
|
|
*/ |
*/ |
|
|
/*&ja |
/*&ja |
|
|
authtype $B$O(B NONE $B$+(B oneTimePassword $B$G$"$k(B. |
authtype は NONE か oneTimePassword である. |
oneTimePassword $B$O1Q?t;z$G9=@.$5$l$?Ns$G$"$k(B. |
oneTimePassword は英数字で構成された列である. |
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 |
oneTimePassword は常にクライアントで生成されて, なんらかの方法でサーバに |
$BG[Aw$5$l$k(B. connect $BB&$,(B oneTimePassword $B$rJ?J8$G(B accept $BB&$KAw?.$7$F(B |
配送される. connect 側が oneTimePassword を平文で accept 側に送信して |
$BG'>Z$,=*N;$9$k(B. |
認証が終了する. |
|
|
authEncoding $B$G(B oneTimePassword $B$NG[AwJ}K!$r5,Dj$9$k(B. |
authEncoding で oneTimePassword の配送方法を規定する. |
authEncoding $B$O(B NONE $B$+(B file $B$+(B RSA $B$G$"$k(B. |
authEncoding は NONE か file か RSA である. |
|
|
authEncoding=NONE $B$,A*Br$5$l$?>l9g(B oneTimePassword $B$NG[Aw$KFCJL$JJ}K!$rMxMQ(B |
authEncoding=NONE が選択された場合 oneTimePassword の配送に特別な方法を利用 |
$B$7$J$$(B. |
しない. |
NONE $B$rA*Br$7$?>l9g(B, $B8=:_$N(B ox launcher $B$N<BAu$G$O$?$H$($P(B -passControl |
NONE を選択した場合, 現在の ox launcher の実装ではたとえば -passControl |
$B$N$"$H$K(B oneTimePassword $B$,@8$N7A$G8=$l$k$3$H$H$J$k(B. |
のあとに oneTimePassword が生の形で現れることとなる. |
Unix $B$N>l9g$3$l$O(B command $B$N0z?t$G$"$j(B client $B$H(B server $B$NDL?.O)$,(B |
Unix の場合これは command の引数であり client と server の通信路が |
ssh $BEy$G0E9f2=$5$l$F$$$?$H$9$k$H%M%C%H%o!<%/%f!<%6$OGA$-$_$k$3$H$O$G$-$J$$$,(B, |
ssh 等で暗号化されていたとするとネットワークユーザは覗きみることはできないが, |
$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 |
したがって NONE の選択が可能であるのは client および server が十分信頼 |
$B$G$-$k$H$-$K8B$k(B. |
できるときに限る. |
|
|
*/ |
*/ |
|
|
/*&ja |
/*&ja |
|
|
@@@authEncoding=file $B$N>l9g(B. |
@@@authEncoding=file の場合. |
|
|
authEncoding=file $B$rA*Br$7$?>l9g$O(B oneTimePassword $B$OJL$KMQ0U$5$l$?0BA4$J(B |
authEncoding=file を選択した場合は oneTimePassword は別に用意された安全な |
$BDL?.7PO)(B($B$?$H$($P(B scp) $B$rMQ$$$F(B file $B$H$7$FG[Aw$5$l$k(B. |
通信経路(たとえば scp) を用いて file として配送される. |
oneTimePassword $B$,3JG<$5$l$?(B file $BL>$r(B -passControl, -passData $B0z?t$GEO$9(B. |
oneTimePassword が格納された file 名を -passControl, -passData 引数で渡す. |
file $BL>$O(B $HOME/.openxm/tmp.otp/ $B$+$i$NAjBP%Q%9L>$G$"$k(B. |
file 名は $HOME/.openxm/tmp.otp/ からの相対パス名である. |
$B%Q%9$N6h@Z$jJ8;z$O(B windows $B$G$b(B / $B$rMQ$$$k(B. |
パスの区切り文字は windows でも / を用いる. |
$B%/%i%$%"%s%H$O<!$N5,B'$G%U%!%$%kL>$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>$O<!$N7A<0(B |
ファイル名には英数字と . - _ の利用しかゆるされない. ファイル名は次の形式 |
$B$G$"$k(B. |
である. |
|
|
clientname-servernameUidPidSerial-time.pass |
clientname-servernameUidPidSerial-time.pass |
|
|
$B$3$3$G(B time $B$O(B time(2) $B$NLa$jCM$r?t;zJ8;zNs$KJQ49$7$?7A<0$G$"$k(B. |
ここで time は time(2) の戻り値を数字文字列に変換した形式である. |
oneTimePassword $B$N@8@.;~9o$r@Z$j>e$2$F(B 10 $BJ,Kh$N@5;~$KJQ49$7$?$b$N$H$9$k(B. |
oneTimePassword の生成時刻を切り上げて 10 分毎の正時に変換したものとする. |
servernameUidPidSerial $B$O(B client $B$,(B oneTimePassword $B$r@8@.$7$F$+$i(B |
servernameUidPidSerial は client が oneTimePassword を生成してから |
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 |
10 分間, クライアントシステムで高い確率で一意的であることが保証されている |
$BJ8;zNs$J$i$J$s$G$b$h$$(B. |
文字列ならなんでもよい. |
|
|
$BNc(B |
例 |
client server |
client server |
|
|
oneTimePassword 1342546 $B$r3JG<$7$?%U%!%$%k(B |
oneTimePassword 1342546 を格納したファイル |
yama.openxm.org-00001-2312123123.pass $B$r@8@.(B |
yama.openxm.org-00001-2312123123.pass を生成 |
|
|
oneTimePassword 89123888 $B$r3JG<$7$?%U%!%$%k(B |
oneTimePassword 89123888 を格納したファイル |
yama.openxm.org-00002-2312123124.pass $B$r@8@.(B |
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 |
ox -authtype oneTimePassword |
Line 219 which is the flag of hiding the debug window of an ox |
|
Line 219 which is the flag of hiding the debug window of an ox |
|
|
|
|
|
<---------------- step 2 --------------------------> |
<---------------- step 2 --------------------------> |
-reverse $B$N>l9g$O(B <--- $B$N8~$-$K(B TCP/IP $B@\B3$,3NN)$5$l$k(B. |
-reverse の場合は <--- の向きに TCP/IP 接続が確立される. |
$B$=$&$G$J$$$H$-$O(B ---> $B$N8~$-$K(B TCP/IP $B@\B3$,3NN)$5$l$k(B. |
そうでないときは ---> の向きに TCP/IP 接続が確立される. |
|
|
<---------------- step 3 --------------------------> |
<---------------- 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 |
oneTimePassword 1342546 を格納したファイル |
yama.openxm.org-00001-2312123123.pass $B$r(B server $B$K@8@.$9$k$?$a$K(B |
yama.openxm.org-00001-2312123123.pass を server に生成するために |
$B$?$H$($P(B sendStringAsAfile(char *servername, char *serveruser, |
たとえば sendStringAsAfile(char *servername, char *serveruser, |
char *filename, char *otp); |
char *filename, char *otp); |
$B$N$h$&$J(B API $B$rMQ0U$7$F$*$/$H$h$$$G$"$m$&(B. |
のような API を用意しておくとよいであろう. |
|
|
*/ |
*/ |
|
|
/*&ja |
/*&ja |
|
|
@@@authEncoding=RSA $B$N>l9g(B. |
@@@authEncoding=RSA の場合. |
|
|
RSA $B$NHkL)80(B, $B8x3+80$r3JG<$9$k%U%!%$%kL>$O0J2<$N$H$*$j(B. |
RSA の秘密鍵, 公開鍵を格納するファイル名は以下のとおり. |
$HOME/.openxm/rsa/ox103-rsa0-identity ($BHkL)80$r$J$i$Y$?$b$N(B) |
$HOME/.openxm/rsa/ox103-rsa0-identity (秘密鍵をならべたもの) |
$HOME/.openxm/rsa/ox103-rsa0-identity.pub ($B8x3+80(B: $B$3$N7A<0$G$OMxMQ$5$l$:(B) |
$HOME/.openxm/rsa/ox103-rsa0-identity.pub (公開鍵: この形式では利用されず) |
$HOME/.openxm/rsa/ox103-rsa0-authorizedkeys ($B8x3+80$r$J$i$Y$?$b$N(B) |
$HOME/.openxm/rsa/ox103-rsa0-authorizedkeys (公開鍵をならべたもの) |
|
|
$B80%U%!%$%k$O<!$N%G!<%?$r6uGr$G6h@Z$C$FJB$Y$?$b$N$G$"$k(B. |
鍵ファイルは次のデータを空白で区切って並べたものである. |
user$B<1JL;R(B $B80(B($B#1#0?J?t;zNs(B) RSA$B%U%)!<%^%C%H<1JL;R(B(optional) |
user識別子 鍵(10進数字列) RSAフォーマット識別子(optional) |
$B%3%a%s%H9T$O(B # $B$G;O$^$k(B. |
コメント行は # で始まる. |
$B3F%G!<%?$N6h@Z$j$O(B 0xd $B$^$?$O(B 0xa $B$^$?$O(B $BN>J}$G$"$k(B. |
各データの区切りは 0xd または 0xa または 両方である. |
|
|
$B%U%)!<%^%C%H<1JL;R$,(B 0 $B$N>l9g$O8x3+800E9f2=(B |
フォーマット識別子が 0 の場合は公開鍵暗号化 |
x --> x^65537 mod n $B$rMQ$$(B, 128 byte (1024 bit) $B$E$D%G!<%?$r6h@Z$C$F=hM}$9$k(B. |
x --> x^65537 mod n を用い, 128 byte (1024 bit) づつデータを区切って処理する. |
$BHkL)800E9f2=$O(B x --> x^d mod n $B$rMQ$$$k(B. |
秘密鍵暗号化は x --> x^d mod n を用いる. |
$B%U%)!<%^%C%H<1JL;R(B 0 $B$O<B83MQ$N0UL#(B. |
フォーマット識別子 0 は実験用の意味. |
$BHkL)80$O(B n,d , $B8x3+80$O(B n $B$N7A<0$G(B n $B$H(B d $B$O(B , $B$G6h@Z$k(B. |
秘密鍵は n,d , 公開鍵は n の形式で n と d は , で区切る. |
$BJ8;zNs$rAw?.$9$k$H$-$O(B 0 $B$,J8;zNs=*$j$N%^!<%/$H$J$j(B, |
文字列を送信するときは 0 が文字列終りのマークとなり, |
0 $B$G$N$3$jItJ,$rKd$a$k(B. $B%P%$%HNs$rAw$k$H$-$O%G!<%?$ND9$5$OJLAw$9$k(B. |
0 でのこり部分を埋める. バイト列を送るときはデータの長さは別送する. |
|
|
Todo: $B80$N3JG<J}K!(B, $B%G!<%?6h@Z$j$NJ}K!$J$I2DG=$J8B$j(B |
Todo: 鍵の格納方法, データ区切りの方法など可能な限り |
RFC3447 $B$K=`5r$9$k$h$&$KJQ99$;$h(B. $B=`5r$,40N;$7$?$i(B -rsa0- $B$r(B |
RFC3447 に準拠するように変更せよ. 準拠が完了したら -rsa0- を |
-rsa- $B$HJQ99$9$k(B. |
-rsa- と変更する. |
|
|
$BNc(B: |
例: |
|
|
client $BB&(B |
client 側 |
|
|
ox103-rsa0-identity |
ox103-rsa0-identity |
# client $BB&$,;H$&HkL)80(B |
# client 側が使う秘密鍵 |
takayama@client.math.kobe-u.ac.jp 1234523.... |
takayama@client.math.kobe-u.ac.jp 1234523.... |
|
|
|
|
ox103-rsa0-authorizedkeys |
ox103-rsa0-authorizedkeys |
@ server $BB&$,;H$&HkL)80$KBP1~$9$k8x3+80(B |
@ server 側が使う秘密鍵に対応する公開鍵 |
takayama@server.math.kobe-u.ac.jp 8989898.... |
takayama@server.math.kobe-u.ac.jp 8989898.... |
|
|
server $BB&(B |
server 側 |
ox103-rsa0-identity |
ox103-rsa0-identity |
# server $BB&$,;H$&HkL)80(B |
# server 側が使う秘密鍵 |
takayama@server.math.kobe-u.ac.jp 8781234.... |
takayama@server.math.kobe-u.ac.jp 8781234.... |
|
|
ox103-rsa0-authorizedkeys |
ox103-rsa0-authorizedkeys |
@ client $BB&$,;H$&HkL)80$KBP1~$9$k8x3+80(B |
@ client 側が使う秘密鍵に対応する公開鍵 |
takayama@client.math.kobe-u.ac.jp 89891.... |
takayama@client.math.kobe-u.ac.jp 89891.... |
|
|
authEncoding=RSA $B$rMxMQ$9$k>l9g$O$3$l$i$N80$rE,@Z$K(B .openxm/rsa $B$N2<$K(B |
authEncoding=RSA を利用する場合はこれらの鍵を適切に .openxm/rsa の下に |
$BCV$+$J$$$H$$$1$J$$(B. .openxm/rsa $B$N(B permission $B$O(B rwx------ $B$G$"$k$3$H(B. |
置かないといけない. .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 |
注意: 秘密鍵を生で格納しない場合ファイル名を ox103-rsa2-* 等と変更する |
$BM=Dj(B. RSA encoding $BJ}K!$O?t;zL5$7(B, $B?t;z$NBg$-$$$b$N$+$i80%U%!%$%k$r(B |
予定. RSA encoding 方法は数字無し, 数字の大きいものから鍵ファイルを |
$B=gHV$K%5!<%A$7$F(B RSA $B$N%U%)!<%^%C%H$r7hDj$9$k(B. |
順番にサーチして RSA のフォーマットを決定する. |
|
|
authEncoding=RSA $B$N>l9g(B -passData $B$*$h$S(B -passControl $B$O(B |
authEncoding=RSA の場合 -passData および -passControl は |
oneTimePassword ($BJ8;zNs(B) $B$r(B bit data $B$H$_$F(B rsa $B$G0E9f2=$7$?$b$N$r(B |
oneTimePassword (文字列) を bit data とみて rsa で暗号化したものを |
URL encoding $B$7$?7A$GAw$k(B. |
URL encoding した形で送る. |
|
|
oneTimePassword $B$N<~4|$O==J,Bg$-$/$J$$$H$$$1$J$$(B. |
oneTimePassword の周期は十分大きくないといけない. |
$B0lG/$O(B 31536000 $BIC$G$"$k(B. 100 $BG/$O(B 3153600000 $BIC(B (10 $B7e(B) $B$G$"$k(B. |
一年は 31536000 秒である. 100 年は 3153600000 秒 (10 桁) である. |
oneTimePassword $B$O?t;z$N>l9g(B 10 $B7e0J>e$G$"$k$3$H$,I,?\$G$"$j(B, |
oneTimePassword は数字の場合 10 桁以上であることが必須であり, |
20 $B7e0J>e$G$"$k$3$H$,K>$^$7$$(B. |
20 桁以上であることが望ましい. |
|
|
*/ |
*/ |
|
|
/*&ja |
/*&ja |
|
|
@@@Step 1 $B$,<:GT$7$?>l9g$K$D$$$F(B. |
@@@Step 1 が失敗した場合について. |
|
|
Step 1 $B$N<:GT$N860x$K$O<!$N$h$&$J2DG=@-$,$"$k(B. |
Step 1 の失敗の原因には次のような可能性がある. |
1. ssh $B$K$h$k(B remote login $B$N<:GT(B. |
1. ssh による remote login の失敗. |
2. Remote server $B$N%Q%9$K(B ox100start/ox $BEy$N%m!<%s%A%c$,B8:_$7$J$$(B. |
2. Remote server のパスに ox100start/ox 等のローンチャが存在しない. |
3. Remote server $B$K(B xterm $B$,B8:_$7$J$$$+(B, $BB8:_$7$F$b(B X $B%5!<%P$N@\B3$K<:GT$9$k(B. |
3. Remote server に xterm が存在しないか, 存在しても X サーバの接続に失敗する. |
4. Remote server $B$K%(%s%8%s$,B8:_$7$J$$(B. |
4. Remote server にエンジンが存在しない. |
5. Remote server $B$H(B client $B$N(B TCP/IP $B@\B3$,$J$s$i$+$N860x$G<:GT$9$k(B. |
5. Remote server と client の TCP/IP 接続がなんらかの原因で失敗する. |
|
|
$B<:GT$N>l9g$KBP1~$9$k$?$a(B, |
失敗の場合に対応するため, |
TCP/IP $B@\B3$G$N(B Accept $BB&$O%?%$%`%"%&%HF0:n$r$9$k$3$H(B. |
TCP/IP 接続での Accept 側はタイムアウト動作をすること. |
|
|
|
|
$B<:GT$N860x$rCN$i$;$k%W%m%H%3%k$O$-$a$i$l$F$$$J$$$,(B, |
失敗の原因を知らせるプロトコルはきめられていないが, |
$B<BAu>e$NBP:v$H$7$F0J2<$N$b$N$,$"$k(B. |
実装上の対策として以下のものがある. |
1. $B%(%i!<%a%C%;!<%8$r=PNO$7$F(B sleep(10); $B$9$k(B. |
1. エラーメッセージを出力して sleep(10); する. |
2. $B%(%i!<%a%C%;!<%8$r%U%!%$%kEy$K=PNO$9$k(B. |
2. エラーメッセージをファイル等に出力する. |
|
|
$B$J$*(B OX-RFC-101 $B$G$O(B Step 1 $B$,J,N%$7$F$$$k$?$a(B, $B%(%i!<$NDLCN$,$h$j4JC1$G$"$k(B. |
なお OX-RFC-101 では Step 1 が分離しているため, エラーの通知がより簡単である. |
|
|
*/ |
*/ |
|
|
|
|
//&ja @@$B9W8%<T$*$h$S;n83<BAu(B |
//&ja @@貢献者および試験実装 |
//&en @@Contributors and sample implementations |
//&en @@Contributors and sample implementations |
|
|
/*&ja |
/*&ja |
$BCfCG$*$h$SJQ?t$NEAGE$K$D$$$F$O9b;3$,@_7W(B, asir $B$*$h$S(B kan/sm1 $B$X$N(B |
中断および変数の伝播については高山が設計, asir および kan/sm1 への |
$B<BAu(B, $BI>2A$r$*$3$J$C$?(B. |
実装, 評価をおこなった. |
(OpenXM/src/asir-contrib/packages/src/oxrfc103.rr, |
(OpenXM/src/asir-contrib/packages/src/oxrfc103.rr, |
OpenXM/src/kan96xx/Doc/oxrfc103.sm1 |
OpenXM/src/kan96xx/Doc/oxrfc103.sm1 |
$B$r$_$h(B). |
をみよ). |
|
|
$B%(%s%8%sG'>Z<jB3$-$N(B file encoding $BK!$OLnO$$H9b;3$N5DO@$+$i@8$^$l$?(B. |
エンジン認証手続きの file encoding 法は野呂と高山の議論から生まれた. |
$B%(%s%8%sG'>Z<jB3$-$O(B ox100start, ox $B$KItJ,<BAu$5$l$F$$$k(B. |
エンジン認証手続きは ox100start, ox に部分実装されている. |
OpenXM/src/kxx/ |
OpenXM/src/kxx/ |
$B$N%U%!%$%k72$*$h$S(B |
のファイル群および |
OpenXM/src/kan96xx/Doc/ox.sm1 |
OpenXM/src/kan96xx/Doc/ox.sm1 |
$B$r$_$h(B. |
をみよ. |
$BNc(B: sm1$B$r5/F08e(B, (ox.sm1) run asirconnectr |
例: sm1を起動後, (ox.sm1) run asirconnectr |
*/ |
*/ |
|
|
/*&ja |
/*&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 |
行列, ベクトルの CMO は NTL のサーバ化をテストケースとして |
$B4d:,$,@_7W(B, $B<BAu(B, $BI>2A$r9T$C$?(B. |
岩根が設計, 実装, 評価を行った. |
RSA $B$N%-!<@8@.(B, DES $BEy$N(B OpenXM crypt $B%i%$%V%i%j$N<BAu$O4d:,$,$*$3$J$C$F$$$k(B. |
RSA のキー生成, DES 等の OpenXM crypt ライブラリの実装は岩根がおこなっている. |
OpenXM/src/ox_ntl/crypt $B$r$_$h(B. |
OpenXM/src/ox_ntl/crypt をみよ. |
*/ |
*/ |
|
|
//&ja @@$B%(%i!<%Q%1%C%H$N9=B$(B. |
//&ja @@エラーパケットの構造. |
//&en @@Structure of error packets |
//&en @@Structure of error packets |
|
|
/*&en |
/*&en |
Line 360 OpenXM/src/ox_ntl/crypt $B$r$_$h(B. |
|
Line 360 OpenXM/src/ox_ntl/crypt $B$r$_$h(B. |
|
*/ |
*/ |
|
|
/*&ja |
/*&ja |
Error packet $B$O(B CMO_ARRAY $B$r(B body $BItJ,$H$9$k(B CMO $B$G$"$k$,(B, |
Error packet は CMO_ARRAY を body 部分とする CMO であるが, |
$B$3$3$G$O$=$N(B body $BItJ,$N(B array $B$N9=B$$rDj5A$9$k(B. |
ここではその body 部分の array の構造を定義する. |
0 $BHVL\$N@.J,$O(B CMO_INT32 $B$G$"$k(B. $B%(%i!<H/@8$N860x$H$J$C$?%Q%1%C%HHV9f(B. |
0 番目の成分は CMO_INT32 である. エラー発生の原因となったパケット番号. |
$B$o$+$i$J$$$H$-$O(B -1. |
わからないときは -1. |
1 $BHVL\$N@.J,$O(B CMO_INT32 $B$G$"$k(B. CMO_ERROR2 $B6&DL%(%i!<HV9f(B. |
1 番目の成分は CMO_INT32 である. CMO_ERROR2 共通エラー番号. |
$B$o$+$i$J$$$H$-$O(B -1. |
わからないときは -1. |
2 $BHVL\$N@.J,$O(B CMO_STRING $B$G$"$j%(%i!<%a%C%;!<%8$r3JG<$9$k(B. |
2 番目の成分は CMO_STRING でありエラーメッセージを格納する. |
3 $BHVL\$N@.J,(B(optional) $B$,(B ox-rfc-103 $B$G?7$7$/Dj5A$9$kItJ,$G$"$k(B. |
3 番目の成分(optional) が ox-rfc-103 で新しく定義する部分である. |
3 $BHVL\$N@.J,$N%G!<%?7?$O(B CMO_ARRAY $B$G$"$k(B. |
3 番目の成分のデータ型は CMO_ARRAY である. |
Array $B$N3FMWAG$O$^$?D9$5(B 2 $B$N(B CMO_ARRAY $B$G$"$j(B, |
Array の各要素はまた長さ 2 の CMO_ARRAY であり, |
$BBh0l@.J,$,(B CMO_STRING, $BBh(B2$B@.J,$O(B CMO $B%*%V%8%'%/%H$G$"$k(B. |
第一成分が CMO_STRING, 第2成分は CMO オブジェクトである. |
$BBh0l@.J,$O%-!<%o!<%I$,3JG<$5$l(B, $BBh(B2$B@.J,$O$=$NCM$G$"$k(B. |
第一成分はキーワードが格納され, 第2成分はその値である. |
$B%-!<%o!<%I$H$7$F8=:_<!$N$b$N$r(B ox-rfc-103 $B$H$7$FDs0F$7$F$$$k(B. |
キーワードとして現在次のものを ox-rfc-103 として提案している. |
$B$J$*%5!<%P$OA4$F$N%-!<%o!<%I$NCM$rLa$9I,MW$O$J$$(B. |
なおサーバは全てのキーワードの値を戻す必要はない. |
$B%(%i!<>pJs$O8@8l$N;EMM$K0MB8$9$k$?$a(B asir_where $B$NMQ$K(B asir $B8@8l$K0MB8$7$?(B |
エラー情報は言語の仕様に依存するため asir_where の用に asir 言語に依存した |
$B7A<0$N%(%i!<>pJs$N$o$?$7$+$?$b$"$k(B. $B:#8e2?DL$j$+$NJ}K!$K<}B+$7$F$$$/$HM=A[$7$F$$$k(B. |
形式のエラー情報のわたしかたもある. 今後何通りかの方法に収束していくと予想している. |
|
|
reason_of_error, (CMO_STRING)$B<B9T;~%(%i!<$NM}M3(B |
reason_of_error, (CMO_STRING)実行時エラーの理由 |
where, (CMO_ARRAY) $B<B9T;~%(%i!<$N>l=j$r$"$i$o$9(B CMO_STRING $B$N(Barray. |
where, (CMO_ARRAY) 実行時エラーの場所をあらわす CMO_STRING のarray. |
lines, (CMO_ARRAY) $B<B9T;~%(%i!<$r5/$3$7$?9THV9f(B(CMO_INT32) $B$N(Barray. |
lines, (CMO_ARRAY) 実行時エラーを起こした行番号(CMO_INT32) のarray. |
-1 $B$OITL@$rI=$9(B. |
-1 は不明を表す. |
locals, (CMO_ARRAY) $B<B9T;~%(%i!<$N;~$N6I=jJQ?t$NL>A0$HCM$N(B |
locals, (CMO_ARRAY) 実行時エラーの時の局所変数の名前と値の |
pair($BD9$5(B2$B$N(Barray) $B$N(B array |
pair(長さ2のarray) の array |
parse_error_at, (CMO_INT32) parse $B%(%i!<$r$*$3$7$?9THV9f(B. |
parse_error_at, (CMO_INT32) parse エラーをおこした行番号. |
reason_of_parse_error, (CMO_STRING) parse $B%(%i!<$NM}M3(B. |
reason_of_parse_error, (CMO_STRING) parse エラーの理由. |
asir_where, (CMO_ARRAY) asir$B7A<0$N%(%i!<0LCV>pJs(B. |
asir_where, (CMO_ARRAY) asir形式のエラー位置情報. |
[$B>l=j(B,$B4X?tL>(B,$B9THV9f(B] $B$^$?$O(B [$B>l=j(B,$B9THV9f(B] $B$N%j%9%H(B. |
[場所,関数名,行番号] または [場所,行番号] のリスト. |
$BIi$N9THV9f$O0UL#$N$J$$>pJs$G$"$j%/%i%$%"%s%H$OL5;k$9$Y$-$G$"$k(B. |
負の行番号は意味のない情報でありクライアントは無視すべきである. |
*/ |
*/ |
|
|
/*&C |
/*&C |
|
|
Example 3. |
Example 3. |
["asir_where" |
["asir_where" |
[["toplevel", 10], |
[["toplevel", 10], |
["string","foo",3], // string $B$O(B execute_string $B$GEO$5$l$?(B string $BFb$r0UL#$9$k(B. |
["string","foo",3], // string は execute_string で渡された string 内を意味する. |
["/usr/local/lib/OpenXM/asir/lib/afo.rr","abc",4] |
["/usr/local/lib/OpenXM/asir/lib/afo.rr","abc",4] |
] |
] |
] |
] |
|
|
*/ |
*/ |
|
|
/*&ja |
/*&ja |
$BNc(B2$B$NJdB-(B. |
例2の補足. |
["where",["shell","length"]], |
["where",["shell","length"]], |
["lines", [15,-1]] |
["lines", [15,-1]] |
$B$N(B lines $B$N0UL#$O2r@b$rMW$9$k$G$"$m$&(B. |
の lines の意味は解説を要するであろう. |
[15,-1] $B$N(B 15 $B$O(B executeString $B$KM?$($i$l$?J8;zNs$N(B 15 $B9TL\$K=P8=$7$F$$$k(B |
[15,-1] の 15 は executeString に与えられた文字列の 15 行目に出現している |
$B4X?t(B shell $B$G%(%i!<$,5/$3$C$?$3$H$r0UL#$7$F$$$k(B. |
関数 shell でエラーが起こったことを意味している. |
$B4X?t(B shell $B$NCf$+$i8F$P$l$F$$$k(B length $B4X?t$G%(%i!<$,5/$-$F$$$k$N$G$"$k$,(B, |
関数 shell の中から呼ばれている length 関数でエラーが起きているのであるが, |
-1 $B$O$=$N9T(B(shell $B4X?t$NDj5ACf$G$NAjBPE*$J9THV9f(B)$B$OITL@$G$"$k$H$$$&$3$H$r(B |
-1 はその行(shell 関数の定義中での相対的な行番号)は不明であるということを |
$B0UL#$7$F$$$k(B. |
意味している. |
*/ |
*/ |
|
|
//&ja @@$B;29MJ88%(B |
//&ja @@参考文献 |
//&en @@Bibliography |
//&en @@Bibliography |
|
|
/*&C |
/*&C |