暗号化 - みる会図書館


検索対象: UNIX MAGAZINE 2003年7月号
204件見つかりました。

1. UNIX MAGAZINE 2003年7月号

ータが受信されているかどうかを石忍します。暗号化へッ ダを処理するためには、暗号化へッダ部、初期化べクタ、 暗号化へッダトレイラー部が含まれていなけれはなりませ ん。バケット長がこの長さに満たない場合は、バケットを 破棄します。 IP6_EXTHDR_CHECK (m , off , esplen + ivlen, IPPROTO_DONE) ; 復号に必要な鍵を生成するため、 764 行目で暗号化へッ ダと初期化べクタか連続したメモリ領域に配置されている ことを石忍します。 if (esp-schedule(algo, sav) ! = 0 ) { 778 連載 / IPv6 の実装ーの 764 804 805 806 (caddr-t) &esptail) ; esptail . esp—nxt ; nxt taillen esptail . esp—padlen + sizeof (esptail) ; 803 ~ 806 行目で、暗号化へッダの最後尾に配置されて いるトレイラー部を取り出し、次へッダ値を変数 nxt に コピーします。また、あとでトレイラー部を取り除くため に、暙号化する前のデータの末尾から暗号化へッダトレイ ラー部の末尾までの長さを taillen に設定します。 トレイラー部を表す esptail 構造体を以下に示します。 67 struct esptail { esp. h 780 781 } goto bad ; 68 69 70 u_int8_t u_int8_t ( 詼正データ ) esp—padlen ; e sp—nxt ; 778 行目の esp-schedule() は、 algo でオ旨定された暗 た鍵は SAD 工ントリ (sav) に保存されます。 号アルゴリズムを復号する際の鍵を作成します。作成され 788 790 794 795 798 if ( (*algo->decrypt) (), off , sav, ivlen) ) { m = NULL ; goto bad ; m—>m—flags ー = M—DECRYPTED ; algo , esp-padlen は、暗号化する前のデータの末尾からトレ イラー部までの長さを示します。暙号化へッダは 4 オク テットのアラインメントをもちますから、トレイラー部が ちょうど 4 の倍数の位置で終るように、隙間を埋めなけ 川まならない場合があります。 esp-nxt に暗号化する前の データのヘッダ番号かオ褓内されます。その後ろに言正デー タカきます。なお、この点で言正データの処理はすで に終了しているため、復号処理的には認証データ部は存在 しないものとして進めることができます。 788 行目で、入力したバケットの暗号化へッダを復号し ます。各アルゴリズムは対応する復号関数をもっており、 関数ホインタ (decrypt メンバー変数 ) を参照して呼び出 すことができます。復号に成功したら、 798 行目でバケ ットか彳夏号されたことを示すフラグ (M-DECRYPTED) を mbuf に設定します。復・号処理の途中でエラーがをにし トレイラー部の処理 た場合はバケットを破棄します。 62 sizeof (esptail) , sizeof (esptail) , 803 m—copydata(), m—>m—pkthdr. 1e 照することができません。 タと同時に暗号化されるため、復号処理か完了するまて参 タイ直かオ褓内されていますが、暙号化へッダの作成時にデー す。トレイラー部には復号後のヘッダの不頁を示す次へッ 803 ~ 815 行目は暗号化へッダトレイラー部の処理で 808 809 814 815 if (m—>m—pkthdr. len く taillen Ⅱ m—>m—pkthdr . len ー taillen く sizeof (struct ip6-hdr) ) { goto bad; 808 ~ 815 行目は taillen のイ直の石寉認です。 taillen よ りバケット長カい ( 808 行目 ) か、 IP ヘッダの長さと taillen の合計よりもバケット長か短い場合 ( 809 行目 ) は 処理を継続できません。 818 m—adj (), —taillen) ; 820 ip6—>ip6—p1en = htons(nt0hs(ip6—> ip6-p1en) taillen) ; トレイラー部の処理がすんだので、不要になったデータ を取り除きます。 818 行目でパディングとトレイラー部を 削除し、 820 行目て短くなった IP ヘッダのペイロード長 を調整します。 UNIX MAGAZINE 2003.7

2. UNIX MAGAZINE 2003年7月号

U N Ⅸの道具箱 中山貴夫 SSH 最近は、インターネットを通して遠隔のマシン間での データのやりとりが日常的におこなわれるようになってい ます。出張先や新幹線から研究室や自宅のマシンに簡単に アクセスできる工竟か整い、たいへん便利になりました。 しかし、簡単にいろいろなマシンにアクセスできる環境だ からこそ、さまざまな脅威から自分のデータや凾信内容を 守る必要も出てきています。 たとえば、皆さんのなかにはリモートのマシンにログイ ンするときに、 telnet や rlogin を使っている方もいる かもしれません。しかし、その際にネットワーク上を流れ るすべてのデータはなんの加工も施されていない、いわゆ る、、たオ L 流し " の状態なので、簡単に覗き見 ( 盗聴 ) でき てしまいます。 図 1 と図 2 は、ある計算機にリモートから rlogin で ログインし、何もせすにログアウトしたときの様子と、そ れを盜聴した結果です。図 2 は一を切り出したものです が、省略した部分ではアカウントやパスワードもしつかり 見えてしまっています。 このように、た充し " で、、丸見え " の通信では、パス ワードを他人に知られてしまい、それによって自分のアカ ウントを悪用されないともかぎりません。 そこで、通信を暗号化してデータを守るさまざまな手段 が開発されてきました。そのなかでもよく使われているの が、今回紹介する SSH です。 SSH (Secure SHeIl) は rsh や rlogin 、 rcp など、いわゆる R 系コマンドの f となるプログラムで、強力な暙号化機能により盜聴やデー タの改竄などの攻撃を防ぐことができます。図 3 は、図 1 の通信を SSH を使って暗号化したときの盗聴結果です。 見れは分かるとおりみごとに暗号化されており、これなら UNIX MAGAZINE 2003.7 覗き見されても安じ、です。 SSH で用いられる暗号化方式 SSH では通信路をどのように暗号化しているのでしょ うか。 SSH では、公開多音・号方式 1 と共通鍵暗号方式 2 の 2 不頁の暗号化方式カイ更われています。ここでは、ますこ の 2 つの暗号化方式を簡単に紹介し、 SSH でおこなわれ ている暗号化について説明します。 公開音号方式 公開多音号方式では、、、公開鍵 " と、、秘密鍵 " の 2 つの 鍵をセットで利用します。公開鍵は文字どおりひろく公 開されて誰もが使える鍵で、通信の際には、この公開鍵で 暗号化をおこないます。この公開鍵で暗号化されたデータ は、セットになる秘密鍵でしか復号できません。そのため、 秘曾建はけして他人に見られてはいけません。 それでは、公開音号方式による通信の例をみてみまし よう。図 4 では、公開音号方式を使って A さんが B さ んに秘密のデータを送信しています。 ます、 A さんは B さんの公開鍵をあらかしめなんらか のガ去て取得します。公 l} 巒建は他人に見られてもかまわな いので、この時点ではとくに通イ言路を暗号化しておく必要 はありません。そして、取得した公け艀建でデータを暗号化 し、 B さんに送信します。このデータは公開鍵によって暗 号化されているので、他人に盜聴されても内容を知られる 心配はありません。データを受信した B さんは、自分の秘 密鍵を使って復号し、そのデータを読むことができます。 このように、公艀音、号方式は他人に見られてもよい公 1 非用暗号方式ともいいます。 2 対利暗号カ式ともいいます。 87

3. UNIX MAGAZINE 2003年7月号

団こ三・→三こ [ 三 ] 連載 / UN Ⅸの道具箱ーの 図 4 公開音号方式 図 5 共通号方式 B の秘密鍵 B の公開鍵 公開鍵 なんらかの方法で取得 平文 復号 暗号文 送イ 暗号文 平文 暗号化 = = ロ そのため、通イ目手ごとに違う鍵を用意して使い分けた SSH のバージョン り、通信のたびに違う鍵を用意するといったように工夫さ れています。しかし、いすれにせよどうやって鍵を共有す SSH には SSHI と SSH2 の 2 不頁があり、 SSHI で るかカ墹題となります。 はプロトコル 1 が、 SSH2 ではプロトコル 2 が用いられ 共通鍵暗号方式は鍵の管理が面倒ですが、暗号化や復 ています。 号の処理が上如勺簡単なので、公開鍵暗号よりも高速な SSHI には、さらに 1.3 と 1.5 の 2 つのバージョンが 通信が可能です。共通釶暗号方式の例としては、 DES や あり、どちらも認証に RSA が使用できます . 3DES 、 BIowfish などが挙げられ、いすれも SSH で使 SSH2 では、当初は RSA に関する特許間題を避ける われています。 ため、 DSA という公開音号方式カ甘采用されていました。 SSH では・・ しかし、 2000 年 9 月に RSA の特言雀か放棄されてから SSH では、計算機どうしやユーサーの認証に公開音 は、 SSH2 でも RSA が使えるようになりました。 RSA 、 号方式を、認証後の実際の通信には共通釶暗・号方式を利用 DSA のどちらを使っても暗号強度などに差はないといわ しています。こうすることで、安全て処理の速い通信がお れています。 こなえるような言になっています。 SSHI と SSH2 の違いは、プロトコル 2 のほうか証 89 UNIX MAGAZINE 2003.7

4. UNIX MAGAZINE 2003年7月号

連載 / IPv6 の実装ーの 図 1 SAD 工ントリの検索 627 if ( (sav = key_a110csa(AF—INET6, (caddr_t)&src—sa, esp->esp-spi ; 625 spi (caddr_t) &dst—sa , 628 633 634 } IPPROTO_ESP , spi) ) goto bad; allocsa() は、引数で指定された条件に適合する SAD 工 ントリへのポインタを返す関数です。 SPI の値は受信した ノヾケットの esp-spi に指定されているので、 625 行目で SPI の値を取り出し、 627 行目で終点アドレス (dstsa) と組み合わせて SAD 工ントリを検索します。 はり復号できないので破棄します。 663 664 665 667 668 669 if ( ! ( (sav—>flags & SADB_X_EXT—OLD) & & sav—>replay & & (sav—>alg—auth & & sav—>key—auth) ) ) goto noreplaycheck ; if (sav—>alg—auth = SADB-X-AALG—NULL Ⅱ SADB_AALG_NONE) sav—>alg—auth goto noreplaycheck; 0 637 638 643 644 if (sav—>state ! = SADB—SASTATE—MATURE & & sav—>state ! = SADB—SASTATE—DYING) { goto bad ; 各 SAD 工ントリは、 LARVAL ( 鍵交換処理中 ) 、 MA- TURE ( 通信可能 ) 、 DYING ( 鍵の更新が必要 ) 、 DEAD ( 鍵の有効期限切川の 4 つの状態のいすれか尉寺して います。通信に利用できるのは MATURE と DYING 状態だけですから、検索された SAD 工ントリがそれ舅 V ト の状態を一寺している場合はバケットを破棄します。 660 661 645 646 651 652 655 656 esp—algorithm—lookup (sav—>alg—enc) ; al go if (!algo) { goto bad ; ivlen = sav—>ivlen; if (ivlen く 0 ) { goto bad; 645 ~ 661 行目で、復号に必要な暗号アルゴリズムの情 報と、 IV (lnitialization Vector : 初期化べクタ ) の長さ を SAD 工ントリから取得します。 645 行目の esp-algo- rithm 」 ookup() は、 SAD 工ントリに指定されている暗 号アルゴリズムの不鶤頁 (alg-enc) を、対応する esp-algo- rithm 構造体のポインタに変換する関数です。 alg-enc の 値がカーネルでサポートされていないものであれは ( 646 行目 ) 、復号できないのでバケットを破棄します。初期化 べクタカ坏正な値 ( 負の価である場合 ( 656 行目 ) も、や UNIX MAGAZINE 2003.7 663 ~ 669 行目では、反復攻撃の検出が可能かどうかを 判断します。反復攻撃を検出できるのは次の牛を満たし た場合です。 1. RFC2406 に処した新しい形式のヘッダである。 2. 通し番号の情報を SAD 工ントリに一尉寺している。 3. 暗号化へッダか改竄されていない。 これらの条件を 663 ~ 664 行目で市忍しています。条件 1 は、検索された SAD 工ントリを調べることて判定でき ます。旧い形式の暗号化へッダを利用する場合、 SADB- X-EXT-OLD フラグが付けられています。 条件 2 の通し番号の情報は、 SAD 工ントリの replay メンバー変数凵尉寺されています。 replay メンバー変数 か設定されていない場合、通し番号の石忍ができないので 反復攻撃を検出できません。 最後の条件は、 SAD 工ントリに認証アルゴリズムカ甘旨 定されている (alg-auth 、 key-auth) ことから判断でき ます。ここで指定される認証アルゴリズムは、認証ヘッダ の処理とは関係ありません。暗号化へッダは、認証ヘッダ とは独立に改竄防止の枠組みを用意しています。ただし、 この改竄防止の本咎目みが保証する範囲は、暗号化へッダ以 後の領域のみです。すなわち、暗号化へッダよりも前に配 置される IP ヘッダなどの情報の改竄は検出できません。 反復攻撃の検出では、暗号化へッダの通し番号か改竄され ていないことが重要ですから、バケット全体の改竄を防止 する認証ヘッダは必喫ありません。 59

5. UNIX MAGAZINE 2003年7月号

連載 / IJN Ⅸの道具箱ーの 図 7 RSA (DSA) 公開鍵によるユーサー認証の手順 クライアント ①公開鍵を送信 ④秘密鍵とパスフレースで復ラ 、、ノロ / ヾスフレーズ 暗号テータ十・ 生成 乱数 ⑤復号したテータの MD5 を送信 表 1 SSH でのユーサー認証方式 RSA (DSA) 公雕建による認証 UNIX?NO スワードによる言正 RSA ホスト認証付き . rhosts 認証 . rhosts ファイルによる認証 s/key による認証 4- MD5 〇 〇 〇 〇 SSHI - ト②登録されている公開鍵 かどうかをチェック 登録されている ? - 3 乱数を生成して公開鍵で暗号化 暗号テータ・←乱数十← 独自に生成 ユーザー公開鍵 テータベース MD5 比較 - - ト 6 送信した値と比較し、 同じなら認証完了 〇 〇 〇 SSH2 SSH2 では使える方式か異なります。利用可能な認証方式 の一覧を表 1 に示します。通常は、この表の上から順に認 証を試みます。また、表では〇になっているものでもサー バーの設定で使えないようにすることができます。 このなかでもっとも安全なのは、もちろん RSA (DSA) 公開鍵による認証です。 RSA (DSA) 公け建によるユーサ ー認証をおこなうには、あらかしめサーバーとなる言算機 にユーザーの公開鍵を登録しておく必要があります。 RSA (DSA) 公開鍵によるユーサー認証の手 ) 頂を図 7 に示しま す。 SSHI と SSH2 では若干異なる部分もありますが、基 UNIX MAGAZINE 2003.7 本的には以下のような流れになります。 MD5 1. クライアントはユーサーの公開鍵をサーバーに送信しま す。 2. サーバーは受信した公開鍵がユーザーにより登録されて いるかどうかを石忍します。 3. サーバーは乱数によるデータを作成し、ユーサーの公開 鍵で暗号化します。そして、暗号化したデータをクライ アントに送信します。 4. クライアントは受信したデータを秘密鍵を使って復号し ます。このままだと秘靆を他人に奪われたり、端末を 直孑巣作されて、ログインされてしまう可能匪がありま す。そのため、 SSH では秘密鍵と同時に、、パスフレー ズ " の入力か、必要になっています。 91 より正しく復号できていることになり、これで認証カ院 信した MD5 値と上交します。同し値であれは秘密鍵に 6. サーバーでも送信した乱数の MD5 を作成しておき、受 ストを作成し、サーバーに送信します。 5. 復号されたデータの MD5 によるメッセージ・ダイジェ

6. UNIX MAGAZINE 2003年7月号

連載 / IPv6 の実装ーの 図 2 反復攻撃の判定に要な情報の更新 if ( (sav—>flags & SADB_X_EXT—OLD) 0 & & sav->replay) { 735 736 738 739 740 } if (ipsec-updatereplay(ntohl( ( (struct newesp *)esp)—>esp-seq) , goto bad; sav)) { 図 3 暗号化へッダのデータ部以外さを esplen に言聢 742 noreplaycheck : 745 747 748 750 751 752 753 754 if (sav—>flags & SADB—X—EXT—OLD) { esplen sizeof (struct newesp) ; esplen = sizeof (struct esp) ; if (sav->flags & SADB—X-EXT—DERIV) sizeof(struct esp); else } else { esplen 較します。結果が異なっていれば、バケットか改竄されて SiZ) ; ip6->ip6-p1en = htons(ntohs (ip6->ip6-p1en) ip6 = mtod(), struct ip6—hdr * ) ; m-adj(), -siz) ; いることを意味するので破棄します。 726 725 724 ため、 726 行目で切り詰めたぶんを整します。 末尾を削ったことで IP バケットのペイロード長も変わる する末尾のデータを m-adj() で削除します。バケットの ていた認証データカ坏要になりました。認証データに相当 これて検証か了したので、バケットの末尾にイ寸加され 728 m—>m—flags ー = M—AUTHIPDGM; M-AUTHIPDGM は、 IP セキュリティ・ヘッダ以後 のデータか改竄されていないときに付けられる mbuf のフ ラグです。 735 ~ 740 行目 ( 図 2 ) で、反復攻撃の判定に必な情 報を更新します。反復攻撃の検出がおこなえるのは、新 しい形式の暗号化へッダが使われている場合だけです。 旧い暙号化へッダを意味する SADB- SAD 工ントリに X-EXT-OLD フラグか設定されておらず、反復攻撃の判 定に必要な情報かオ褓内された構造体 (replay) がある場合 にのみ、 ipsec-updatereplay() で情報を更新します。 730 } UNIX MAGAZINE 2003.7 復号里 756 if (m—>m—pkthdr. Ien く off + esplen + らす newesp 構造体の長さになります。 るので、新しい暙号化へッダを使う場合、 esplen はかな deriv を利用するように設定すること自体か禁止されてい 最新のコードでは、新しい暗号化へッダを使う場合に des- て des-deriv[l] を指定したときに設定されます。しかし す。 SADB-X-EXT-DERIV は、暗号アルゴリズムとし ではなく esp 構造体の長さを利用するようになっていま グが設定されているときのみ、例外的に newesp 構造体 れています。コードでは、 SADB-X-EXT-DERIV フラ す。そうでない場合は新しい形式の暗号化へッダカリ用さ れているので、 esp 構造体の長さを esplen に設定しま カ甘旨定されている場合は旧い形式の暗号化へッダか利用さ 外の長さを esplen に設定します。 SADB-X-EXT-OLD 図 3 の 745 ~ 754 行目で、暗号化へッダのデータ部以 は、 742 行目から始まる復号処理に進みます。 反復攻撃の検出処理カるか、検出をおこなわない場合 760 ivlen + sizeof (esptail) ) { goto bad; 761 } 756 ~ 761 行目で、暗号化へッダの処理に必要十分なデ 61

7. UNIX MAGAZINE 2003年7月号

連載 / IPv6 の実装ーの 図 4 穣な暗号化へッダの削除 バケット先頭 暗号化へッダ削除前 暗号化へッダ削除後 旧ヘッダ バケット先頭 暗号化へッダ 旧ヘッダ 暗号化へッダテータ 上書き 旧ヘッダテータ トンネルモードの処理 方で同様に処理できます。 いることて判断するので、認証ヘッダと暙号化へッダの両 ケットのデータ部に IP バケットが入れイ啾にオ内されて トンネルモードか否かは、 IP パ 処理でも利用しました。 します。 ipsec6-tunnel-validate() は認証ヘッダの入力 ンネルモードのバケットとして処理すべきかどうかを判断 ipsec6-tunnel-validate() は、入力したバケットをト esplen + ivlen, nxt , sav) ) { 823 if (ipsec6—tunneI—vaIidate(m, off + ケットを再度 ip6-input() に入力します。 モードでは、外側の IP ヘッダを取り除き、内側の IP パ 823 ~ 897 行目はトンネルモードの処理です。トンネル 832 833 834 843 844 846 847 848 flowinfo ip6->ip6-f10w; m—adj (m , 0ff + esplen + ivlen) ; if (m->m—len く sizeof (*ip6) ) { m—pullup(), sizeof (*ip6)) ; goto bad; こからトンネルモードの処理の終了 ( 897 行目 ) まで は、 2003 年 5 月号て解説した認証ヘッダでのトンネル モードの処理と同様なので、説明は省略します。 トランスポート・モードの処理 899 ~ 996 行目はトランスポート・モードの処理てす。 トランスポート・モードでは、暗号化へッダのヘッタを 取り除き、暗号化する前の状態に戻します。 910 prvnxtp = ip6-get-prevhdr(), off) ; 911 *prvnxtp = nxt ; 910 行目の ip6-get-prevhdr() で、暙号化へッダの直 前に配置されているヘッダの次へッタイ直フィールドへのポ インタを prvnxtp に取得します。 nxt は、暗号化へッダ トレイラー部から取り出した暗号化する前のヘッダ番号が オ褓内されているので、その値を prvnxtp に設定します。 913 stripsiz esplen 十 iVIen ; すでにデータの復号は完了している状態です。もう暗号 化へッダは必要ありませんから削除します。不要になる部 分は newesp 構造体 ( もしくは esp 構造体 ) と匆期化べク タなので、その大きさを 913 行目て言算します。 ip6 = mtod(), struct ip6—hdr * ) ; 915 if (m—>m—len > = stripsiz + off) { 916 832 行目で、外側の IP ヘッダに設定されているフロ ー情報をあとで ECN (ExpIicit Congestion Notifica- tion) 処理に利用するために保存します。その後、 833 行 目で、外側の IP ヘッダから暗号化へッダと匆琪月化べクタ までを切り詰めます。ネ加月化べクタの後ろには、トンネル 内側の IP バケットか続いています。以後の処理では内側 の IP ヘッダを参照するので、 834 ~ 835 行目で IP ヘッ タ部か連続したメモリ領域に配置されるように、必要に応 して m-pullup() を呼び出します。 UNIX MAGAZINE 2003.7 917 918 919 920 ovbcopy ( (caddr—t) ip6 , ( (caddr—t) ip6) + stripsiz, off) ; m—>m_data 十 = stripsiz; m—>m_len StriPSIZ ; m—>m-pkthdr. len stripsiz; 削除する部分が入力したバケット 0 頁 mbuf に含ま れている場合、その部分を上書きするかたちでデータをコ ピーします。図 4 に 916 ~ 920 行目の処理イメージを示し ます。 63

8. UNIX MAGAZINE 2003年7月号

連載 / IPv6 の実装ーの 図 5 ポリシーのチェック (ip6-input ・ c) 1178 while (nxt ! = IPPROTO-DONE) { 1216 1217 1219 1220 1241 1242 いれば、 if ( ( inet6sw [ip6—protox [nxt] ] . pr_flags & PR—LASTHDR) ! = ipsec6—in-reject (), NULL)) { goto bad; nxt (*inet6swCip6-protox[nxt]] . pr-input) (&m, &off, nxt) ; 1 , 007 行目で復号したヘッダのプロトコル番号 を ip6-input() に返します。処理の途中でエラーが発生し ていたら、 1 , 017 行目で IPPROTO-DONE を ip6-in- put() に返し、バケットの処理を中断します。 ip6 」 nput() でのポリシー確認 IP セキュリティでは、トランスポート・プロトコルの 条件を指定してポリシーを定義します。たとえば、ノード A とメールサーバー B のあいだの SMTP 通信をすべて 暗号化するには、以下のようなポリシーを定義します。 また、ノード A とノード B で ICMPv6 の通信を暗号 始点 : B 、終点 : A 、プロトコル : TCP 、始点ポート : 始点 : A 、終点 : B 、プロトコル : TCP 、終点ポート : 25 、暗号化 25 、暗号化 66 することができ、カーネル内に静的に定義されたポリシー 前回、 PCB は個別の IP セキュリティ・ポリシー尉寺 に石忍されます。 セル化されたバケット、 PIM) は、 ip6-input() の処理中 す。それ以外のプロトコル (ICMPv6 、 IP ⅲ IP でカフ イイ勺には tcp-input() 、 udp-input ( ) 、 rip6-input() で (P) の場合は、それぞれの入力関数内で判断されます。具 trol Block) をもつプロトコル (TCP 、 UDP 、 RAW トを破棄しなけれはなりません。 PCB (Protocol Con- 条件を満たしているかどうか判断し、必要に応じてバケッ カーネルは、入力したバケットがポリシーて指定された ・始点 : B 、終点 : A 、プロトコル : ICMPv6 、暗号化 ・始点 : A 、終点 : B 、プロトコル : ICMPv6 、暗号化 化したい場合は次のようになります。 のはかに条件を追加できることを解説しました。 PCB を もっフロトコルと、それ以汐 ) プロトコルで処理手順が分 かれているのはそのためです。 なお、 IP セキュリティのポリシーで指定できるプロト コルは、上位層フロトコルのみです。すなわち、 IPv6 拡 張ヘッダをポリシーの条件に指定することはできません。 たとえば、糸各制御ヘッダを含むバケットをかならす暗号 化したり、終点オプションヘッダをもつバケットをかな らず暗号化したりするようなポリシーは指定できません。 PCB をもたないプロトコルのポリシー チェック PCB をもたないプロトコルの場合、 ip6-input() の最 後でポリシーチェックか夫行されます。 ip6-input() 関数の末尾には、 IP ヘッダの後ろに連結 された拡張ヘッダや上位層へッダを順に処理していくル ープがあります。 1 , 178 ~ 1 , 242 行目 ( 図 5 ) がそのルー プです。このなかの 1 , 216 ~ 1 , 220 行目でポリシーがチ ェックされます。 1 , 216 行目で、プロトコル処理構造体 inet6sw のフラグに PR-LASTHDR が設定されている かどうかを調べています。 PR-LASTHDR フラグは、フ ロトコルが最終ヘッダかどうかを示します。最終ヘッダ とは、そオリュ後に才別を、ツダや上位層へッダか配置されな いへッダのことです。たとえは、 ICMPv6 はそれ自身が 上位層のヘッダであり、 ICMPv6 ヘッダの後ろに他のヘ ッダか読くことはありません。よって、 ICMPv6 のプロ トコル処理構造体には PR-LASTHDR フラグが設定さ れます。処理対象となるヘッダが最終ー、、ツダだった場合、 1 , 217 行目で ipsec6-in-reject() を呼び出し、ノヾケット がポリシーに適合しているかどうかを調べます。ポリシー UNIX MAGAZINE 2003.7

9. UNIX MAGAZINE 2003年7月号

連載 / IJN Ⅸの道具箱ーの 図 1 リモートのマシンに売した例 localhost% rlogin h0hou. aist—nara. ac ・ jp NetBSD/i386 (hohou. aist—nara. ac ・ (p) (ttyp6) login: hoehoe Password: Last login: Wed Apr 9 23 : 26 : 23 2003 from b1ade001 0 Ⅱ ttyp6 Copyright (c) 1996 , 1997 , 1998 , 1999 , 2000 , 2001 , 2002 , 2003 The NetBSD Foundation , lnc . A11 rights reserved. Copyright (c) 1980 , 1983 , 1986 , 1988 , 1990 , 1991 , 1993 , 1994 The Regents of the University of CaIifornia. A11 rights reserved. NetBSD 1 .6R (BASS) # 11 : Wed Apr 9 15 : 55 : 26 JST 2003 We1come to NetBSD! You have new mail . > logout Connection closed by foreign host . 図 2 丸見えの甬信 Od 0a 43 6f 70 79 72 69 65 73 65 72 76 65 64 2e . Copyri ght (c) 67 68 74 20 28 63 29 20 31 39 38 30 2c 20 31 39 1980 , 19 38 33 2c 20 31 39 38 36 2c 20 31 39 38 38 2c 20 83 , 1986 1988 , 31 39 39 30 2 c 20 31 39 39 31 2c 20 31 39 39 33 1990 , 19 91 , 1993 2c 20 31 39 39 34 Od 0a 09 54 68 65 20 52 65 67 1994. . The Reg 65 6e 74 73 20 6f 66 20 74 68 65 20 55 6e 69 76 ents Of the Univ 65 72 73 69 74 79 20 6f 66 20 43 61 6c 69 66 6f ersity 0 f Ca1ifo 72 6e 69 61 2e 20 20 41 6c 6c 20 72 69 67 68 74 rnia. A 11 right 73 20 72 65 73 65 72 76 65 64 2e 0d 0a 0d Oa 4e S reserv ed . . N etBSD 1 . 6Q (BASS 65 74 42 53 44 20 31 2e 36 51 20 28 42 41 53 53 ) # 11 : M 0 Ⅱ Apr 7 6f 6e 20 41 70 72 20 37 29 20 23 31 31 3a 20 4d 20 31 35 3a 35 35 3a 32 36 20 4a 53 54 20 32 30 15 : 55 : 2 6 JST 20 30 33 Od 0a 0d 0a 57 65 6c 63 6f 6d 65 20 74 6f 03. . We lcome to 20 4e 65 74 42 53 44 21 0d 0a Od 0a 59 6f 75 20 NetBSD! . You 68 61 76 65 20 6e 65 77 20 6d 61 69 6c 2e 0d 0a new . 図 3 暗号化された通イ 十・ CQ ・ N ・ 0 ・ 3 6 ・ 3 1 工 Z エー - ・ 9 7 q-•4 tH 0 8 4 CH 0 1 8 0 0 Q) 5 3 1 CD 8 1 0 9 5 0 2 3 0 0 1 9 ••d 8 6 td c•H cd 9 d 1 っ ~ っ 4 9 Q) 8 一 1 2 ロ ) 4 ・ d O) 1 ( 0 Q) Q) 7 7 8 8 4 1 7 0 ,.Q 9 4 6 rd O t+-{ 0 0 cd 9 t+* 7 3 1 ,.O d 9 5 cd 6 7 8 1 7 3 1 0 っ ) 2 t+H LD 2 、 0 0 ( 0 Q) O っ Q) 0 4 ヂ宀ロ ) - 主 8 rd 0 4 1 3 6 9 1 9 2 4 1 8 7 Q) ,.O Q) 8 9 Q) 4 0 4 9 5 3 5 7 3 2 マー O Pd 3 - 主 6 LO O q-* O っー rd 2 - 主 4- 6 0 0 3 'd Q) 8 0 、 0 1 3 q•-{ 0 3 7 4 0 7 2 0 5 9 t•H 9 6 5 0 0 7 7 6 3 8 cd 4 8 5 Q) Q) 6 'H 、 0 6 1 、主 8 Q) 6 0 6 4 0 5 5 9 4 8 "d 0 9 3 d 1 d 7 ー 6 Q) 3 ,.Q Q) 5 4 9 2 0 Fd 4 0 ,-O O ,.O d 3 9 7 'd 4 cd 8 cd Q) 5 3 9 7 2 'H 1 3 4 6 8 っ′ 0 5 9 8 - 主【′ 8 8 t . ZV . は . ZA . .3.@g.0 ; 共通釶音号方式 開鍵を利用するため鍵の管理か楽になっていますが、暗号 化や復号に時間がかかるという欠点もあります。公開第音 一方、共通音号方式では 1 不亟頁の鍵しか使いません。 号方式の例としては RSA や DSA 、 ECSDA などがあ 暗号化用の鍵と復号用の鍵は同じものを使用します ( 図 り、 SSH では RSA や DSA - かイ吏われています。なお、 5 ) 。せつかく暗号化しても、他人に鍵を盜まれると復号さ SSH ではユーサーの秘密鍵をローカルのマシンに、公開 れて内容を見られてしまうので、共通の鍵は通イ滸目手 ( こ 鍵をログインしたいマシンに置きます。 こでは A さんと B さん ) 以外に知られてはなりません。 88 UNIX MAGAZINE 2003.7

10. UNIX MAGAZINE 2003年7月号

リ 5 に N Ⅸ Se ( リ「 i ツ Symposium KSOS などのトラステッド・コンヒューティンク基に 実装されている。 この間題については、 Ross Anderson カ甘是供している TCPA/Palladium の FAQ (http://www.cl.cam.ac. uk/-rja14/tcpa-faq. html) が参考になるだろう。 Steven Levy はこの問題について、 MSNBC/News- week で記事を執筆している。これは http://cryptome ・ org/palladium-sl.htm て : 参照できる。 講 : 寅者たちは、 cryptography@wasabisystems.com と cypherpunks@lne.com という 2 つのメーリングリ ストで進行中の言侖についても言及した。これらのメーリ ングリストのアーカイプは、 http://www.mail-archive. com/cryptography@wasabisystems.com/ と http:// www.inet-one.com/cypherpunks/にある。 Plan 9 のセキュリティ Russ Cox ( マサチューセッツ工科大物、 Eric Grosse 、 Rob Pike 、 Sean Quinlan (BeIl Labs) 、 Dave Presotto (Avaya Labs) これは最優秀論文賞に輝いた論文である。セッションの 議長は、この論文が発表されたとき Lucent に勤務してい た 3 人の著者が、まだ Lucent にいるとひやかした。 Russ Cox は、検証が簡単で、理解しやすく使いやす い、信頼生のある小さなコードをベースに構築されるシン フ。ルなセキュリティ・アーキテクチャについての論文であ ることを強調した。このセキュリティ・アーキテクチャは、 Lucent BeIl Labs の PIan 9 オペレーティング・システ ム用に開発されたものだ。 Cox らによれは、システムにおける最大のセキュリティ 間題は、フロトコルでもアルゴリズムでもない。通常は、 記カ作するサーバー、ややこしいソフトウェア、設定の不 備に原因がある。したがって、この論文は使用するアルゴ リズムやフロトコルではなく、シンフ。ルなセキュリティ・ アーキテクチャの言に重点を置いている ( ただし、具体 的に説明するために、アルゴリズムやプロトコルにも言及 審査付き研究論文 : OS セキュリティ 報告 : Prem Uppuluri UNIX MAGAZINE 2003.7 している ) 。 アーキテクチャの主要なコンホーネントは、 Factotum というエージェントである (Factotum ( 雑用係 ) という 名称は、主人に代わって用事をすませ、主人の持ち物す べての鍵を預かっている、いわゆる召使いに由来する ) 。 Factotum は SSH 工ージェントと同し考えにもとづい て構築さオ t 、各ューサーにはそのユーサーの鍵に対して責 任をもつ Factotum プロセスか割り当てられる。 Facto- tum は事実ー E 、認証やはかのフロセスとのセキュリティ 上のやりとりなどを代行する。したがって、ほかのソフ トウェアをこれらの問題への対処から、、解放 " する。暗号 コードかフ。ログラムと一緒にコンパイルされることはなく なり、 Factotum によって処理されるようになるため、暗 号ソフトウェアを簡単に更新できるようになる。 セキュリティ上重要になるのは、安全な鍵の保管場所 である。 Factotum は鍵を揮発匪メモリで保管するため、 鍵をバックアップする必要がある。暗号化された鍵を共 有ファイルシステムに保管できるのは、その鍵か認は建で はない場合に限られる。ューザーのパスワードて鍵を暗号 化するのもよくない。攻撃者は辞書攻撃て鍵を解読できる からだ。そのため、この論文では暗号化されたデータのフ ァイルサーバーである secstore についても触れている。 secstore は PAK という暗号鍵交換方式にもとづいてい る。また、論文では Factotum をデバッガから一隻する ことなど、はかのセキュリティ問題にも言及している。 利点だけでなく、 Factotum には問題もある。 Mitre の 社員から、パスワードの選択を誤った場合に Factotum が辞書攻撃の標的となるかという質問が出された。 Cox はその事実を認めた。 Sun Microsystems の WhitfieId Diffie は、アーキテクチャを UNIX に載せるのは簡単か と質間した。 Cox は既存の OS への移植か難しいことを こで説明したアーキテクチャの概念ははかの 認めたが、 OS にも応用できるはすだと述べた。 Linux セキュリティ・モジュール (LSM) . Linux カー ネルの→殳的なセキュリティ・サポート Chris Wright 、 Crispin Cowan (WireX) 、 Stephen Smalley (NAI Labs) 、 James Morris (lntercode) 、 Greg Kroah-Hartman (IBM Linux Technology Center) LSM は、 Linux カーネルのセキュリティ上の不備を補 うために言 fr されたものである。 Linux カーネルのセキュ 169