2009年05月22日 情報科学類 コンピュータリテラシ 筑波大学 システム情報工学研究科 コンピュータサイエンス専攻, 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2009/2009-05-22
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
ネットワークには、次のものを含めて考える
暗号とは、情報の意味が当事者以外にはわからないように情報を変
換することである。
図? 暗号の考え方
暗号化の方法が秘密になっていると、一見、より強そうにみえる。しかし、そ の暗号が、強いのか弱いのか調べる方法がない。攻撃すると、簡単に落ちるか もしれない。暗号化の方法を提供している者が信頼できない時には使えない。
鍵を長くするだけで、安全性が指数関数的に高くなる。
鍵を1ビット長くすると、解読時間が2倍になる。
(「鍵の長さを2倍にすると解読時間が2倍になる」は、誤り)。
図? 指数関数 図? 指数関数
パスワードは、コンピュータの中では、暗号化の鍵として使われる。 長いパスワードは、破られにくい。1文字(大文字小文字数字記号)増やすと、 総当たりで解読に要する時間が、50倍から100倍近くかかるようになる。
暗号の方法は、大きく2つに分類される
例
チェックサムや CRC (Cyclic Redundancy Check) にも似ているが、暗号やディ ジタル署名で使われるのは、Collision Proof 性が求められる。
公開鍵暗号系(非対称暗号系)では2つの異なる鍵を用いる。 便宜上、この2つを公開鍵と秘密鍵と呼ぶ。
これらの鍵は、互いに相手の逆関数になっているものが広く使われている。
図? 公開鍵暗号を使った暗号通信の手順
ここで、公開鍵から秘密鍵を計算することは難しい。ある平文を公開鍵で暗号 化してみたところで、秘密鍵を得ることは難しい。
公開鍵暗号の利点は、鍵を管理する手間が掛らないこと。
認証とは、情報の正当性や完全性を確保する技術である。
図? man-in-the-middle攻撃
ディジタル署名では、通常の署名と同様に、次のような性質が必要である。
公開鍵暗号系を使ってディジタル署名を行うことができる。
図? 公開鍵暗号を使ったディジタル署名の手順
メッセージ全体を暗号化する代わりに、メッセージを平文で送り、それにメッ セージを一方向関数(ハッシュ関数)と呼ばれる方法で計算した結果だけを、 秘密鍵で暗号化したものを送る方法もある。一方向関数では、計算結果から元 の値(メッセージ)を計算することが難しい。
ディジタル署名や利用者認証は、公開鍵暗号系ではなく、共通鍵暗号系を用い ても可能である。ただし、この場合、鍵を管理する信用できる管理センターが 必要となる。
サーバへのログインを例に、これを説明する。
単なる暗証番号の場合、通信を傍受されたら終り。 毎回違う数を使えば、傍受されていても平気。
個人ごとに公開鍵での認証機能を利用したほうがよい。
ssh (scp, WinSCP, Tera Term, PuTTY含む) で始めてあるホストに接続する時 には、警告が現れる。
ssh コマンド
% ssh ホスト名 -l ユーザ名The authenticity of host 'ホスト名 (IPアドレス)' can't be established. RSA key fingerprint is 16進数32桁. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'ホスト名 (IPアドレス)' (RSA) to the list of known hosts. ホスト名%
![]()
この 16進数32桁
の数は、接続先のホストの公開鍵を、ハッ
シュ関数 MD5 にかけた結果である。この32桁の数を目で確認することにより、
接続先のホストが正しい(
man-in-the-middle攻撃が
行われていない)ことがわかる。
目で確かめる時には、次のものと比較する(2009年5月22日現在。変更される可能 性もある)。
d8:b2:bd:32:c0:9d:80:16:dc:40:7e:73:03:25:4f:b9
1d:52:07:e5:81:88:c3:e6:e6:dc:d7:08:de:b1:e2:25
host1% ssh hostname
Password: (パスワードを打つ)
hostname%
hostname
は、
balsam20
など、接続したいコンピュータの名前を入れる。
実習では、別のコンピュータとしては、次のものを利用しなさい。
% ssh balsam20.coins.tsukuba.ac.jp
% ssh www.coins.tsukuba.ac.jp
実習室内では、coins.tsukuba.ac.jp を省略できる。
% ssh balsam20
% ssh www
一番最初に接続する時には、次のような警告(Warning:)が表示される。
[azalea20:~] yas% ssh azalea21
The authenticity of host 'azalea21 (130.158.86.41)' can't be established.
RSA key fingerprint is d8:b2:bd:32:c0:9d:80:16:dc:40:7e:73:03:25:4f:b9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'azalea21,130.158.86.41' (RSA) to the list of known hosts.
Password:
Welcome to Darwin!
[azalea21:~] yas%
この fingerprint は、接続先のホストの公開鍵のハッシュ値である。これが次
のようになっていることを確認してから yes と打ち込みなさい。
d8:b2:bd:32:c0:9d:80:16:dc:40:7e:73:03:25:4f:b9
1d:52:07:e5:81:88:c3:e6:e6:dc:d7:08:de:b1:e2:25
% cat ~/.ssh/known_hosts
Kerberos が有効になっている場合、パスワードを打つことが省略できる。その
場合、klist コマンドで、Kerberos の ticket が表示される。
ログイン先とログインもとでユーザ名が異なる時には、次のように、-l オプショ ンに続きログイン先のユーザ名を使う。
host1% ssh remotehost -l user
Password: (パスワードを打つ)
remotehost%
または、「@」の前にログイン先のユーザ名を指定する。
host1% ssh user@remotehost
Password: (パスワードを打つ)
remotehost%
この -l オプションを利用する方法や @ を利用する方法で遠隔ログインを行っ
てみなさい。(注意:同じ場合でも、あえて指定することもできる。)
[azalea20:~] yas% ssh www.coins.tsukuba.ac.jp
Welcome to Darwin!
[orchid-nwd:~] yas%
% cd /var/log/httpd/www.coins80
access_log.*
の「*
」は、
シェルのファイル名置換えの意味である。
% ls access_log.*
(多くのファイルが表示される)
% ls access_log.* | tail -1
access_log.200905190043
% ls -t access_log.* | head -1
access_log.200905190043
%
この例では、access_log.200905190043
が最新のものである。
% lv access_log.上のlsの結果で置き換える
% tail access_log.上のlsの結果で置き換える
% tail access_log.上のlsの結果で置き換える
% tail access_log.上のlsの結果で置き換える
(しばらく間隔を空けてから)数回 tail コマンドを実行すると、その度に行
が増えているはずである。
% tail -f access_log.上のlsの結果で置き換える
-f オプションを指定すると、tail コマンドは終了することなく新しく追加さ
れた行を表示する。この tail コマンドは、自動的には終了しないので、終わっ
たら、
^C (Control+C) で強制終了させる。
130.158.83.140 - - [21/May/2009:18:44:23 +0900] "GET /~yas/coins/literacy-2009/2009-05-22/ HTTP/1.1" 200 40581この例では、一番左に表示されているものは、クライアントの IP アドレスで ある。その他に、日付やどの URL をアクセスしたか、転送したバイト数(一番 右)も表示されている。
自分自身で、情報科学類の Web ページをアクセスした時に、自分が使っているパ ソコンの IP アドレスが表示されることを確認しなさい。
次のようにして、 grep コマンド で IP アドレスを検索する方法もある。
% grep 130.158.83.140 access_log.上のlsの結果で置き換える
ssh-keygen コマンドを使って、公開鍵と秘密鍵の組を生成しなさい。鍵の種類
としては、rsa 、または、dsa を使うとよい。生成に成功すると、標準では、
~/.ssh
というディレクトリの下に、2つのファイルが作られる。
ssh でログインする時に、生成した鍵の組を使って認証を行いなさい。 それには、クライアント側に秘密鍵を置き、サーバ側の ~/.ssh/authorized_keys (OpenSSHの場合)に、公開鍵を設定すればよい。 接続時には、秘密鍵を暗号化するために使ったパス レーズを打つ込む。(通常の通常のログインのパスワードを打つことはない。)
coins 内で実験する時には、クライアントもサーバも同じ ~/.ssh を参照する。 したがって、authorized_keys を作成するには、次のようにする (RSAかDSAのどちらか一方を選んで実施する。 両方行った場合、後から行った設定が有効になる。)。
rsaの場合:
% cd ~/.ssh
% ls id_rsa*
id_rsa id_rsa.pub
% cp id_rsa.pub authorized_keys
dsaの場合:
% cd ~/.ssh
% ls id_dsa*
id_dsa id_dsa.pub
% cp id_dsa.pub authorized_keys
%
authorized_keys を作成する前には、ssh で接続する時に次のように 「パスワード Password 」が聞かれる。
% ssh azalea20
Password:
authorized_keys を作成した後には、ssh で接続する時に次のように
「パスフレーズ passphrase」が聞かれる。
% ssh azalea20
Enter passphrase for key '/home1/prof/yas/.ssh/id_dsa':
これに対して、ssh-keygen でパスフレーズを打ち込む。(公開鍵による認証に
失敗すると、通常のパスワードによる認証に落ちるのが一般的である。システ
ムによっては、認証方式に制限を加えていることがある。)
% ssh-agent tcsh
% printenv SSH_AUTH_SOCK
% ssh-add -l
ssh-agentが有効なこと確認
% ssh-add
鍵の登録
% ssh-add -l
鍵が登録されたことの確認
% ssh remote1
% ssh remote2
% ssh remote3
利用
% exit
ssh-agentが有効な tcsh の終了
%
ssh-agent にコマンド(上の例ではtcsh)を与える代りに、csh の環境変数を設
定させるコマンドを出力させ、eval で実行する方法もある。
% eval `ssh-agent`
% printenv SSH_AUTH_SOCK
<以下同じ>
ただし、この方法ではログアウトした時に ssh-agent のプロセスが残ること
がある。そうならないように ログアウト時に実行させるプログ
ラムで殺す(ssh-agent -k)ようにする。
~/Library/Keychains/login.keychain
「キーチェーンアクセス.app」のパスワードとログインの時に打つパスワード を同じにしていると、自動的に機密データの暗号を解いてアプリケーションに 渡す機能がある。注意すべきことは、ログイン・パスワードを変更しても、 「キーチェーンアクセス.app」のパスワードは変更されないことである。 活用するには、ログイン・パスワードを変更したら、 「キーチェーンアクセス.app」のパスワードも変更するとよい。
何も使っていなければ、「キーチェーンアクセス.app」のパスワードは、初期 パスワードのままになっている。重要な情報を保存していなければ、上記のファ イルを削除し、ログインしなおすことで、リセットするとよい。
次のような MacOSX のアプリケーションが、「キーチェーンアクセス.app」を 使って機密情報を暗号化して保存することができる。
「キーチェーンアクセス.app」を実行して、どのような機密データが保持され てるかを見てみなさい。
急に電源が落ちた時などには、ハードディスクの状態が「ファイル」や「ディ レクトリ」としては正常にアクセスできなくなることがある。「ディスクユー ティリティ.app」は、このような時に不整合を修復する 機能がある。コンピュータの電源を入れた時に自動的に実行されることもある。
「ディスクユーティリティ.app」を使うと、1つの大きなファイルを、1個の ハードディスクのように扱うことができる。このように、ディスクに見立てる ことができるデータのことを「ディスク・イメージ」という。「ディスクユー ティリティ.app」を使うと、ディスク・イメージをファイルに保存することが でき、また、ファイルに保存されたディスク・イメージを、「マウント」とい う操作を行い、通常のアプリケーションからファイルとディレクトリの集合と してアクセス可能にする。
MacOSX では、ディスク・イメージを含むファイルの拡張子は、「.dmg」である。
自分で CD-R や DVD-R にファイルを保存する時には、まず、 「ディスクユーティリティ.app」を使って ディスク・イメージをファイルに保存する方法が一般的である。
次のような操作を行いなさい。
% open /Applications/Utilities/Disk\ Utility.app
「新規イメージ」ボタン、または、「ファイル」メニューから「空のディスク
イメージ」を選択し、ディスク・イメージを作成する。名前と場所(ディレク
トリ(フォルダ))、サイズ、暗号化するかどうか、フォーマットを選択し、
「作成」ボタンを押す。
% ls /Volumes/
(ここにディスクイメージの名前が表示される)
% umount /Volumes/ディスクイメージの名前
MacOSX の「ディスクユーティリティ.app (Disk Utility.app) 」を 使って、暗号化されたディスク・イメージを作成しなさい。 暗号化の方式としては、AES が使われることを確認しなさい。
coins でも、VPN 機能を提供している。 手引き 12.2節 参照。 この機能を利用しなさい。
(1) ssh コマンドを使って orchid-nwd (www) にログインしなさい。次のコマ ンドを orchid-nwd で実行するとで、ssh にログインできたことを示しなさい。 レポートには、orchid-nwd での次のコマンドの実行結果を含めなさい。
(2) 練習問題1106 を行いなさい。 Web サーバが生成しているアクセス・ログか ら、自分自身がアクセスした記録を抜き出しなさい。自分が利用しているコン ピュータの IP アドレスを調べ、それがアクセス・ログに含まれていることを 確認しなさい。アクセスログのうち、数行をレポートに含めなさい。
(3) ssh で最初にあるホストに接続する時に、次のような表示がなされることがある。
RSA key fingerprint is d8:b2:bd:32:c0:9d:80:16:dc:40:7e:73:03:25:4f:b9.
この表示の意味を、今日の授業内容の用語を用いて簡単に説明しなさい。
2回目以降は、この表示がなされない。その理由を簡単に説明しなさい。
(5) [加点] 選択課題。次の課題を1つ以上行いなさい。
(4a) [加点] openssl コマンドを用いて、ファイルを暗号化しなさい。また、 それを復号化しなさい。それらが実現されていることがわかるように、シェル との対話をレポートに含めなさい。
(4b) [加点] 「ディスクユーティリティ.app」を用いて暗号化されていないディ スク・イメージと暗号化されてたディスク・イメージの2つを作成し、次のよ うにして暗号化の効果を確認しなさい。
% strings ディスクイメージを含むファイル | grep 文字列
ここで「文字列
」には、1 でコピーしたテキスト・ファイル
の内容を指定する。コマンドラインからは漢字を打つことが難しいので、
「文字列
」には、ASCIIによる簡単なものを指定しなさい。
この結果、暗号化されていないものにはその文字列が表示され、暗号化されて いるものには表示されないことを示しなさい。
(5) [加点] 選択課題。次の課題を1つ以上行いなさい。
(5a) [加点] 自宅から VPN 機能を使って coins のコンピュータに接続しなさ い。そのことを示すために、レポートには、どのような設定を行ったか、ログ インしたコンピュータの名前、who am i コマンドの結果(VPNを使った時と使わ なかった時の比較)等を含めなさい。
(5b) [加点] ssh-agent を利用して、パスワード入力なしにリモート・ログイン できるようにしなさい。そのことを示すために、レポートには、次のコマンド の実行結果を含めなさい。
(5c) [加点] Tera Term、PuTTY、その他の ssh クライアントを用いて公開鍵を 用いた認証により、coins のコンピュータに接続しなさい。そのことを示すた めに、レポートには、どのようなプログラムを使ったのか、公開鍵の生成手順、 クライアント側の設定、サーバ側の設定を含めなさい。