.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "ZEBEDEE 1" .TH ZEBEDEE 1 "2022-06-07" "perl v5.20.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Zebedee \-\-\- シンプルでフリーでセキュアなトンネルプログラム .SH "書式" .IX Header "書式" .IP "Server:" 4 .IX Item "Server:" \&\fBzebedee\fR \fB\-s\fR [\fB\-dDtu\fR] [\fB\-f\fR \fIfile\fR] [\fB\-k\fR \fIkeybits\fR] [\fB\-n\fR \fIname\fR] [\fB\-o\fR \fIlogfile\fR] [\fB\-r\fR \fIports\fR] [\fB\-v\fR \fIlevel\fR] [\fB\-x\fR \fIconfig\fR] [\fB\-z\fR \fIlevel\fR] [\fItargethost\fR] .IP "Client:" 4 .IX Item "Client:" \&\fBzebedee\fR [\fB\-dDmtu\fR] [\fB\-e\fR \fIcommand\fR] [\fB\-f\fR \fIfile\fR] [\fB\-k\fR \fIkeybits\fR] [\fB\-n\fR \fIname\fR] [\fB\-o\fR \fIlog\fR] [\fB\-v\fR \fIlevel\fR] [\fB\-x\fR \fIconfig\fR] [\fB\-z\fR \fIlevel\fR] [[\fIclientports\fR:]\fIserverhost\fR[:\fItargetport\fR]] .IP "Key generation:" 4 .IX Item "Key generation:" \&\fBzebedee\fR \fB\-p\fR [\fB\-f\fR \fIfile\fR] .Sp \&\fBzebedee\fR \fB\-P\fR [\fB\-p\fR] [\fB\-f\fR \fIfile\fR] .IP "Hash generation:" 4 .IX Item "Hash generation:" \&\fBzebedee\fR \fB\-h\fR [\fIfile ...\fR] .Sp \&\fBzebedee\fR \fB\-H\fR \fIstring\fR ... .IP "Windows Service:" 4 .IX Item "Windows Service:" \&\fBzebedee\fR [\fB\-n\fR \fIname\fR] \fB\-S\fR [install[=\fIfile\fR] | remove | run] .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBZebedee\fRは2つのシステム間で、 暗号化され、圧縮されたTCP/IPまたはUDPの\*(L"トンネル\*(R"を確立する単純なプログラムである。 これは、低帯域のネットワーク上でのパフォーマンスを圧縮により向上するだけでなく、 \&\fBtelnet\fR, \fBftp\fR や \fBX\fR などの \s-1TCP\s0 ベースの トラフィックを盗聴から防御することも可能にする。 また、暗号化の有無にかかわらずデータ圧縮を使用することで、 遅いネットワークで良好なパフォーマンスを得ることも可能である。 .PP \&\fBZebedee\fR の主な目的は: .IP "\(bu" 4 \&\s-1UNIX\s0 と Windows 95/98/NT の双方にてクライアントとサーバーの機能を提供する。 .IP "\(bu" 4 ほんの少しの設定か全くの設定無しで簡単にインストール、使用、保守ができる。 .IP "\(bu" 4 少しの付加データと、少ないプロトコルのオーバヘッドにて、 圧縮により多大なトラフィックの低減を行う。 .IP "\(bu" 4 特許化されていないか、または特許の有効期限が切れているアルゴリズムのみを用いる。 .IP "\(bu" 4 \&\s-1GNU\s0 一般公有使用許諾書(\s-1GPL\s0)のもとで商用、非商用を問わず 完全にフリーに使用・配布ができる (\*(L"\s-1CREDITS AND LEGALITIES\*(R"\s0 を見よ)。 .PP もちろん、\fBZebedee\fR は初めてのあるいは唯一の利用可能な セキュアなトンネルプログラムではない。 高機能という面では \fBssh\fR や \fB\s-1SSL\s0\fR などとは比べ物にもならないが、 もし、素早く、単純で、\fB完全にフリー\fRなものを求め ているなら、これはピッタリのツールだろう。 .PP この文書は \fBZebedee\fR リリース 2.0.0 の機能について記している. .SS "名前の由来は?(What's in a name?)" .IX Subsection "名前の由来は?(What's in a name?)" あなたが疑問を持とうが持つまいが、\fBZebedee\fR は次の 3つの主要なコンポー ネントから命名された。 .IP "\(bu" 4 \&\fBZ\fRlib による圧縮 .IP "\(bu" 4 \&\fBB\fRlowfish による暗号化 .IP "\(bu" 4 \&\fBD\fRiffie-Hellman による認証 .PP これでわかったよね? .SS "基本的な使い方(Basic Usage)" .IX Subsection "基本的な使い方(Basic Usage)" ローカルマシンとリモートホストを安全に接続するには、 まずリモートホストの方で、\fBZebedee\fR をサーバーモードで起動する必要がある。 一番簡単な方法は、\fB\-s\fR オプションを使うことだ。 .PP .Vb 1 \& zebedee \-s .Ve .PP うまくいけば(いくはず!)\fBZebedee\fRは 端末(windowsではコンソールウインドウ)から切り離されてバックグラウンドで走る。 そして、クライアントからの接続を待つ。 .PP 次にクライアントマシンで\fBZebedee\fRをクライアントモードで起動する。 この場合は、リモートホストのホスト名とトンネルすべきサービス名かポート番号 (ここではこれをターゲットポートと呼ぶことにする)を指定する。 例えば、リモートホストの名前が\f(CW\*(C`remhost\*(C'\fRで 安全な\fBtelnet\fRセッションを張りたいとしたら、こうなる。 .PP .Vb 1 \& zebedee remhost:telnet .Ve .PP 実際には、ポートのデフォルトがtelnetなので このケースでは次のように省略してもよい。 .PP .Vb 1 \& zebedee remhost .Ve .PP このコマンドを実行すると、 トンネルの入口になる(ローカル側の)ポートの番号が表示される。 \&\fBZebedee\fRは端末から切り離されてバックグラウンドで走り、 このローカル側のポートに接続されるのを待つ。 例えば、1234と表示されたら、 .PP .Vb 1 \& telnet localhost 1234 .Ve .PP とすれば、\f(CW\*(C`remhost\*(C'\fRに安全なトンネル経由で接続される。 .PP デフォルトでは、\fBZebedee\fRはプロセスを終了させるまで接続を待ち続けて、 必要があれば同時発生する複数のコネクションを処理する。 .PP 時には、\fBZebedee\fRを起動し、 その後すぐにそのポートに接続するコマンドを起動したいこともあるだろう。 これを一発でやるには次のようにする。 .PP .Vb 1 \& zebedee \-e "telnet localhost %d" remhost .Ve .PP 文字列中の"\f(CW%d\fR"がローカルポート番号と置き換えられる。従って、 \&\fBZebedee\fRはポート番号を表示しない(する必要がない)。 このようにコマンドを指定した場合には、そのコマンドが接続を終了すると同時に、 ローカル側の\fBZebedee\fRクライアントも終了する。 .PP クライアントが使用するローカルポート番号を指定したい(する必要がある)こともあるだろう。 (保護したい通信を行なう)コマンドが、特定のポートに接続しようとする場合だ。 この場合は、\fBZebedee\fRを次のように起動することで、 ローカルポートを指定することもできる。 .PP .Vb 1 \& zebedee clientport:hostname:targetport .Ve .PP 例えば、次のコマンド: .PP .Vb 1 \& zebedee 8000:webhost:80 .Ve .PP は、クライアントの8000番ポート経由で接続する、 \&\fBwebhost\fRへの全てのHTTP接続を保護する。 詳細は\s-1EXAMPLES\s0参照のこと。 .PP また、\fBZebedee\fR クライアントは 同一ホスト内の複数のターゲットポートに対して、 複数のトンネルを(同時並行的に)扱うこともできる。 この場合は、ローカルとリモートのポートの指定はポート番号のリストになる。 例えば .PP .Vb 1 \& zebedee 9001,9002,9003:somehost:daytime,telnet,ftp .Ve .PP これは、9001番のクライアントポートへの通信を、 リモートのターゲットシステムの\fBdaytime\fRポートへとトンネルする。 同様に、9002番は\fBtelnet\fRポートへ、9003番は\fBftp\fRポートへトンネルする。 .PP 詳細は \&\fBclientport\fRと \&\fBtargetport\fRを参照のこと。 .SS "UDPトンネリング(\s-1UDP\s0 Tunnelling)" .IX Subsection "UDPトンネリング(UDP Tunnelling)" \&\fBZebedee\fRはもともとは \s-1TCP/IP\s0 のトラフィックだけを扱うように設計されたが、 バージョン2.0.0からはコネクションレスのUDPのデータも扱えるようになった。 この機能を有効にするには\fBZebedee\fRを \fB\-u\fR オプション付きで起動する (または、\fBudpmode\fR キーワードを使用する)。 例えばサーバ側で .PP .Vb 1 \& zebedee \-s \-u .Ve .PP クライアント側で .PP .Vb 1 \& zebedee \-u 10000:somehost:echo .Ve .PP を実行する。なお、ひとつのクライアントとサーバは、TCPかUDPのどちらかを扱い、 両方同時に扱うことはできない。両方のタイプをトンネルするには、 2つの独立したインスタンスを起動する。 TCPモードとUDPモードのサーバは違うポートを使うので、 両者を同じシステムで起動することは安全である。 .PP UDPモードでも\fBZebedee\fRのクライアントとサーバ間のトンネルはTCP/IPで接続する。 この接続は無通信が一定時間続くとタイムアウトする。 タイムアウトしてからさらにデータが来るとトンネルの再接続を行う必要があるので、 アプリケーションの特性によっては UDPモードのパフォーマンスがよくないように見えることもある。 また、扱えるUDPダイアグラムのサイズにも制限があることにも注意すること。 .PP 詳細は、\fBmaxbufsize\fR、 \&\fBudpmode\fR、 \fBudptimeout\fR を参照のこと。 .SS "言葉の定義(Some Terminology)" .IX Subsection "言葉の定義(Some Terminology)" 通常は、\fBZebedee\fRを使用する場合、関係するシステムは2つである。 片方でクライアントを起動して、ローカルポートでそれと通信する。 反対側ではサーバを起動して、そのシステムで動作しているサービスと会話する。 しかしながら、次のように最大4つのシステム(マシン)が関係するケースもありえる。 .PP .Vb 5 \& [ソース] <===> [クライアント] <=====> [サーバ] <===> [ターゲット] \& | | | \& +\- 安全でない | + 安全でない \& 接続 | 接続 \& +\- 安全なトンネル .Ve .PP \&\fBZebedee\fRのクライアントは「クライアント」システムで、 サーバは「サーバ」システムでそれぞれ動作している。 トンネル設定の契機となる最初の接続は「ソース」マシンから発生する。 「ソース」と「クライアント」は違うシステムであってもかまわないが、 通常は同一のシステムである。 サーバは最後に「ターゲット」システムと通信する。 ターゲットも普通はソースと同じマシンになるが、違うマシンであっても全く問題はない。 .PP ほとんどの場合、「ソース」と「クライアント」、 「サーバ」と「ターゲット」の違いを気にする必要はない。 しかし、この用語の区別が以下に述べるキーワードに多く反映している。 キーワードの説明を読む時には、このことを頭に入れておいたほうがいいだろう。 .PP \&\fBZebedee\fRのトンネルに関係するこの4つシステムの問題と別に、 安全に接続するために、いくつかの全く違うタイプの「キー(key)」が使われる。 クライアントとサーバは\fBprivate key\fR(秘密鍵)という値を必要とする (自分で生成する場合もある)。 このキーからは、public values が計算され交換され、 それにより\fBshared secret key\fR が導き出される (この時にDiffie\-Hellman key agreement mechanism が使用される)。 このキーからは、接続のたびにユニークな\fBsession key\fRが導き出され、 最終的にこのキーで暗号化が行なわれる。 .SS "設定ファイル(Configuration File)" .IX Subsection "設定ファイル(Configuration File)" \&\fBZebedee\fR の動作をコントロールするには、 設定ファイルを使うのがおそらく一番よい。設定ファイルを指定するには コマンドラインオプションで \fB\-f\fRを使う。ファイルは(\fB\-f\fR)オプションの位 置で処理される。従って、それ以降のコマンドラインオプションでファイルの内 容を上書きすることができる。 .PP 行の形式は以下のとおり。 .PP .Vb 1 \& key value # optional comment .Ve .PP \&\fIkey\fRはひとつの単語であり大文字小文字は無視される。\fIvalue\fRは単語か文字 列かどちらかである。 文字列はダブルクォート(\f(CW"こんな風に"\fR)かシングルクォート (\f(CW\*(Aqこんな風に\*(Aq\fR)でくくられる。ダブルクォート " の中に シングルクォート ' があってもよいし(\f(CW"here\*(Aqs an example"\fR)、その逆も言える。 value では大文字小文字の違いは区別される。 .PP 空白行と"\f(CW\*(C`#\*(C'\fR\*(L"ではじまる行(その前に空白があっても同じ)は無視される。 長い文字列は \*(R"\f(CW\*(C`\e\*(C'\fR"で次の行に継続することもできる。 この文字は除去され、次の行がこの行に接続される。 1行の長さは継続行も含め 1024 文字に制限されていることに注意。 行の接続はコメントの認識を含めすべての処理に先だって行われる。 そのため以下の例 .PP .Vb 3 \& server false \& # This comment continues on the next line \e \& server true .Ve .PP では、\fBserver\fRの値は \fBfalse\fRになる。 .PP キーワードとその意味は以下に述べる。 ほとんどのキーワードは対応するコマンドラインオプションがあるが、 なかには対応するオプションがないものもある。 対応するコマンドラインオプションがあるものについてはそれも併記してある。 逆に、コマンドラインオプションの中には 設定ファイル内のキーワードに対応するものがないものもある。 それらはこのセクションの最後に述べる。 .PP キーワードが真偽値(boolean)と書かれていたら、 その値は"\fBtrue\fR\*(L" または \*(R"\fBfalse\fR"でなければならない。 .PP キーワードの中にはポートのリストを指定するものがある。 この場合は、ポート名(サービス名)、ポート番号、番号の範囲を コンマか空白で区切ったものを指定する。 例えば、"\f(CW\*(C`telnet, ftp 5900\-5903\*(C'\fR\*(L"は \&\*(R"\f(CW\*(C`23,21,5900,5901,5902,5903\*(C'\fR"と等しい。 .PP また、クライアントだけに指定するキーワードもあるし、 サーバだけに指定するキーワードもある。 ひとつの \fBZebedee\fR プログラムはサーバかクライアントかどちらかひとつの機能を実行し、 その時の用途と違う用途向けのオプションは無視する。 エラーメッセージも表示しない。 サーバになるかクライアントになるかは、 \&\fBserver\fR キーワードで決まる。 .IP "\fBserver\fR (コマンドラインでは \fB\-s\fR)" 4 .IX Item "server (コマンドラインでは -s)" これは、クライアントになるかサーバになるかを決める真偽値のキーワードである。 これが指定されなかった場合は、クライアントとして動作する。 コマンドラインオプションの \fB\-s\fR オプションはこの値を\fBtrue\fRにするのと等しい。 .PP \fIクライアント専用キーワード(Client\-Only Keywords)\fR .IX Subsection "クライアント専用キーワード(Client-Only Keywords)" .PP 以下のキーワードはクライアントだけに適用される。 .IP "\fBcommand\fR (コマンドラインでは \fB\-e\fR)" 4 .IX Item "command (コマンドラインでは -e)" クライアントとして動作している時に意味を持つ。 これは、トンネルへ接続した後に起動されるコマンドを示す。 この値が "\f(CW%d\fR" という文字列を含んでいたら、実行時にローカルポート番号と置き変えられる (\fBclientport\fR 参照)。 この処理は\fBsprintf\fR関数を使用して行なうので、 "\f(CW\*(C`%\*(C'\fR\*(L"によるエスケープ処理が適用される (すなわち、\*(R"\f(CW\*(C`%\*(C'\fR\*(L" を 1 文字生成するためには \*(R"\f(CW\*(C`%%\*(C'\fR\*(L" を使う)。 さらに、\*(R"\f(CW%d\fR\*(L" を二つ以上指定したり \*(R"\f(CW%d\fR" 以外のフォーマット指定子 を指定すると、おそらくプログラムはクラッシュするだろう。 .Sp コマンドが接続を閉じたら、\fBZebedee\fRも終了する。 このキーワードおよびオプションを使用すると、暗黙のうちにマルチユースモードがOFFになる (\fBmultiuse\fR参照)。 \&\fBZebedee\fR クライアントが複数の接続を扱う場合 (\fBmultiuse\fR)やポートのリストが \&\fBclientport\fRで指定された場合は、コマンドの自動起動は 使用することができない。 .IP "\fBclientport\fR" 4 .IX Item "clientport" これは\fBZebedee\fR クライアントがローカル接続のためにlistenすべき、 ひとつのポート番号かポート番号のリストである。 .Sp もしクライアントがトンネルするのが単独のリモートポートならば、 これは省略できる。 その場合はポートは自動的に割り当てられて、 端末にポート番号を示すメッセージが表示される。 .Sp ポート番号のリストを指定する時は、リモートポートがコマンドラインで指定されたのであれ、 \&\fBtargetport\fR キーワードで指定されたのであれ、 ポートの数は正確にリモートポートの数と一致しなければならない。 .Sp 2.0.0より前のバージョンでは、同じ意味で\fBlocalport\fRというキーワードが使用されていた。 後方互換性のために、このキーワードは現バージョンでも認識される。 .IP "\fBlocalsource\fR" 4 .IX Item "localsource" この値が\fBtrue\fRだと、クライアントはローカルマシンで発生した接続だけを受けつける。 別の言葉で言うと、「ソース」と「クライアント」が同一のシステムである必要がある。 .Sp この値はデフォルトは\fBfalse\fRであり、どのマシンがソースとなっても接続を受けつける。 .IP "\fBmultiuse\fR (コマンドラインでは \fB\-m\fR)" 4 .IX Item "multiuse (コマンドラインでは -m)" この値が\fBtrue\fRだと(デフォルトではそうなっているが)、 \&\fBZebedee\fRのクライアントは複数の接続要求(同時並行的に発生してもよい)を扱い、 要求ひとつひとつに対して、新しいトンネルを設置する。 値が\fBfalse\fRだと、クライアントはシングルユースモードで動作し、 最初の接続が閉じられた直後に終了する。 .Sp コマンドラインの\fB\-m\fRオプションはこれを\fBtrue\fRに設定するのと等しい。 現在のバージョンの\fBZebedee\fRはこれがデフォルトだが (だから、このオプションを設定する必要はないが)、 後方互換性のために残されている。 .Sp クライアントが複数のポートを待ち受ける場合は、 たとえこれが\fBfalse\fRに設定されていても、 自動的に マルチユースモードになる。 (\fBclientport\fR 参照) .IP "\fBserverhost\fR" 4 .IX Item "serverhost" これはトンネルを接続すべきリモートホストの名前である。 ホストの名称にはデフォルトはないので、 設定ファイルかコマンドラインのどちらかで、 必ずこれを指定しなければならない。 .Sp 2.0.0より前のバージョンでは、同じ意味で\fBremotehost\fRというキーワードが使用されていた。 後方互換性のために、このキーワードは現バージョンでも認識される。 .IP "\fBtargetport\fR" 4 .IX Item "targetport" ここに指定したポート番号(リストも可)でターゲットホストに接続するように、 \&\fBZebedee\fRクライアントが\fBZebedee\fRサーバに要求する。 これが指定されない時のデフォルトは"\fBtelnet\fR" (ポート番号 23)である。 .Sp ポート番号のリストを指定する時は、 ローカルポートがコマンドラインで指定されたのであれ、 \&\fBclientport\fR キーワードで指定されたのであれ、 ポートの数は正確にローカルポートの数と一致しなければならない。 .Sp 2.0.0より前のバージョンでは、同じ意味で\fBremoteport\fRというキーワードが使用されていた。 後方互換性のために、このキーワードは現バージョンでも認識される。 .PP \fIサーバ専用キーワード(Server\-Only Keywords)\fR .IX Subsection "サーバ専用キーワード(Server-Only Keywords)" .PP 以下のキーワードはサーバとして動作する時に適用する。 .IP "\fBredirect\fR (コマンドラインでは \fB\-r\fR)" 4 .IX Item "redirect (コマンドラインでは -r)" このキーワードはサーバがリダイレクトするポートのリストである。 (例 "\f(CW\*(C`telnet,ftp, 5900\-5910\*(C'\fR") もし \fBredirect\fR キーワードが指定されない場合は、 どのポートへのトンネル接続要求も受け付けられる。 この方法(\fBredirect\fRを指定しないこと)はテスト中には便利だが、 セキュリティー面でのリスクがあるので、 もし可能ならば(このキーワードで)明示的に許可するポートを指定すべきである。 .Sp このキーワード(または\fB\-r\fRオプション)は複数指定されてもよい。この場合は、 そのうちどれかのポートに指定されていればリダイレクトが許可される。 .IP "\fBtargethost\fR" 4 .IX Item "targethost" デフォルトでは\fBZebedee\fR サーバは 全てのトンネルをローカルマシンのポートにリダイレクトする。 もし、このキーワードが指定されると、 全ての接続はその名称のホストへとリダイレクトされる。 トンネルを安全なネットワークの中にまで延長するのは無駄であるが、 この機能を使用すると、そのオーバーヘッドを省くことができて便利である。 また \fBftp\fR のトラフィックをトンネルする時にも使える。 (詳細は\s-1EXAMPLES\s0参照) .Sp \&\fBZebedee\fRがサーバモードで動作する時は、 通信をリダイレクトすべきホストの名称は、 コマンドラインの最後の付加的なパラメータとして指定することもできる。 .Sp 2.0.0より前のバージョンでは、同じ意味で\fBredirecthost\fRというキーワードが使用されていた。 後方互換性のために、このキーワードは現バージョンでも認識される。 .PP \fI圧縮と暗号化関連のキーワード(Compression and Encryption Keywords)\fR .IX Subsection "圧縮と暗号化関連のキーワード(Compression and Encryption Keywords)" .PP 以下のキーワードは、トンネル内を流れるデータの圧縮と暗号化を制御する。 これらは、クライアントとサーバどちらでも使用される。 .IP "\fBcompression\fR (コマンドラインでは \fB\-z\fR)" 4 .IX Item "compression (コマンドラインでは -z)" \&\fBZebedee\fR は圧縮方式として \fBzlib\fR をサポートする。 そして、もしコンパイル時に有効になっていれば\fBbzip2\fRもサポートする。 このキーワードで圧縮の方式と圧縮レベルを指定する。 この値の形式は \fItype:level\fR である。\fItype\fR は "\f(CW\*(C`zlib\*(C'\fR\*(L" と \*(R"\f(CW\*(C`bzip2\*(C'\fR"のどちらか、\fIlevel\fR は0から9の整数である。 プレフィックスなしで整数だけの場合は、\fBzlib\fRが選択される。 .Sp \&\fIlevel\fR は使用可能な最大の圧縮レベルを設定する (9が最大で0が圧縮なし)。 実際に使用される圧縮レベルは、クライアントの値とサーバの値の最小値である。 この目的では、(0以外の)\fBbzip2\fRレベルはいかなる\fBzlib\fRレベルの値より上であるとみなされる。 従って、サーバとクライアントのいずれかが\fBbzip2\fRレベルをサポートしていなければ、 プロトコルは\fBzlib\fRを選択する。 デフォルトの圧縮レベルは"\f(CW\*(C`zlib:6\*(C'\fR"である。 .Sp \&\fBbzip2\fR圧縮の動作方式とバッファーサイズのために、 \&\fBbzip2\fRは連続的なデータのストリームが流れる場合にだけ使う意味がある。 通常の\fBtelnet\fRセッションのような、小さな転送では\fBzlib\fRの方が性能がよい。 どちらがあなたにとってよく働くかは、実験してみないとわからないだろう。 加えて、バッファーサイズが小さいので、\fBbzip2\fRの1より上からは得るものがない。 \&\fBZebedee\fRはこれより上の値はこの値に変更する。 .Sp verbosity levelを2以上にすれば、 接続が終了した時に基本的な統計値がプリントアウトされるので、 どれだけ圧縮が有効だったか正確に知ることができる。 例えば、 .Sp .Vb 2 \& zebedee(232/210): read 166 bytes (265 expanded) in 3 messages \& zebedee(232/210): wrote 20969 bytes (30499 expanded) in 247 messages .Ve .IP "\fBgenerator\fR" 4 .IX Item "generator" これは、Diffie\-Hellmanキー交換の\*(L"generator\*(R"で、16進数の文字列で指定する。 デフォルトは\*(L"2\*(R"である。 なんのことかわからなければ、 下手にいじらない方がいいだろう。 .IP "\fBkeygencommand\fR" 4 .IX Item "keygencommand" このキーワードが指定されると、 この値(コマンド文字列)が秘密鍵を生成するために使用される。 そのコマンドは標準出力に1行の16進数を出力しなくてはならない。 この行は少くとも10桁の16進数であること。 .IP "\fBkeygenlevel\fR" 4 .IX Item "keygenlevel" これは0と2の間の整数で、\fBZebedee\fRで使用する秘密鍵生成の強度を決定する。 デフォルトは2(最強)である。接続時のパフォーマンスが耐えがたい場合以外には、 一般的にはこれを変更しないほうがよい。 .Sp 簡単に言って、UNXI系のシステムではレベル2のキー生成のメカニズムは、 可能であれば \f(CW\*(C`/dev/random\*(C'\fR を使用する。 しかしながら、あまりにも多くの要求を連続的にこのデバイスに対して行うと、 カーネルが必要な\*(L"エントロピー\*(R"をかき集める間、 プロセスがブロックされる可能性がある(それが数秒になることもある)。 \&\f(CW\*(C`/dev/random\*(C'\fRが使用できない場合や レベルが1にセットされた場合は、 \&\f(CW\*(C`/proc\*(C'\fRファイルシステムの現在の内容が(もしあれば)使用される。 レベル0では現在のプロセスにある情報だけが使用される。 .Sp Windows上のシステムでは、現在のところ、 キー生成強度のレベルごとの違いはなく、 このキーワードは実際には無視される。 .IP "\fBkeylength\fR (コマンドラインでは \fB\-k\fR)" 4 .IX Item "keylength (コマンドラインでは -k)" これは、Blowfish暗号化のキーのビット長の最大値の整数である。 この値は4から576の間の4の倍数でなければならない。 使用されるキー長はクライアントの値とサーバの値の最小値になる。 (\fBminkeylength\fR参照) .Sp デフォルトは128である。 特別なケースとして、この値が0に設定されると、 キーのネゴシエーションと暗号化は無効にされる。 .IP "\fBkeylifetime\fR" 4 .IX Item "keylifetime" このパラメータの値が0以外に設定されると、これ以降の接続において、 クライアントはセッションキーの導出のために、以前設定されたshared secret keyを 再利用するように要求する。 つまり\fBZebedee\fRのクライアントとサーバは、 最初の接続においてのみキー交換の対話を全て行なう。 それ以降の接続では、キーの有効期限が切れるまでは、同じsecret keyが再利用され、 このキーからsession keyが導出される。 キーの有効期限が切れると、自動的に新しいキーの交換が行なわれる。 .Sp そして、このキーワードが、shared secret keyが有効な期間を指定する。 これは、既に接続された接続には影響しないで、新しい接続だけに影響する。 .Sp このキーワードの値の単位は秒であり、65535(約18時間)以下でなければならない。 デフォルトは3600秒(1時間)である。 このキーワードの値を0に設定すると、キーの再利用は行なわれなくなり、 接続の度に、完全なshared keyの交換手続きが行なわれる。 つまり、クライアントもサーバも毎回秘密鍵を新しく生成するとみなす。 ただし、この方法はパフォーマンスに多大な影響があるので、 偏執狂的に高度な安全性を必要とする場合以外には勧められない。 .IP "\fBminkeylength\fR" 4 .IX Item "minkeylength" これは、クライアントまたはサーバで許容される最小のキー長を指定する。 クライアントがサーバのレベルより小さい値を要求すると、 サーバはここで指定した最小値を返答する。 サーバがクライアントの最小値より下のレベルを返答すると、 クライアントは接続を終了する。 .Sp デフォルトは0である。 .IP "\fBmodulus\fR" 4 .IX Item "modulus" このキーワードの値は、Diffie\-Hellmanキー交換の剰余値を表す16進数の文字列である。 これが何かわかる人で数学オタクの人以外はいじっちゃだめ。 .Sp デフォルトの値は下記の1024ビットの素数である。 .Sp .Vb 4 \& f488fd584e49dbcd 20b49de49107366b 336c380d451d0f7c 88b31c7c5b2d8ef6 \& f3c923c043f0a55b 188d8ebb558cb85d 38d334fd7c175743 a31d186cde33212c \& b52aff3ce1b12940 18118d7c84a70a72 d686c40319c80729 7aca950cd9969fab \& d00a509b0246d308 3d66a45d419f9c7c bd894b221926baab a25ec355e92f78c7 .Ve .Sp これは Peter Gutman の \fBCryptLib\fR の中の \fItestdh.h\fR というファイルから とられた。 そこには、この値が \*(L"generated by Colin Plumb for \s-1SKIP\s0\*(R"だとコメントがある。 それから \*(L"these values were chosen as representative well-known public values to allay fears of possible trapdoors in self-generated values. The generation method and actual values can be checked against the \s-1SKIP\s0 standards document.\*(R" だとさ。 .IP "\fBprivatekey\fR" 4 .IX Item "privatekey" デフォルトでは、\fBZebedee\fRはセッションごとに新しい秘密鍵を生成する。 しかし、もしあなたが毎回同じキーを使いたい場合は、 16進数の文字列としてこれを指定すればいい。 もし公開鍵暗号による認証(identitychecking)を使用したい場合は、 必ずこれを設定しなくてはいけない。 キーが少くとも10桁は必要なことに注意すること。 .PP \fI様々なキーワード(Miscellaneous Keywords)\fR .IX Subsection "様々なキーワード(Miscellaneous Keywords)" .PP 以下のキーワードはクライアントにもサーバにも等しく適用される。 .IP "\fBcheckidfile\fR" 4 .IX Item "checkidfile" これは、接続を許可する前にチェックするアイデンティティを複数記述したファイルの名称である。 これについてはidentity checkingで詳しく述べる。 このファイルはひとつしか指定できない。もし複数出現したら、 最後の値が使用される。 .Sp もし、\fBkeylength\fRが0であることに (クライアントとサーバが)同意した場合は、アイデンティティのチェックは行なわれない。 .IP "\fBdebug\fR (コマンドラインでは \fB\-D\fR)" 4 .IX Item "debug (コマンドラインでは -D)" これは\fBZebedee\fRが \*(L"debug\*(R" モードで動作するかを指定する真偽値である。 \&\*(L"debug\*(R" モードではサーバは (\fBmultiuse\fRモードのクライアント)は 一度に一つの接続しか受け付けない。 そして、別プロセスや別スレッドを生成することなく \*(L"inline\*(R" で動作する。 これはデバッガ上でプログラムを動かす時に便利である。 デフォルトはfalseである。コマンドラインオプションの \fB\-D\fR は これを \fBtrue\fR に設定するのと同じである。 .Sp 注:この設定は、UDPモードでは正しく動作しないので、試さないほうがいい。 .IP "\fBdetached\fR (コマンドラインでは \fB\-d\fR)" 4 .IX Item "detached (コマンドラインでは -d)" これはプロセスが制御端末から自分自身を切離してバックグラウントで (UNIX用語ではデーモンとして)動作するかどうか指定する真偽値である。 これはクライアントでもサーバでも有効であり、 デフォルトは \fBtrue\fR である。コマンドラインオプションの\fB\-d\fRは これを \fBfalse\fR に設定するのと同じである。 .Sp 注:Windowsのコマンドプロンプトではこれがうまく動作しないこともあるようだ。 その徴候は、コンソールウインドウへの出力が止まり割込みのsignalが無視されるが、 コンソールのプロンプトが\fBZebedee\fRが終了するまで表示されないことだ。 これを回避するには、以下のように \*(L"start\*(R" コマンドを使用すればよい。 .Sp .Vb 1 \& DOS> start zebedee \-f server.zbd .Ve .Sp これは\fBZebedee\fRを新しいコンソールセッションで起動し、そこから切り離す。 切り離す前に一瞬だけチラリとそのコンソールが見えるが、それが消えても \&\fBZebedee\fRはバックグラウンドで動作している。 .IP "\fBinclude\fR" 4 .IX Item "include" これは別の設定ファイルの名前を指定する。 そのファイルはこのファイルの残りを処理する前、 この時点で処理される。 例えば、秘密鍵をもっときっちりガードしたファイルに分離して保存した場合に、 そのファイルを取り込むために使用される。 includeは5レベルの深さまでに限定される(最初のファイルをレベル1として)。 これはうっかり無限ループを作らないためである。 .IP "\fBmaxbufsize\fR" 4 .IX Item "maxbufsize" これは、 \&\fBZebedee\fR がアプリケーションからデータを読むために使用するバッファの長さ(バイト単位)を指定する。 実際に使用されるバッファの長さはサーバの値とクライアントの値の最小値になる。 .Sp デフォルトでは、\fBZebedee\fRはトンネルの両端で サーバプログラム、クライアントプログラムから8192バイト単位で読み出す。 例えば、すごく対話的なアプリケーションがあって、 大きなデータ転送を待つためにひどいレスポンスだったりした時など、 これを小さくしたいこともあるだろう。 バッファサイズは1バイトまで縮めることができるが、 おかしな動きをデバッグしようとしているのか時間を無駄にしたいのでなければ、 これはお勧めできない。 逆に、大量のデータの転送があって、 圧縮をめいっぱい効かせたい場合は、16383バイトまで大きくしてもよい。 注:\fBmaxbufsize\fR は \fBZebedee\fR が使用するメモリ量には関係ない。 一度に読みこむデータのかたまりのサイズだけに影響する。 .Sp UDPモードでは、バッファサイズは扱えるデータグラムの最大長にも影響する。 現在のバッファサイズより大きなデータグラムは分断され、 それを受信するアプリケーションが落ちることになりがちだ。 16383バイト以上のデータグラムは扱うことができない。 .IP "\fBmessage\fR" 4 .IX Item "message" verbosity level が1ならば、設定ファイルのこの部分を処理した時に、 このメッセージがログに記録される。 .IP "\fBname\fR (コマンドラインでは \fB\-n\fR)" 4 .IX Item "name (コマンドラインでは -n)" これは、実行ファイルのファイル名の代わりに、 メッセージの中で使われるプログラム名称になる。 Windows環境では、インストールあるいは削除されるサービスの名前としても用いられる。 .IP "\fBlogfile\fR (command-line \fB\-o\fR)" 4 .IX Item "logfile (command-line -o)" これはメッセージが出力されるファイルの名前である。 もし省略されるとメッセージは標準エラーに出力される。 .Sp 2つの特殊なファイル名も正しい名前として認識される。 もし、名称が\fB\s-1NULL\s0\fRだと、全てのメッセージ出力は止められる。 \&\fB\s-1SYSLOG\s0\fRだと、メッセージはホストのシステムログに出力される。 Windowsシステムでは、アプリケーションイベントログを意味する。 他のシステムでは、メッセージは\fBsyslog\fR サービスに出力される。 .IP "\fBserverport\fR" 4 .IX Item "serverport" これは、\fBZebedee\fR サーバが接続を待ち受けるポートである。 デフォルトはTCPモードでは11965 (0x2EBD)、UDPモードでは11230(0x2BDE)である。 サーバでこれを指定すると、サーバはこのポートでlistenする。 クライアントでこれを指定すると、クライアントは サーバのこの番号のポートに接続することになる。 .IP "\fBtimestamplog\fR (コマンドラインでは \fB\-t\fR)" 4 .IX Item "timestamplog (コマンドラインでは -t)" これは、ログメッセージにタイムスタンプを含めるかどうかを示す真偽値である。 コマンドラインオプションの \fB\-t\fR はこれを\fBtrue\fRに設定するのと同じである。 .IP "\fBudpmode\fR (コマンドラインでは \fB\-u\fR)" 4 .IX Item "udpmode (コマンドラインでは -u)" デフォルトでは\fBZebedee\fRは、コネクションベースのTCP/IPの通信を扱う。 もし、このキーワードが指定されると、かわりにコネクションレスのUDP/IPの通信を扱う。 .Sp この場合でも、\fBZebedee\fRのクライアントとサーバ間のトンネルはTCP/IP接続を使用する。 UDPの宛先ごとに別々の接続が使用される。 UDPはコネクションレスなので、通信が完了したことを簡単に知ることはできない。 この理由で、\fBZebedee\fRの接続は一定の時間通信が無い場合にタイムアウトする必要がある。 この時間は\fBudptimeout\fRの値で制御される。 .Sp すでにタイムアウトしてしまったトンネルに向けたデータが到着した場合、 接続を再確立する必要がある。 このために、アプリケーションの特性によっては、 UDPモードのパフォーマンスがよくないように見えることもある。 \&\fBkeylifetime\fRの値を変更して、 接続のセットアップの時間を最小にすれば、パフォーマンスを向上させることができる。 \&\fBudptimeout\fR の値を変更することも同様に役に立つ。 .Sp コマンドラインオプションの\fB\-u\fRは、この値を\fBtrue\fRに設定するのと同じである。 .IP "\fBudptimeout\fR" 4 .IX Item "udptimeout" デフォルトでは、UDPモードのトンネルは、300秒通信が無いと閉じられる。 このキーワードでその時間を変更できる(単位は秒)。 この値は65535より大きくなってはいけない。 これを0にすると一切通信が行なわれない(そういう設定もできるけど…)。 .IP "\fBverbosity\fR (コマンドラインでは \fB\-v\fR)" 4 .IX Item "verbosity (コマンドラインでは -v)" これは、ログするメッセージのレベルを示す整数値である。 0だとエラーメッセージだけ、 5にするとメッセージトラフィックの非常に細かいディテールまで含める。 デフォルトは1であり、通常はそれが最も使いやすい。 .Sp メッセージは \fIstderr\fR に出力される(コマンドラインオプションの\fB\-o\fRか \&\fBlogfile\fR キーワードでリダイレクトされない限り) 一般的なメッセージはこんな感じである: .Sp .Vb 1 \& zebedee(54/119): Listening on local port 1172 .Ve .Sp カッコの中の数字はメッセージを出力したプロセスとスレッドのIDを表している。 全てのエラーメッセージはレベル0でもログが取られ、 以下の様に、先頭が \f(CW\*(C`ERROR\*(C'\fR という単語から始まる。 .Sp .Vb 1 \& zebedee(54/119): ERROR: failed to connect to localhost:11965 .Ve .Sp メッセージはログが取られたレベルに従ってインデントされる。 .PP \fIその他のオプション(Other Options)\fR .IX Subsection "その他のオプション(Other Options)" .PP 設定ファイルに対応するものを持たないコマンドオプション がいくつかあるので、それについてここで説明する。 .IP "\-p" 4 .IX Item "-p" このオプションで \fBZebedee\fR は秘密鍵の値を標準出力に出力する。 この出力は設定ファイルでそのまま使用できる形式である。 例えば、 .Sp .Vb 1 \& privatekey "c480bd48f707c69dec54c9e7b6e22dd04cac659e" .Ve .Sp の様な形である。 .IP "\-P" 4 .IX Item "-P" このオプションで \fBZebedee\fR はidentity checking で 使用できるパブリックアイデンティティを生成する。結果は標準出力に書かれる。 例えば、 .Sp .Vb 1 \& ef8153a0e392df005f67321ca2f0ace5bb8c5a1f myhostname .Ve .Sp の様な形である。 .Sp このオプションは秘密鍵を含む設定と共に指定するか、 \&\fB\-p\fR と共に用いて秘密鍵と公開鍵を両方同時に生成しなくてはいけない。 .IP "\-h" 4 .IX Item "-h" このオプションは以降の引数をファイル名とみなす。 そして、それぞれのファイルは8192バイトのかたまりとして読みこまれ、 SHAハッシュが計算される。 引数がない場合や引数が"\f(CW\*(C`\-\*(C'\fR"であった場合は標準入力のハッシュが計算される。 例えば、 .Sp .Vb 4 \& $ zebedee \-h /etc/passwd \& bb1e734aeffd2111417761f5938dea3b53759598 /etc/passwd \& $ zebedee \-h < /etc/passwd \& bb1e734aeffd2111417761f5938dea3b53759598 \- .Ve .Sp の様な形である。 .IP "\-H" 4 .IX Item "-H" こちらは\fB\-h\fRと似ているが、引数が文字列として扱われ、 その文字列のSHAハッシュが計算され表示される。 .Sp .Vb 3 \& $ zebedee \-H hello world \& ac62a630ca850b4ea07eda664eaecf9480843152 hello \& 86bf25ecb8a40b40b885c097c683b6e236fc8085 world .Ve .IP "\-S (Windows only)" 4 .IX Item "-S (Windows only)" Windowsシステムでは \fBZebedee\fR を サービス(ブート時に自動的に起動され独立して動くプロセス)として インストールすることもできる。 .Sp \&\fBZebedee\fRは\fBinstall\fRパラメータと設定ファイルの名前を指定することで サービスとしてインストールされる。例えば、 .Sp .Vb 1 \& zebedee \-Sinstall=c:\ezebedee\eservice.zbd .Ve .Sp の様な形である。 .Sp 常に、設定ファイルのフルパスを指定しなければならない。 このファイルはスタートアップ時に読みこまれ、 サービスが動作するために必要なパラメータを全て含んでいなければならない。 .Sp デフォルトでは、 インストールされるサービスの名前はプログラムファイルの名前から取られる。 従って通常は\fBZebedee\fRになる。 しかし、\fB\-n\fRオプションを使用して変更することもできる。 .Sp .Vb 1 \& zebedee \-n "Zebedee Client Service" \-Sinstall=c:\ezebedee\eclientsvc.zbd .Ve .Sp 一旦、サービスがインストールされると、次のシステム再起動から自動的に起動される。 もしくは(Windows NTの場合)サービスコントロールパネルで手動起動することもできる。 .Sp サービスを削除するにはまずサービスを終了してから、\fB\-S\fRオプションと \&\fBremove\fR パラメータを使う。 そして、もし必要ならば\fB\-n\fRオプションでサービスの名称を指定する。 例えば、 .Sp .Vb 1 \& zebedee \-n "Zebedee Client Service" \-Sremove .Ve .Sp の様な形である。 .Sp \&\fB\-S\fRのパラメータは他に \fBrun\fR がある。これは内部で \fBZebedee\fR の サービススタートアップコードを起動するために使うもので、 ユーザが直接使用してはならない。 .IP "\-x" 4 .IX Item "-x" コマンドラインで指定できない設定ファイルのパラメータを 指定するために、このオプションを使用することもできる。 これに文字列の引数をつけると、 それがあたかも設定ファイルの1行であるかのように処理される。 コメントは認識されるが、\*(L"\e\*(R"の継続行は使用できない。 例えば、 .Sp .Vb 1 \& zebedee \-x " server true # It\*(Aqs a server!" .Ve .Sp というまわりくどいやりかたでも次のコマンド .Sp .Vb 1 \& zebedee \-s .Ve .Sp と同じ効果を得ることができる。 .SS "Identity Checking" .IX Subsection "Identity Checking" \&\fBZebedee\fR はデフォルトでは、2点間に暗号化チャネルを生成するに過ぎない。 ご承知の通り、データは \*(L"on the wire (通信線上)\*(R" での盗聴からは守られるが、 あなたが想定している相手に接続されているか否かは保証されない。 これは、\*(L"man\-in\-the\-middle (第三者による横取り)\*(R" アタックに対しては無防備である。 もし、あなたがデータの圧縮と、盗聴から守ることを第一に心配しているなら、 あなたはこの条件に満足するだろう。 しかし、あなたの通信が第三者に横取りされていないことに対する保証を求めるなら、 \&\fBZebedee\fR はそれを行うための便宜を提供する。 .PP もし、同一の素数と原始根と秘密鍵が用いられるなら、それらは Diffie-Hellman の鍵交換プロトコルのために、常に同じ公開鍵を生成するだろう。 もし、あなたが(設定ファイルの\fBprivatekey\fRキーワードにて設定された) 固定された秘密鍵を用いるなら、 \&\fBZebedee\fR は素数と原始根と秘密鍵の値の全てをハッシュして \*(L"fingerprint (指紋)\*(R" を生成することができる。 これは、\fB\-P\fR オプションにより行われる。 例えば、server.key ファイルが次の値 .PP .Vb 1 \& privatekey "1e34d6769502bae1087c18d2e8c8776e4a17ddaf" .Ve .PP であるとき、 .PP 次のコマンド .PP .Vb 1 \& $ zebedee \-P \-f server.key > server.id .Ve .PP を実行すると、 .PP このような出力 .PP .Vb 1 \& 135f04050961d37553731250d5c6f7495f088b32 myhostname .Ve .PP が得られる。 .PP この最初の16進数が \*(L"fingerprint (指紋)\*(R" である。 行中の他の文字列は、このアイデンティティの所有者を表すコメントである。 デフォルトでは、これはアイデンティティが生成されたマシンのホスト名である。 .PP 設定ファイルにおいて \&\fBcheckidfile\fR キーワードが設定された場合、その値は \&\*(L"fingerprint (指紋)\*(R" 行を記述したファイルのファイル名である。 もし、接続 先のアイデンティティがファイル中のいかなる値とも一致しない場合、 接続は切断される。 .SS "その他のセキュリティ関連の注記(Notes on Other Security Issues)" .IX Subsection "その他のセキュリティ関連の注記(Notes on Other Security Issues)" .IP "Message Integrity" 4 .IX Item "Message Integrity" プロトコルのオーバーヘッドを可能な限り小さくするために、 \&\fBZebedee\fR は伝送されたデータの正しさに対する確認は何も行っていない。 そのため、アタッカーは途中でデータパケットを改変することができる。 しかし、暗号の使用はデータを任意に変換することを極めて困難にしているのではないか (例えば、"\f(CW\*(C`ls \-l\*(C'\fR\*(L"を\*(R"\f(CW\*(C`rm \-f\*(C'\fR"に書き換えられるかい?) 。 しかし、\fBZebedee\fR はランダムなデータが送られたことによる影響から アプリケーションを守ることは行わない。 .IP "Replay and Insertion Attacks" 4 .IX Item "Replay and Insertion Attacks" 多くのネットワークシステムにおいて有り得る攻撃の一つは データのキャプチャリングであり、良く知られた効果を及ぼす (例えば、管理者の \fBtelnet\fR セッションにはある種の\*(L"危険な\*(R"操作が伴い、 その操作を後に繰り返されたらどうなるか)。 これを行うには、暗号化されたデータストリームを改変する必要は無いが、 サーバに送られた同じネットワークパケットは、同じレスポンスを引き出すだろう。 .Sp \&\fBZebedee\fR が \*(L"anonymous\*(R" モードで動作しているとき、 セッション毎に異なる鍵が生成されるため、 このようなアタックが成功する危険は非常に小さい。 しかし、identity checkingの機能が使われているときには 鍵は固定されているので、再生は実際に可能性がある。 \&\fBZebedee\fRは、一つ一つの接続毎にユニークなセッションキーを生成することで、 この問題に対処している。 この方法では、接続のセットアップの最後に、チャレンジ\-レスポンスの交換が行なわれ、 相手側のシステムがshared secret keyを保持しており、 以前に記録されたデータをオウム返ししているわけではないことが、 確認される。 .Sp 加えて、\fBZebedee\fR は Blowfish 暗号法を \*(L"cipher feedback\*(R" モードで用いており、 データのあらゆる部分の複号は、 それ以前の全てのデータパケットの複号が成功しているかどうかに依存する。 チャレンジ・レスポンスはデータストリームの \*(L"salts\*(R" を交換するので、 トンネル化されたプロトコルに \*(L"known plain-text\*(R" アタック(辞書攻撃)を加えるのは より困難になる。 .IP "Key Generation" 4 .IX Item "Key Generation" 良くない鍵の使用は、最強の暗号化メカニズムをも汚すことができる。 鍵を生成するとき、\fBZebedee\fR は可能な限り推測が困難なデータをかき集めて、 それを \s-1SHA\s0 ハッシュアルゴリズムにより \*(L"ステア (かき混ぜる)\*(R" する。 .Sp Windowsの場合、アタッカーが既にシステムにアクセスしていれば、 取得可能なあらゆるデータは予測することができる。 しかし既に言及したように、 ほとんどの用途においてこれは許容できるだろう。 興味があるならば、プログラム中のコメントに詳細が説明されているので、 参照されたい。 .Sp もし、鍵の生成メカニズムに不満があるなら、 設定ファイル中の\fBkeygencommand\fR オプションを用いて、 外部の鍵生成プログラムを呼べば良い。 組み込まれている性能を改善する提案は大歓迎だ! .SH "トラブルシューティング(TROUBLESHOOTING)" .IX Header "トラブルシューティング(TROUBLESHOOTING)" \&\fBZebedee\fR は「箱から出してすぐそのまま」動くべきだが、あなたはトラブル にあうかもしれない。ほとんどのトラブルは接続の確立時に起こる (接続さえうまくいけば、データ転送はスムーズにいくことが多い)。 (接続の)セットアップの手順に何が起こっているか簡単に見るには\fB\-v\fRオプションを 使えばよい。\fB\-d\fR \fB\-D\fR もいっしょに使って、\fBZebedee\fRを端末から終了でき るようにして、一度に一つの接続しか処理しないようにしたほうがい いかもしれない。だから、こんな感じになるだろう。 .PP .Vb 1 \& zebedee \-dD \-v 3 \-s .Ve .PP ロギングレベルを3に設定することで、 接続のセットアップの主なやりとりを見ることができる。 問題がその後に起きてると確信が持てるならば、 レベルを4か5にすれば、 (接続時だけでなく)実際の通信で何がやりとりされているかも見ることができる。 .SH "EXAMPLES" .IX Header "EXAMPLES" \&\fBZebedee\fR のパッケージには、たくさんのサンプルの設定ファイルが含まれている。 ここでは、それらの使用法と \fBZebedee\fR を 特定のいくつかのプロトコルで使用する具体的な方法を述べる。 .SS "サーバ設定の例(Example Server Configuration)" .IX Subsection "サーバ設定の例(Example Server Configuration)" \&\fBZebedee\fRのパッケージに含まれる \fIserver.zbd\fR という設定ファイルがある。 これにはよく使われるほとんどのオプションの設定例がある。 .PP .Vb 6 \& # \& # Sample Zebedee server configuration file \& # \& # This shows the use of many, but not all, of the configuration file \& # options available for use by a server. \& # \& \& verbosity 2 # Slightly more than basic messages \& \& server true # Yes, it\*(Aqs a server! \& detached true # Run detached from terminal \& udpmode false # Are we operating in UDP mode? \& \& # Uncomment the following line to log messages to a file \& # \& # logfile \*(Aq./server.log\*(Aq \& # \& # Or to log to the system logging facility uncomment this: \& # \& # logfile SYSLOG \& \& # Uncomment the following line if you want to use a fixed private \& # key stored in a static file. The file should contain a line of \& # the form "privatekey hexadecimal\-key\-string" \& # \& # include \*(Aq./server.key\*(Aq \& \& keygenlevel 2 # Generate maximum strength private keys \& \& # To validate the identity of clients uncomment the following \& # line: \& # \& # checkidfile \*(Aq./clients.id\*(Aq \& \& # Set up allowed redirection ports. \& # These should be pretty safe \-\- but it\*(Aqs not a good idea \& # to open up all ports. \& \& redirect "telnet ftp" # Basic services \& redirect 5900\-5999 # VNC traffic \& redirect 6000\-6010 # X Window System \& redirect "daytime chargen" # Ports useful for testing \& \& targethost localhost # Redirection is to the local machine \& \& compression zlib:9 # Allow maximum zlib compression \& keylength 256 # Allow keys up to 256 bits \& keylifetime 36000 # Shared keys last 10 hours \& maxbufsize 16383 # Allow maximum possible buffer size .Ve .PP 認証の機能をテストするためには、 \&\fBcheckidfile\fRの行をコメントアウトし、 パッケージに含まれる\fIclient1.key\fRか\fIclient2.key\fRというファイルをクライアント側で使用すればよい。 .SS "VNCの使用例(Use with \s-1VNC\s0)" .IX Subsection "VNCの使用例(Use with VNC)" \&\fBZebedee\fRを作った理由の一つとして、ダイアルアップでVNCを使うということがある。 VNCは「リモートフレームバッファコンセプト」を使い、 リモートディスプレイを提供するフリーのシステムである。 Windowsのデスクトップを離れた所に表示することもできるし、 \&\*(L"Xvnc\*(R"サーバを使って X のデスクトップを VNCクライアントマシンから操作することもできるし、 Javaを使えるブラウザーの中から操作することもできる。 詳しくはhttp://www.uk.research.att.com/vnc/を参照のこと。 .PP 提供されるサーバの設定例である\fIserver.zbd\fR は 5900\-5999 ポートを リダイレクトしてVNCセッションをトンネリングする。 このファイルはUNIXでもWindowsでも使用できるが、 Windowsで使うためには、レジストリの\*(L"AllowLoopback\*(R"フラグを セットする必要があるので注意。 以下の断片を(先頭のスペースを取り除いてから)ファイルに保存して \&\fBregedit\fR に読ませれば、そのトリックを実行する。 .PP .Vb 1 \& REGEDIT4 \& \& [HKEY_LOCAL_MACHINE\eSOFTWARE\eORL\eWinVNC3] \& "AllowLoopback"=dword:00000001 \& \& [HKEY_LOCAL_MACHINE\eSOFTWARE\eORL\eWinVNC3\eDefault] .Ve .PP この内容は \fBZebedee\fR パッケージの中の \fIvncloopback.reg\fR にも含まれている。 このレジストリを設定すれば、コマンドラインで与えられたホストにトンネリングされたVNC ビューワを \&\fIvncviewer.zbd\fR で起動することができる。 デフォルトでは、サーバの(WinVNCのデフォルトである)5900ポートにトンネルするが、 コマンドラインで指定して上書きすることもできる。 以下に \fIvncviewer.zbd\fR の内容を示す。 .PP .Vb 5 \& # \& # Zebedee configuration file to start up a tunnelled VNC session \& # \& # Usage: zebedee \-f vncviewer.zbd remote\-host[:vnc\-port] \& # \& \& verbosity 1 # Basic messages only \& \& server false # It\*(Aqs a client \& detached true # Detach from terminal \& \& message "Starting VNC viewer on localhost:99" \& \& # On Windows systems you might use the following: \& \& command \*(Aq"c:\eProgram Files\eORL\eVNC\evncviewer.exe" localhost:99\*(Aq \& \& # On UNIX systems you might use the following: \& \& # command \*(Aqvncviewer localhost:99\*(Aq \& \& targetport 5900 # Remote VNC server on port 5900 unless overridden \& # by a value specified on the command\-line \& \& clientport 5999 # Local connection on 5999 \-\- i.e. localhost:99 \& \& compression 6 # Request normal Zlib compression .Ve .PP 以下のようにこのファイルを使用すると、 .PP .Vb 1 \& zebedee \-f vncviewer.zbd somehost:5901 .Ve .PP \&\fIsomehost\fRの5901番ポートのVNCサーバにトンネルしたVNCビューワを起動する。 ビューワはローカルホストの5999番ポートに接続する。 .PP VNCはJavaのビューワもサポートしている。 もしサーバがポート59xxで動作していたら、 ビューワを58xxからダウンロードすることができる。 しかしながら、 どうもJavaビューワはクライアントへのメインのVNCポート番号で通信しているようだ。 そのため、Javaビューワでこれをトンネルするには、 ローカルとリモートで同じポート番号を使う必要がある。 そのため、例えば、5901番のポートを使っているVNCサーバへのトラフィックを トンネルするには、次のようにする。 .PP .Vb 1 \& zebedee 5801,5901:remotehost:5801,5901 .Ve .PP もしローカルマシンでも5901番ポートを使ったVNCサーバが動いていると、 これはうまくいかない。 しかし、ポートが衝突しないように両者を調整することは可能である。 .PP もうひとつだけ言っておくことがある。 VNCをデータ圧縮とともに使おうとしているなら、 VNCのprotocol encodingに関して実験したほうがよい。 私は、\*(L"raw\*(R" encoding が圧縮の効果が高く、 遅い回線上ではよりよいパフォーマンスを示すことを発見した。 しかし、あなたの場合は違う結果となるかもしれない。 .SS "X Window Systemの使用例(Use with the X Window System)" .IX Subsection "X Window Systemの使用例(Use with the X Window System)" X Window Systemは6000番以上のポートを使う。 .PP \&\fBxlocal\fR というローカルマシンのポート6000でX サーバが動作しているとする。 これは通常、\fBxlocal:0\fR というディスプレイで使われているポートである。 そして、\fBxremote\fRという(リモート)マシンから、 ローカルのディスプレイに安全な \fBxterm\fR のセッションを送り返したいものとする。 これを行なうには、以下のコマンドを \fBxlocal\fR で実行する。 .PP .Vb 1 \& zebedee \-r 6000 \-s .Ve .PP そして、\fBxremote\fR では .PP .Vb 1 \& zebedee 6001:xlocal:6000 .Ve .PP を実行する。 .PP このことは、\fBxremote\fR上で、環境変数の\fB\s-1DISPLAY\s0\fRが\f(CW\*(C`localhost:1\*(C'\fRに設定されていれば、 Xのトラフィックは\fBxlocal\fRに到着することを意味する。 そのため、例えば\fBxterm\fRを安全に\fBxremote\fRから送ろうとするなら、 \&\fBxremote\fR上で次のコマンドを実行する必要がある。 .PP .Vb 1 \& xterm \-display localhost:1 .Ve .PP これが正しく動作するためには、 \&\fBxremote\fRのXサーバのアクセスコントロールリストに\fBlocalhost\fRのエントリーを 追加しなくてはならない。 これを行うには次のコマンドを実行する。 .PP .Vb 1 \& xhost +localhost .Ve .SS "HTTPの通信を安全にする(Securing \s-1HTTP\s0 traffic)" .IX Subsection "HTTPの通信を安全にする(Securing HTTP traffic)" \&\fBZebedee\fRクライアントを\*(L"multi\-use\*(R"モードで動作させることで、 全てのWebサーバへの通信を安全にすることができる。 もし、Webサーバが \fBwebhost\fR のポート80で動作しており、 そのサーバマシンで \fBZebedee\fR サーバも動作しているとしたら、 次のコマンドがローカルマシンの8000番ポート経由のトンネルを設定する。 .PP .Vb 1 \& zebedee 8000:webhost:80 .Ve .PP will set up a tunnel via port 8000 on the client host. Now any URLs that previously were addressed via \fBwebhost\fR, for example: .PP .Vb 1 \& http://webhost/private/index.html .Ve .PP は、この状態では次のURLで安全にアクセスできる。 .PP .Vb 1 \& http://localhost:8000/private/index.html .Ve .PP "\f(CW\*(C`localhost:8000\*(C'\fR"をあなたのプロキシーとして設定することで、 全てのHTTPのトラフィックを安全なトンネル経由にすることもできる。 しかし、注意すべきことは、HTTPのプロキシー設定以外にこの設定をしてはいけない。 Secure HTTPを含む他のプロトコルは他の方法でリダイレクトする必要がある。 ほとんどのブラウザは違うドメインに違うプロキシーを割りあてる設定も可能である。 そのため、必要なものだけ選んでガードすることもできる。 これを行なう方法についてはブラウザのマニュアルを参照されたし。 .SS "FTPの通信を安全にする(Securing \s-1FTP\s0 traffic)" .IX Subsection "FTPの通信を安全にする(Securing FTP traffic)" 以下の手段で、 \&\fBZebedee\fRを使い多くのFTPサーバへのFTPコントロールコネクション (ユーザ名とパスワードが送られるコネクション)を守ることができる。 さらに、\fBZebedee\fRパッケージに含まれる \fBftpgw.tcl\fR スクリプトによって、 パッシブモードのデータコネクションさえも守ることができる。 .PP FTPサーバを扱う最も単純な方法は、以下のように \fBZebedee\fR を起動することだ。 .PP .Vb 1 \& zebedee \-s \-r ftp ftpserverhost .Ve .PP FTPサーバと同じマシンで \fBZebedee\fR を動作させていても、コマンドラインで 明示的にホスト名を指定する必要がある(または \&\fBredirecthost\fRキーワードを使用)。それを \&\fBlocalhost\fRとして参照してはいけない。クライアントシステムでは \&\fBZebedee\fRを次のように起動して、ポート10000番経由のマルチユーストンネル を構築する。 .PP .Vb 1 \& zebedee 10000:ftpserverhost:ftp .Ve .PP FTPサーバに接続するには、次のようなコマンドを使用する。 .PP .Vb 1 \& ftp clienthost 10000 .Ve .PP くどいようだが、\fBlocalhost\fR でなくローカルクライアントのホスト名を使うこと。 もし、windowsの標準FTPクライアントのように、 あなたのFTPクライアントがコマンドラインでポートを指定できない時は、 プログラムの中で(FTPセッションの中で) "\f(CW\*(C`open clienthost 10000\*(C'\fR" というコマンドを使うことができる。 もし、クライアントマシンでFTPサーバが立ち上がっていなければ、 \&\fBZebedee\fR をこのように起動してもよい。 .PP .Vb 1 \& zebedee ftp:ftpserverhost:ftp .Ve .PP これだとFTPクライアントプログラムは次のように起動できる。 .PP .Vb 1 \& ftp clienthost .Ve .PP FTPのコントロールコネクションとデータコネクションが同じ所から来ているか どうかチェックするFTPサーバがあるが、そういうサーバに対しては上記の手法は うまくいかない。\fBwu-ftpd\fR のようなメジャーなFTPサーバはこの点に ついて厳しくチェックを入れる(セキュリティ面からは望ましいことだが…)。 もし、サーバへの接続は明らかにうまくいくのに、 ファイルのリストや読み出しで失敗したりハングアップするなら、 そのサーバがここを厳しくチェックするタイプだった、ということだ。 .PP この問題を克服するのを助けるために、\fBftpgw.tcl\fR というFTPゲートウェイの スクリプトが \fBZebedee\fR パッケージには含まれている。 このプログラムはフリーに入手可能であるTclスクリプティング言語 (http://www.scriptics.com参照)で書かれていて、 FTPのリクエストを中継して再送信し、サーバから\fBZebedee\fR の存在を隠す。 これは \fBZebedee\fR サーバと同じマシンで走らせる必要がある。 FTPサーバも同じマシンで動いているなら、単にこう起動すればよい。 .PP .Vb 1 \& tclsh ftpgw.tcl .Ve .PP これでゲートウェイはポート2121で待ち受ける。明らかに、実際の使用ではこれ をバックグラウンドで起動したいだろう。それから、\fBZebedee\fRサーバを .PP .Vb 1 \& zebedee \-s \-r 2121 .Ve .PP として起動する。 .PP このケースではローカルホスト名を指定する必要はない (したければしてもかまわないが)。 クライアント側ではこうする。 .PP .Vb 1 \& zebedee 2121:ftpserverhost:2121 .Ve .PP それからこうする。 .PP .Vb 1 \& ftp clienthost 2121 .Ve .PP こちらでは、この場合でもクライアントホスト名を使う。 .PP この設定では、FTPのコントロールコネクションはトンネルされるが、 データコネクションには一切影響を与えない。 もし、あなたのFTPクライアントがパッシブモードをサポートしていれば、 \&\fBftpgw.tcl\fR でデータチャンネルも安全にすることができる。 Netscape Navigator や Windows用のWS_FTPなどはそれをサポートしている。 .PP パッシブモードのデータコネクションを安全にするためには、 まずデータコネクションに使うポート番号の範囲を選ばなくてはいけない。 この例では。30000から30100番を使うものとする。 まず、\fBftpgw.tcl\fR を 起動する時に、このポート範囲を指定するために、 \&\fB\-p\fRオプションを使用する。 .PP .Vb 1 \& tclsh ftpgw.tcl \-p 30000\-30100 .Ve .PP \&\fBZebedee\fRサーバはこのように起動する。 .PP .Vb 1 \& zebedee \-s \-r 2121,30000\-30100 .Ve .PP クライアントはこうだ。 .PP .Vb 1 \& zebedee 2121,30000\-30100:ftpserverhost:2121,30000\-30100 .Ve .PP Netscapeを使ってコントロールコネクションとデータコネクションを 両方安全にアクセスするには、このようなURLを入力する。 .PP .Vb 1 \& ftp://username@clienthost:2121/ .Ve .PP ここで\fIusername\fRはFTPサーバでのユーザ名である。 .SH "CREDITS AND LEGALITIES" .IX Header "CREDITS AND LEGALITIES" The following information can also be found in the file \fI\s-1LICENCE\s0.txt\fR in the \&\fBZebedee\fR distribution. .PP .Vb 1 \& Copyright (c) 1999, 2000 by Neil Winton. All Rights Reserved. \& \& This program is free software; you can redistribute it and/or modify \& it under the terms of the GNU General Public License as published by \& the Free Software Foundation; either version 2 of the License, or \& (at your option) any later version. \& \& This program is distributed in the hope that it will be useful, \& but WITHOUT ANY WARRANTY; without even the implied warranty of \& MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \& GNU General Public License for more details. \& \& You should have received a copy of the GNU General Public License \& along with this program; if not, write to the Free Software \& Foundation, Inc., 59 Temple Place \- Suite 330, Boston, MA 02111\-1307, \& USA. .Ve .PP A copy of the \s-1GNU\s0 General Public License can be found in the file \fI\s-1GPL2\s0.txt\fR. .PP You may obtain the latest copy of \fBZebedee\fR, including full source code from http://www.winton.org.uk/zebedee/ and other enquiries about \fBZebedee\fR can be e\-mailed to the author at zebedee@winton.org.uk .PP \&\fBZebedee\fR would not have been possible without the use of a large amount of freely-available software to do all the really hard stuff. I gratefully acknowledge the contributions made by the authors of the following software packages. .PP \&\fBZebedee\fR uses the \*(L"Blowfish\*(R" encryption algorithm devised by Bruce Schneier. For more information on Blowfish see http://www.counterpane.com/blowfish.html . The implementation used is by Eric Young and is covered by the following copyright: .PP .Vb 2 \& Copyright (C) 1995\-1997 Eric Young (eay@mincom.oz.au) \& All rights reserved. \& \& This package is an Blowfish implementation written \& by Eric Young (eay@mincom.oz.au). \& \& This library is free for commercial and non\-commercial use as long as \& the following conditions are aheared to. The following conditions \& apply to all code found in this distribution. \& \& Copyright remains Eric Young\*(Aqs, and as such any Copyright notices in \& the code are not to be removed. \& \& Redistribution and use in source and binary forms, with or without \& modification, are permitted provided that the following conditions \& are met: \& 1. Redistributions of source code must retain the copyright \& notice, this list of conditions and the following disclaimer. \& 2. Redistributions in binary form must reproduce the above copyright \& notice, this list of conditions and the following disclaimer in the \& documentation and/or other materials provided with the distribution. \& 3. All advertising materials mentioning features or use of this software \& must display the following acknowledgement: \& This product includes software developed by Eric Young (eay@mincom.oz.au) \& \& THIS SOFTWARE IS PROVIDED BY ERIC YOUNG \`\`AS IS\*(Aq\*(Aq AND \& ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \& IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \& ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE \& FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL \& DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS \& OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) \& HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT \& LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY \& OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF \& SUCH DAMAGE. \& \& The license and distribution terms for any publically available version or \& derivative of this code cannot be changed. i.e. this code cannot simply be \& copied and put under another distrubution license \& [including the GNU Public License.] \& \& The reason behind this being stated in this direct manner is past \& experience in code simply being copied and the attribution removed \& from it and then being distributed as part of other packages. This \& implementation was a non\-trivial and unpaid effort. .Ve .PP \&\fBZebedee\fR uses the \fBzlib\fR compression library by Jean-loup Gailly and Mark Adler. It is covered by the following copyright notice: .PP .Vb 1 \& (C) 1995\-1998 Jean\-loup Gailly and Mark Adler \& \& This software is provided \*(Aqas\-is\*(Aq, without any express or implied \& warranty. In no event will the authors be held liable for any damages \& arising from the use of this software. \& \& Permission is granted to anyone to use this software for any purpose, \& including commercial applications, and to alter it and redistribute it \& freely, subject to the following restrictions: \& \& 1. The origin of this software must not be misrepresented; you must not \& claim that you wrote the original software. If you use this software \& in a product, an acknowledgment in the product documentation would be \& appreciated but is not required. \& 2. Altered source versions must be plainly marked as such, and must not be \& misrepresented as being the original software. \& 3. This notice may not be removed or altered from any source distribution. \& \& Jean\-loup Gailly Mark Adler \& jloup@gzip.org madler@alumni.caltech.edu .Ve .PP \&\fBZebedee\fR may use the \fBbzip2\fR compression library by Julian Seward which is covered by the following licence: .PP .Vb 2 \& This program, "bzip2" and associated library "libbzip2", are \& copyright (C) 1996\-1999 Julian R Seward. All rights reserved. \& \& Redistribution and use in source and binary forms, with or without \& modification, are permitted provided that the following conditions \& are met: \& \& 1. Redistributions of source code must retain the above copyright \& notice, this list of conditions and the following disclaimer. \& \& 2. The origin of this software must not be misrepresented; you must \& not claim that you wrote the original software. If you use this \& software in a product, an acknowledgment in the product \& documentation would be appreciated but is not required. \& \& 3. Altered source versions must be plainly marked as such, and must \& not be misrepresented as being the original software. \& \& 4. The name of the author may not be used to endorse or promote \& products derived from this software without specific prior written \& permission. \& \& THIS SOFTWARE IS PROVIDED BY THE AUTHOR \`\`AS IS\*(Aq\*(Aq AND ANY EXPRESS \& OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED \& WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \& ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY \& DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL \& DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE \& GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS \& INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, \& WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING \& NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS \& SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \& \& Julian Seward, Cambridge, UK. \& jseward@acm.org \& bzip2/libbzip2 version 0.9.5 of 24 May 1999 .Ve .PP By default \fBZebedee\fR is built using an aribtrary precision integer arithmetic library derived from the sources to \f(CW\*(C`mirrordir\-0.10.49\*(C'\fR which in turn derived this from the \fBPython\fR sources. The copyright is as follows: .PP .Vb 3 \& huge\-number.c: arbitrary precision integer library from Python sources \& This has nothing to do with cryptography. \& Copyright (C) 1998 Paul Sheer \& \& This program is free software; you can redistribute it and/or modify \& it under the terms of the GNU General Public License as published by \& the Free Software Foundation; either version 2 of the License, or \& (at your option) any later version. \& \& This program is distributed in the hope that it will be useful, \& but WITHOUT ANY WARRANTY; without even the implied warranty of \& MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \& GNU General Public License for more details. \& \& You should have received a copy of the GNU General Public License \& along with this program; if not, write to the Free Software \& Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. \& \& This file was taken from the Python source for \`long\*(Aq type \& integers. I have changed it to compile independently of the \& Python source, and added the optimisation that GNU C can \& use 31 bit digits instead of Python\*(Aqs 15 bit. You can download \& the original from www.python.org. This file bears little \& resemblance to the original though \- paul \& \& Copyright 1991\-1995 by Stichting Mathematisch Centrum, Amsterdam, \& The Netherlands. \& \& All Rights Reserved \& \& Permission to use, copy, modify, and distribute this software and its \& documentation for any purpose and without fee is hereby granted, \& provided that the above copyright notice appear in all copies and that \& both that copyright notice and this permission notice appear in \& supporting documentation, and that the names of Stichting Mathematisch \& Centrum or CWI or Corporation for National Research Initiatives or \& CNRI not be used in advertising or publicity pertaining to \& distribution of the software without specific, written prior \& permission. \& \& While CWI is the initial source for this software, a modified version \& is made available by the Corporation for National Research Initiatives \& (CNRI) at the Internet address ftp://ftp.python.org. \& \& STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH \& REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF \& MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH \& CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL \& DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR \& PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER \& TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR \& PERFORMANCE OF THIS SOFTWARE. .Ve .PP \&\fBZebedee\fR uses the Secure Hash Algorith (\s-1SHA\s0) the code for which was derived from Uwe Hollerbach's \s-1SHA\s0 module for \fBperl\fR. The code contains the following statement: .PP .Vb 4 \& NIST Secure Hash Algorithm \& heavily modified by Uwe Hollerbach \& from Peter C. Gutmann\*(Aqs implementation as found in \& Applied Cryptography by Bruce Schneier \& \& This code is in the public domain .Ve .PP Under Windows, \fBZebedee\fR uses an implementation of the \fIgetopt\fR function covered by the following copyright: .PP .Vb 2 \& Copyright (c) 1987, 1993, 1994 \& The Regents of the University of California. All rights reserved. \& \& Redistribution and use in source and binary forms, with or without \& modification, are permitted provided that the following conditions \& are met: \& 1. Redistributions of source code must retain the above copyright \& notice, this list of conditions and the following disclaimer. \& 2. Redistributions in binary form must reproduce the above copyright \& notice, this list of conditions and the following disclaimer in the \& documentation and/or other materials provided with the distribution. \& 3. All advertising materials mentioning features or use of this software \& must display the following acknowledgement: \& This product includes software developed by the University of \& California, Berkeley and its contributors. \& 4. Neither the name of the University nor the names of its contributors \& may be used to endorse or promote products derived from this software \& without specific prior written permission. \& \& THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS \`\`AS IS\*(Aq\*(Aq AND \& ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \& IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE \& ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE \& FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL \& DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS \& OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) \& HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT \& LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY \& OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF \& SUCH DAMAGE. .Ve .SS "Thanks" .IX Subsection "Thanks" Special thanks go to those people who have taken the trouble to give me feedback and suggestions for improvement! .PP .Vb 1 \& $Id: zebedee.pod,v 1.1 2000/07/18 02:05:04 tnaka Exp $ .Ve