暗号、SSL、SSH、Webサーバ・アクセスログ

					2016年05月27日
情報科学類 コンピュータリテラシ

                                       筑波大学 システム情報系 情報工学域
                                       新城 靖
                                       <yas@cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2016/2016-05-27
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

■連絡事項

■ネットワーク上の脅威

悪意を持つ人、プログラムによる脅威。
盗聴
本来の通信相手以外の人が 通信内容のコピーを入手する。例:クレジットカード番号をコピーする(後で使う)。
改ざん
通信内容を書き換える。例:買い物で1個買う所を10個に書き換える。
なりすまし
悪意のある人が、他の人に成り代わる。例: 電子メールの From: を書き換えて送る。
インターネットで流れるデータは、流れるデータを見れば簡単に内容を知るこ とができる。(1つひとつのデータグラムは、はがきと同じ。)

ネットワークには、次のものを含めて考える

■暗号

◆暗号に関する基本用語と安全性

暗号とは、情報の意味が当事者以外にはわからないように情報を変 換することである。

図? 暗号化、復号化、平文、暗号文、解読、鍵
図? 暗号の考え方

平文(ひらぶん(clear text))
元の情報
暗号文(cipher text)
変換された情報
平文、暗号文といっても、文字だけでなく、画像や音声などコンピュータが扱 えるあらゆるデータ(ビット列)が想定されている。

暗号化(encrypt)
平文を暗号文に変換すること。暗号化鍵が必要。
復号化(decrypt)
暗号文を平文にもどすこと。復号化鍵が必要。
鍵(key)
暗号化や復号化に必要な(短い)データ。
解読
当事者以外の第三者が、暗号文を元にもどすこと、あるいは、復号化鍵を得る こと。
暗号化や復号化の方法(アルゴリズム)は、何種類もある。

◆鍵を使うことの重要性

問: 答え:

暗号化の方法が秘密になっていると、一見、より強そうにみえる。しかし、そ の暗号が、強いのか弱いのか調べる方法がない。攻撃すると、簡単に破られる かもしれない。暗号化の方法を提供している者が信頼できない時には使えない。

◆長い鍵を使うことの重要性

暗号の安全性は、鍵の安全性によっている。

◆暗号の経済学

暗号の安全は、解読にかかるコストを大きくすることで、解読され た平文から得られる利益を相対的に小さくすることに依存している。

鍵を長くするだけで、安全性が指数関数的に高くなる。 鍵を1ビット長くすると、解読時間が2倍になる。 (「鍵の長さを2倍にすると解読時間が2倍になる」は、誤り)。

図? 指数関数
図? 指数関数

図? 指数関数
図? 指数関数

パスワードは、コンピュータの中では、暗号化の鍵として使われる。 長いパスワードは、破られにくい。1文字(大文字小文字数字記号)増やすと、 総当たりで解読に要する時間が、50倍から100倍近くかかるようになる。

◆暗号の応用

◆共通鍵暗号系と公開鍵暗号系

暗号の方法は、大きく2つに分類される

共通鍵暗号系(対称暗号系、共有鍵暗号系)
暗号化鍵と復号化鍵が同じ(または片方から片方が簡単に計算できる)。 公開鍵暗号系と比較して軽い(処理が高速である)。
公開鍵暗号系(非対称暗号系)
暗号化鍵から復号化鍵を容易に類推できない。 共通鍵暗号系と比較して重たい(処理が低速である)。

普通は、両者を組み合わせて使う。 後述する SSL でも SSH でも組み合わせて使っている。

◆共通鍵暗号系による暗号通信

同じ鍵で暗号化と復号化を行う。

図? 共通鍵で暗号化
図? 共通鍵暗号系による暗号通信

◆公開鍵暗号系

公開鍵暗号系(非対称暗号系)では2つの異なる鍵を用いる。 便宜上、この2つを公開鍵と秘密鍵と呼ぶ。

これらの鍵は、互いに相手の逆関数になっているものが広く使われている。

◆公開鍵暗号系による暗号通信

図? 公開鍵暗号を使った暗号通信の手順
図? 公開鍵暗号を使った暗号通信の手順

  1. 送信側は、公開鍵と秘密鍵の組を作り、公開鍵を誰でも読めるようにする。
  2. 受信側は、送信側の公開鍵を暗号化鍵として用いて暗号文を作り、送る。
  3. 受信側は、受け取った暗号文を、自分の秘密鍵を復号化鍵として用いて復号化し、 元の平文を得る。

ここで、公開鍵から秘密鍵を計算することは難しい。ある平文を公開鍵で暗号 化してみたところで、秘密鍵を得ることは難しい。

◆鍵の管理

公開鍵暗号の利点は、鍵を管理する手間が掛らないこと。
共通鍵暗号の場合
情報を交換する間で鍵を「事前に」安全に共有しなければならない。しか も、通信相手ごとに鍵を変える必要がある。
公開鍵暗号の場合
送信側ごとに、1つの暗号化鍵を公開するだけでよい。今までに通信をしたこと がない人からでも、暗号化されたメッセージを受け取ることが可能である。
公開鍵暗号系は、暗号通信だけでなくディジタル署名や利用者認証、電子現金 にも応用される。

図? 秘密鍵、8人、各人7つの鍵を管理 図? 公開鍵、8人、各人1組の鍵を管理
共通鍵。各自7つの鍵を管理する。 公開鍵。各自、1組の鍵を管理する。

図? 鍵の管理の例。8人の場合。

◆認証

認証とは、情報の正当性や完全性を確保する技術である。

利用者認証(ユーザ認証)
アクセスしてきた人が正当か否かを判定する。 しばしばパスワードや暗唱番号が用いられる。
ディジタル署名(メッセージ認証、電子署名)
通常の署名とおなじく、送られてきたメッセージが送信者本人のもので あることを識別、確認すること。

◆認証の例

◆man-in-the-middle攻撃

いくら暗号通信をしても、通信相手を認証しないと意味がない。 認証しない場合、man-in-the-middle攻撃に弱い。

A=攻撃者、攻撃者=Bで暗号通信
図? man-in-the-middle攻撃

◆ディジタル署名

ディジタル署名では、通常の署名と同様に、次のような性質が必要である。

ディジタル・データでは完全なコピーが簡単に作れるので、紙上の署名や捺印 よりも難しい。

◆公開鍵暗号系によるディジタル署名

公開鍵暗号系を使ってディジタル署名を行うことができる。

図? 公開鍵暗号を使ったディジタル署名の手順
図? 公開鍵暗号を使ったディジタル署名の手順

  1. (受信側ではなく)送信側は、公開鍵と秘密鍵の組を作り、公開鍵を誰でも 読めるようにする。
  2. 送信側側は、自分の秘密鍵を暗号化鍵として用いて暗号文を作り、送る。
  3. 受信側は、受け取った暗号文を、受信側の公開鍵を復号化鍵として用いて 復号し、元の平文を得る。この時、きちんと平文が得られた場合、その平文は、 その公開鍵の持ち主(==対応する秘密鍵の持ち主)から送られてきたことがわ かる。

メッセージ全体を暗号化する代わりに、メッセージを平文で送り、それにメッ セージを ハッシュ関数 と呼ばれる方法で計算して短くし、その短い結果だけを、 秘密鍵で暗号化したものを送る方法もある。

ディジタル署名や利用者認証は、公開鍵暗号系ではなく、共通鍵暗号系を用い ても可能である。ただし、この場合、鍵を管理する信用できる管理センターが 必要となる。

◆一方向関数

y=f(x) で、x から y を計算することは簡単だが、y から x 逆を計算するこ とは非常に難しい関数。

◆ハッシュ関数(メッセージ・ダイジェスト、メッセージ要約関数)

元データからデータの指紋と呼ぶべきような特徴的な数(普通は元データの長 さによらず固定長)を抽出するもの。一方向関数の一種。

チェックサムや CRC (Cyclic Redundancy Check) にも似ているが、暗号やディ ジタル署名で使われるのは、Collision Proof 性が求められる。

ハッシュ関数の結果を、fingerprint というこがある。

よく使われるハッシュ関数

MD5, SHA-1 には、使い方によっては、脆弱性が見つかっている。

◆公開鍵暗号を使った利用者認証

サーバへのログインを例に、これを説明する。

  1. ユーザは、サーバにログイン・アカウントを登録する時に、公開鍵と秘 密鍵を生成し、公開鍵をサーバに届け、秘密鍵を自分で保持する。
  2. ユーザは、通信回線を通じてサーバにアクセスしてきた時、サーバは乱 数を1つ生成し、その乱数をユーザの「公開鍵」で暗号化し、ユーザに送り返 す。
  3. ユーザは、送られてきた暗号化された乱数を、保持している秘密鍵で復 号化し、サーバに送り返す。
  4. サーバは、ユーザから返された乱数が正しければ、正当なユーザである と判定する。
次回の呼び出しでは、別の乱数を用いることで、通信を記録している傍受者に も対応することができる(challenge-response方式)。

単なる暗証番号の場合、通信を傍受されたら終り。 毎回違う数を使えば、傍受されていても平気。

◆鍵の確認

公開鍵による認証

公開鍵で自由に鍵が得られたとしても、鍵か偽物だと、意味はない。

鍵がが本物であるかをどうやって確認するか。

では、その第三者は、信頼できるのか。

■SSL(Secure Sockets Layer)

SSL は、Netscape 社によって開発された通信路を暗号化する仕組み。認証機能 もある。HTTP に広く使われている(他にも使える)。SSL をインターネットで使 えるさまざまな標準を策定する組織IETF (Internet Engineering Task Force) により標準化したものが、TLS(Transport Layer Security)。

◆SSL が使われる場所

◆SSLで使われる証明書

man-in-the-middle攻撃 に合わないために、 SSL では 証明書を使って通信相手を認証する。

証明書に含まれている重要な情報

証明書の内容の例。coins の Web サーバ www.coins.tsukuba.ac.jp で使われ ているもの。

$ openssl x509 -text -noout < coins-www.cert[←]
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 943716538689393170 (0xd18c131213e1212)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=JP, L=Academe, O=National Institute of Informatics, CN=NII Open Domain CA - G4
        Validity
            Not Before: Jun 24 08:48:15 2015 GMT
            Not After : Jul 24 08:48:15 2017 GMT
        Subject: C=JP, L=Academe, O=University of Tsukuba, OU=College of Information Science, CN=www.coins.tsukuba.ac.jp
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ac:c6:73:f4:4f:e6:3f:c2:4b:31:d2:ce:00:df:
                    7f:33:7e:5d:fd:9b:39:b6:4d:08:e9:99:83:80:58:
                    24:d2:ee:40:21:12:ae:60:a1:4f:02:99:83:b1:2c:
                    a8:62:b9:81:32:0c:87:ed:b0:ba:f0:ad:c5:f0:0b:
                    39:66:97:e8:95:27:0d:b7:f7:b3:ea:52:fd:8c:71:
                    b5:ce:3f:23:21:89:9b:a7:f5:01:5e:51:e0:36:c7:
                    41:5c:86:7d:db:1d:62:a8:98:2a:67:61:65:18:3f:
                    4a:26:cc:f5:e8:cf:08:ba:6c:78:60:ef:18:96:14:
                    c7:6d:5b:e9:e5:5d:a7:60:4d:e6:64:7e:01:76:f9:
                    71:0b:98:40:d5:df:d8:7a:e7:d7:14:b2:36:53:a6:
                    28:8c:7c:76:e1:40:0d:d2:ca:4c:4f:67:32:7b:cb:
                    83:ae:a9:e9:06:e7:07:80:b8:f2:7b:49:a5:ec:08:
                    04:da:9d:cf:02:8a:04:0b:4e:55:60:6c:5a:eb:dd:
                    93:6e:8c:54:e5:8d:66:89:85:0a:1a:d2:d1:75:92:
                    43:ee:64:30:cd:3a:92:e3:cc:f6:7e:9d:68:0d:d3:
                    54:71:9a:36:87:62:3a:60:c4:c3:d7:60:f8:f1:25:
                    ff:cd:f8:a6:91:43:4a:75:e9:1b:5b:16:94:63:a4:
                    cd:31
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Authority Key Identifier: 
                keyid:19:0B:6F:39:1F:31:03:34:5F:E4:D2:40:1F:37:E6:8D:E7:62:39:7C

            X509v3 CRL Distribution Points: 

                Full Name:
                  URI:http://repo1.secomtrust.net/sppca/nii/odca3/fullcrlg4.crl

            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Subject Key Identifier: 
                18:C6:32:E5:21:7B:02:85:75:04:E6:AD:D0:D7:3E:0E:3E:74:BC:E4
            X509v3 Certificate Policies: 
                Policy: 1.3.6.1.4.1.32264.3.2.1.1
                  CPS: https://repo1.secomtrust.net/spcpp/cps/index.html

            Authority Information Access: 
                OCSP - URI:http://niig4.ocsp.secomtrust.net

            X509v3 Subject Alternative Name: 
                DNS:www.coins.tsukuba.ac.jp
    Signature Algorithm: sha256WithRSAEncryption
         75:81:d3:d9:fd:63:ed:f6:4e:c4:f0:2c:82:3a:c7:58:b7:34:
         ad:19:b8:fe:19:56:6e:32:4f:8a:e0:ee:36:63:b9:3d:c2:8b:
         1b:2f:74:6b:c5:15:ea:e5:12:e9:51:15:7e:06:75:6f:c6:f4:
         dc:ce:16:17:e0:a1:ff:ed:dd:a1:c7:9a:40:84:ee:aa:06:c1:
         ab:03:7e:c9:f8:1f:c7:c2:30:d2:ef:45:15:7f:7d:16:5f:01:
         92:21:4c:80:b3:35:40:fe:01:78:d6:7b:0e:58:c4:c7:9f:c2:
         b5:78:3d:36:f4:34:f1:1c:83:4c:5b:46:48:b4:af:5f:3a:96:
         a3:bf:e0:67:a9:21:6a:cf:1f:a8:a4:91:15:88:5e:af:c9:96:
         b4:b6:8b:e6:9c:a1:c4:a0:5f:24:e2:bc:e7:44:f7:23:db:10:
         87:45:fa:b4:18:49:92:4a:12:2b:ae:95:a8:bd:9c:07:38:c6:
         f9:d4:72:93:6d:2d:9d:3b:a0:bc:d9:1a:da:31:40:ac:7a:6f:
         a0:9b:d0:e6:d5:15:80:67:1e:f4:a2:dd:61:cc:a0:10:b8:eb:
         e2:d5:38:28:d6:2a:c5:87:35:95:6b:ce:7f:fa:aa:8d:67:e1:
         57:53:57:a6:10:30:de:d2:fa:30:c7:40:5e:81:ef:0e:e9:cd:
         ae:60:25:c3
$ []

◆認証局の階層/信頼の鎖

証明書がついていたとして、それが本物であるかをどうやって確認するか。

認証局(CA, Certificate Authority)に、証明書を発行してもらう。(認証局の 秘密鍵でディジタル署名をしてもらう)

その認証局は、信頼できるか?

WWWブラウザには、ルート認証局の証明書が予め含まれている。

末端のWWWサイトは、ルート認証局、または、中間認証局から発行された証 明書を提示する。

ブラウザ、ルート認証局、中間認証局、末端の証明書。ルートは自己署名。
図? ルート認証局から始まる証明書のチェーン

◆SSLでの暗号系の利用

■SSH

SSH (Secure Shell) は、r系コマンドの secure な置き換え。

◆r系コマンド

rlogin
remote login。遠隔ログイン。 (文字端末を使っている状態で)別のコンピュータにネットワーク経由で接続し てログインし、別のコンピュータを(文字端末の状態で)利用可能にすること。
rsh
remote shell (sh)。別のコンピュータでプログラムを実行する。
rcp
remote copy (cp)。別のコンピュータとの間でファイルをコピーする。
ftp
file transfer program/protocol。別のコンピュータとの間でファイルをコピーする。
遠隔(remote)の対になる言葉は、ローカル(local)。

◆r系コマンドの弱点

◆SSHでの解決方法

◆クライアントとサーバ

[5月17日再掲]

インターネットで通信をプログラムを利用する時、 「クライアント」と「サーバ」という分けて考えることが多い。

例:

コンピュータが1台しかない場合、プログラムは1つでよい。通信をする場合 には、プログラム(コンピュータ)が2つになる。そのうちの1つのプログラ ム(またはコンピュータ)を、「クライアント」、もう1つを「サーバ」とい う。

◆sshにおけるクライアントとサーバ

◆SSHにおけるホストの認証

SSH (scp含む)では、クライアントが接続先のコンピュータ(ホスト)で動いてい るサーバが本物であるかどうかどうかを確認する(ホストを認証する)。ホス トの認証には、公開鍵暗号系を使う。

◆SSHにおけるホストの公開鍵のハッシュ値の確認

ssh (scp, WinSCP, PuTTY, Tera Term含む) で始めてあるホストに接続する時 には、警告が現れる。

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.
Password: (パスワードを打つ。画面には表示されない。)[←]
ホスト名$ [←]

この 16進数32桁(128ビット) の数は、接続先のホストの公開鍵を、ハッ シュ関数 MD5 にかけた結果である。この32桁の数を目で確認することにより、 接続先のホストが正しい( man-in-the-middle攻撃 が行われていない)ことがわかる。

ホストの公開鍵は、普通、2048 ビット以上あるが、これを人の目で比較するの はつらい。そこで、ハッシュ関数により、ビット数を減らして、人の目で確認 できるようにしている。SSHのプログラムは、公開鍵全体を保存しているが、人 間に表示する時には、ハッシュ値で表示している。

◆coinsの主なホストの公開鍵のハッシュ値

◆筑波大学全学計算機システムの主なホストの公開鍵のハッシュ値

2048 de:18:ce:85:f0:a5:f3:b0:f7:cc:72:83:c8:1e:94:1b icho.u.tsukuba.ac.jp (RSA)
2048 de:18:ce:85:f0:a5:f3:b0:f7:cc:72:83:c8:1e:94:1b unix01.u.tsukuba.ac.jp (RSA)
2048 19:c2:57:f7:c5:a9:fe:02:46:0b:04:76:3e:e8:9d:3e ubuntu.u.tsukuba.ac.jp (RSA)
2048 19:c2:57:f7:c5:a9:fe:02:46:0b:04:76:3e:e8:9d:3e unix02.u.tsukuba.ac.jp (RSA)

◆SSHでのユーザの認証

暗号化された通信路が確立された後は、パスワードを流しても安全である。

個人ごとに公開鍵での認証機能を利用したほうがよい。

coins では、近日中に外部からの SSH での接続で、パスワードによる認証が使 えなくなる。そうなると、外部から、SSH で接続するには、公開鍵を使うしか なくなる。 練習問題 sshにおける公開鍵による認証 参照。

◆sshにおける公開鍵による認証

SSH では、公開鍵暗号を使った利用者認証 が使える。

■Webサーバ・アクセスログ

Web サーバでは、一般に、クライアントからページがアクセスされるごとに、 記録を残している。この記録を アクセスログ(access log) という。アクセスログには、次のような内容が記録される。 以下にログの例を示す。実際には1行。表示のため折り返している。
130.158.86.249 - - [25/May/2016:21:29:38 +0900] "GET /~yas/coins/liter
acy-2016/2016-05-27/index.html HTTP/1.1" 200 94415 "-" "Mozilla/5.0 (M
acintosh; Intel Mac OS X 10.9; rv:46.0) Gecko/20100101 Firefox/46.0"

130.158.86.249 - - [25/May/2016:21:29:38 +0900] "GET /~yas/coins/liter
acy-2016/2016-05-27/images/crypt-idea.png HTTP/1.1" 200 24480 "http://
www.coins.tsukuba.ac.jp/~yas/coins/literacy-2016/2016-05-27/index.html
" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:46.0) Gecko/2010010
1 Firefox/46.0"
この例では、一番左に表示されているものは、クライアントの IP アドレスで ある。その他に、日付やどの URL をアクセスしたか、転送したバイト数、 ブラウザの種類も表示されている。

Webブラウザを利用する時には、サーバ側にアクセスログが残されていることを 意識する。

練習問題 学類 Web サーバのアクセス・ログの観察 参照。

■実習

実習時間中には、 以下の課題をできるだけ多く行いなさい。全部を行う必要はない。

★練習問題(1101) sshコマンドによる遠隔ログイン

手引き 9.1.2項 参照手引き 2.11節 参照The Unix Super Text 29.3.1項 参照。 ssh コマンドを利用して、別のコンピュータに遠隔ログインしてみなさい。
host1$ ssh hostname[←]
Password: (パスワードを打つ。画面には表示されない。)[←]
hostname$ []
hostname は、 www など、接続したいコンピュータの名前を入れる。

実習では、別のコンピュータとしては、次のものを利用しなさい。

これらのホスト名には、正確には、coins.tsukuba.ac.jp を付ける。
$ ssh www.coins.tsukuba.ac.jp [←]
$ ssh pentas-compa.coins.tsukuba.ac.jp [←]
実習室内では、coins.tsukuba.ac.jp を省略できる。
$ ssh www [←]
$ ssh pentas-compa [←]

一番最初に接続する時には、次のような警告(Warning:)が表示される。

crocus40:~ yas$ ssh www[←]
The authenticity of host 'www (130.158.87.1)' can't be established.
RSA key fingerprint is 17:1a:63:a8:0d:82:e3:d6:60:f7:fb:28:1a:19:4e:7b.
Are you sure you want to continue connecting (yes/no)? yes[←]
Warning: Permanently added 'www' (RSA) to the list of known hosts.
yas@www's password: 
Last login: Wed May 20 21:45:51 2015 from violet-nwa.coins.tsukuba.ac.jp
violet-nwa:~ yas$ []
この fingerprint は、接続先のホストの公開鍵のハッシュ値である。これが次 のリストに含まれているかを確認してから yes と打ち込みなさい。

遠隔ログインが成功すると、ログイン先でシェルが実行される。シェルのプロ ンプトには、(多くの場合)ホスト名が含まれているので、遠隔ログイン後に は、プロンプトが変化する。シェルを終了(exitコマンド)すると、遠隔ログイ ン自身も終了する(ログアウトする)。

ssh で遠隔ログインした後に、シェルのプロンプトが変わることを確認しなさ い。また、exit コマンドを実行すると、ログアウトできることを確認しなさい。

  1. iTerm で端末を開く。シェルが実行される。
  2. プロンプトを観察する
  3. ssh で遠隔ログインする
  4. プロンプトを観察する
  5. exit コマンドで、遠隔ログインのログインシェルを終了する(ログアウトする)
  6. プロンプトを観察する
  7. exit コマンドで、iTerm で最初のシェルを終了する。

★練習問題(1102) 遠隔ログインによるifconfigコマンドの実行

ifconfig コマンドを利用すると、コンピュータの IP アドレスを調べることができる。 ssh による遠隔ログインの前後で ifconfig コマンドの結果を比較しなさい。
(sshを実行する、iTtermを実行した直後。)
$ ifconfig en0 [←]
(inet の次に iMac の IP アドレスが表示される。)
$ ssh www [←]
$ ifconfig eth0 [←]
(inet の次に www サーバの IP アドレスが表示される。)
$ exit [←]
$ []

★練習問題(1103) 学類 Web サーバのアクセス・ログの観察

次の手順で、学類 Web サーバに保存されている アクセス・ログを観察しなさい。
  1. ssh コマンドで www.coins.tsukuba.ac.jp にログインする。 RSA key fingerprint が、以下のようになっていることを確認してから yes と打つこと。偽物のホストに接続してパスワードを打ってはな らない。
    crocus40:~ yas$ ssh www[←]
    The authenticity of host 'www (130.158.87.1)' can't be established.
    RSA key fingerprint is 17:1a:63:a8:0d:82:e3:d6:60:f7:fb:28:1a:19:4e:7b.
    Are you sure you want to continue connecting (yes/no)? yes[←]
    Warning: Permanently added 'www' (RSA) to the list of known hosts.
    yas@www's password: 
    Last login: Wed May 20 21:45:51 2015 from violet-nwa.coins.tsukuba.ac.jp
    violet-nwa:~ yas$ []
    
  2. cd コマンドで、ログがあるディレクトリに移動する。
    violet-nwa:~ yas$ cd /var/log/httpd/http[←]
    violet-nwa:http yas$ pwd[←]
    /var/log/httpd/http
    violet-nwa:http yas$ []
    
  3. このディレクトリで、ls コマンドを実行しなさい。以下の例で、 access* の「*」は、 シェルの ファイル名置換 の意味である。
    violet-nwa:http yas$ ls[←]
    (多くのファイルが表示される)
    violet-nwa:http yas$ ls access*[←]
    (多くのファイルが表示される)
    violet-nwa:http yas$ ls access* | tail -1[←]
    access_log_20160526
    violet-nwa:http yas$ ls -t access* | head -1[←]
    access_log_20160526
    violet-nwa:http yas$ 
    
    この例では、access_log_20160526 が最新のものである。
  4. このファイルを lv コマンドで表示しなさい(スペースキー、bキー、qキーで操作)。
    $ lv access上のlsの結果で置き換える [←]
    
    たとえば、上の例では、次のように打つ。
    $ lv access_log_20160526 [←]
    
  5. このファイルを、tail コマンドで表示しなさい。
    $ tail access上のlsの結果で置き換える [←]
    (表示がなされる。)
    (しばらく待つ。)
    $ tail access上のlsの結果で置き換える [←]
    (表示がなされる。)
    (しばらく待つ。)
    $ tail access上のlsの結果で置き換える [←]
    (表示がなされる。)
    
    (しばらく間隔を空けてから)数回 tail コマンドを実行すると、その度に行 が増えているはずである。 たとえば、上の例では、次のように打つ。
    $ tail access_log_20160526 [←]
    $ tail access_log_20160526 [←]
    $ tail access_log_20160526 [←]
    
Webサーバ・アクセスログ を参考にして、アクセスログの意味を解釈しなさい。

★練習問題(1104) 学類 Web サーバのアクセス・ログの観察(grep)

自分自身で、情報科学類の Web ページをアクセスした時に、自分が使っている iMac の IP アドレスが表示されることを確認しなさい。

  1. まず 練習問題(1102) を参考にして自分自身が使っている iMac の IP アドレスを調べなさい。
  2. 次のように grep コマンドを使って、IP アドレスを検索しなさい。
    $ grep IPアドレス アクセスログのファイル名 [←]
    
    たとえば、IP アドレスが 130.158.86.249 であれば、次のように打つ。
    $ grep 130.158.86.249 アクセスログのファイル名 [←]
    
    ここで「アクセスログのファイル名」は、 練習問題 学類 Web サーバのアクセス・ログの観察 で調べなさい。 たとえば、その練習問題の例では、次のように打つ。
    $ grep 130.158.86.249 access_log_20160526 [←]
    
もし、何も現れなければ、コンピュータ・リテラシの Web ページをアクセスし なさい。

★練習問題(1105) 学類 Web サーバのアクセス・ログの観察(tail-f)

ログのファイルを tail -f で表示してみなさい。
$ tail -f アクセスログのファイル名 [←]
ここで「アクセスログのファイル名」は、 練習問題 学類 Web サーバのアクセス・ログの観察 で調べなさい。 たとえば、その練習問題の例では、次のように打つ。
$ tail -f access_log_20160526 [←]
-f オプションを指定すると、tail コマンドは終了することなく新しく追加さ れた行を表示する。この tail コマンドは、自動的には終了しないので、終わっ たら、 ^C (Control+C) で強制終了させる。

★練習問題(1106) 学類 Web サーバのアクセス・ログの観察(https)

情報科学類では、2つの World Wide Web のサーバを実行している。 練習問題(1103) と同様に、 SSL を用いているサーバについて、アクセスログを観察しなさい。

★練習問題(1107) ~/.ssh/known_hostsの観察

一度遠隔ログインしたホストについては、~/.ssh/known_hosts にそのホストの 公開鍵が保存される。そのことを確認しなさい。
$ cat ~/.ssh/known_hosts [←]
www ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAv2S59b8mM56WSiNtdRr692yi1bxSub+k1WFXZIfK
bxqq5ZaMHEZaPK5nyU8ebekSIAb0oQq+pz2emaugnFMByExheM+Od19r2moXo3w4Qk9VejfhY77eEXNa
DS9ipw0u+MgLYQ1eeaVnsJOZ0Ia7TjUF+zPk25aY5TaLTWTiBWBq1eVIqrH6xieStXHbyDBaSoWU5++V
Cy3zYAhWA5ZG+sBq4wr2RYJhpG5PM/aIrT1RKmL3t+JmDTnBb8vyNyNncWrZfPppvnDFhgNUNObvtylI
O2791lrd211rRc6QEc5MBkSnKAQqpGPyBCe0Y9w96peMMTcUQNgVB8kmDJnOIw==
$ []

★練習問題(1108) ssh -l オプションや user@remotehost の形式によるログイン

ログイン先とログイン元でユーザ名が異なる時には、次のように、-l オプショ ンに続きログイン先のユーザ名を使う。

host1$ ssh remotehost -l user[←]
Password: (パスワードを打つ)[←]
remotehost$ []
または、「@」の前にログイン先のユーザ名を指定する。
host1$ ssh user@remotehost[←]
Password: (パスワードを打つ)[←]
remotehost$ []
この -l オプションを利用する方法や @ を利用する方法で遠隔ログインを行っ てみなさい。(注意:同じ場合でも、あえて指定することもできる。)

★練習問題(1109) 遠隔ログインによるコマンドの実行

遠隔ログインを行い、次のコマンドを実行しなさい。そして、遠隔ログインを 行っていない時(ローカルでの実行結果)と比較しなさい。 この実習では、端末を2枚開き、片方の端末で遠隔ログインを行い、もう片方 ではそのまま実行し、2つの結果を比較する。

★練習問題(1110) ssh、ホストの公開鍵の確認

次のようなコマンドで、そのコンピュータのホストの公開鍵を表示してみなさ い。また、次のようにしてハッシュ値を表示しなさい。

MacOSX

$ ls -l            /etc/ssh_host_rsa_key.pub [←]
$ cat              /etc/ssh_host_rsa_key.pub [←]
$ ssh-keygen -l -f /etc/ssh_host_rsa_key.pub [←]
Linux (www サーバ等)
$ ls -l            /etc/ssh/ssh_host_rsa_key.pub [←]
$ cat              /etc/ssh/ssh_host_rsa_key.pub [←]
$ ssh-keygen -l -f /etc/ssh_host_rsa_key.pub [←]

★練習問題(1111) ssh、known_hosts

ssh コマンドで遠隔ログインをし、ログアウトしなさい。次のようなファイル やディレクトリが作られたこと(存在すること)を確認しなさい。
$ ls -ld ~/.ssh [←]
<結果省略>
$ ls -l  ~/.ssh [←]
<結果省略>
$ ls -l ~/.ssh/known_hosts [←]
<結果省略>
$ []
この ~/.ssh/known_hosts には、接続先のホストの公開鍵が 含まれている。これを表示しなさい。
$ cat ~/.ssh/known_hosts [←]
<結果省略>
$ []
また、公開鍵のハッシュ値を表示しなさい。
$ ssh-keygen -l -f ~/.ssh/known_hosts [←]
<結果省略>
$ []

★練習問題(1112) Firefox SSLの証明書の表示

Firefox を使って、Web サーバが提示している証明書を表示してみなさい。
  1. SSL のページを開く。https://www.coins.tsukuba.ac.jp/ce/ 等。
  2. ロケーション・バー(ウィンドウの上部のURL が表示されている部分)の 「https」の左側に表示されている錠のアイコンをクリックする。
    Firefox、ロケーション・バー、錠、安全な接続
(クリックで拡大)
  3. 「>」をクリックする。
    Firefox、ロケーション・バー、錠、安全な接続、「>」
(クリックで拡大)
  4. 「詳細を表示」ボタンを押す。
    Firefox、安全な接続、詳細
(クリックで拡大)
  5. 開かれたウインドで、「セキュリティ」タブを選ぶ。
  6. 「証明書を表示」ボタンを押す。 「証明書ビューア」のウィンドウが開く。
    Firefox、安全な接続、証明書を表示
(クリックで拡大)
  7. 「詳細」を開く。
    Firefox、証明書ビューア、詳細
(クリックで拡大)
次の項目を調べなさい。

★練習問題(1113) Firefoxのルート認証局

Firefoxが保持しているルート認証局のリストを表示しなさい。
  1. 「Firefox」メニューの「環境設定」を選ぶ
  2. 「詳細」ボタンを表示する。
  3. 「証明書」タブを開く
  4. 「証明書を表示」ボタンを押す
  5. 「認証局証明書」タブを選ぶ
このリストの中に 練習問題(1112) SSLの証明書の表示 で表示したルート認証局が含まれているか確認しなさい。

★練習問題(1114) sshにおける公開鍵による認証

coins では、近日中に外部からの SSH での接続で、パスワードによる認証が使 えなくなる。そうなると、外部から、SSH で接続するには、公開鍵を使うしか なくなる。coins のコンピュータで、以下の手順で公開鍵と秘密鍵の組を作成 したら、秘密鍵を ssh のクライアントにコピーして利用する。

ssh で、 公開鍵暗号を使った利用者認証 を利用しなさい。

まず、ssh-keygen コマンドを使って、公開鍵と秘密鍵の組を生成しなさい。

$ ssh-keygen -t rsa [←]
Generating public/private rsa key pair.
Enter file in which to save the key (/home/prof/yas/.ssh/id_rsa): [←]
Enter passphrase (empty for no passphrase): パスフレーズ[←]
Enter same passphrase again: パスフレーズ[←]
Your identification has been saved in /home/prof/yas/.ssh/id_rsa.
Your public key has been saved in /home/prof/yas/.ssh/id_rsa.pub.
The key fingerprint is:
e4:93:eb:30:02:63:a3:73:d9:05:44:81:dc:0c:7e:85 yas@crocus14.coins.tsukuba.ac.jp
The key's randomart image is:
+--[ RSA 2048]----+
| ..*+o.          |
| .o.E.           |
|  . o   .        |
|   . . o .       |
|  =   . S        |
| o * .   o       |
|o o o o .        |
| o   . +         |
|        .        |
+-----------------+
$ []
$ ssh-keygen -t dsa [←]
Generating public/private dsa key pair.
Enter file in which to save the key (/home/prof/yas/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): パスフレーズ[←]
Enter same passphrase again: パスフレーズ[←]
Your identification has been saved in /home/prof/yas/.ssh/id_dsa.
Your public key has been saved in /home/prof/yas/.ssh/id_dsa.pub.
The key fingerprint is:
65:86:35:fa:6d:12:db:c3:35:20:b2:cf:d5:ad:c9:82 yas@crocus14.coins.tsukuba.ac.jp
The key's randomart image is:
+--[ DSA 1024]----+
|        . + .    |
|         * o o . |
|        + = . + .|
|         B O o + |
|        S E B +  |
|           o o   |
|                 |
|                 |
|                 |
+-----------------+
$
生成に成功すると、標準では、~/.ssh というディレクトリの下に、2 つのファイルが作られる。 前者に、秘密鍵、後者に公開鍵が保存される。秘密鍵の方は、パスフレーズを 鍵とした「対称暗合系」で暗号化されて保護される。パスフレーズは、長く (10-30文字)にする。(この課 題で、うまく動作していることを確認するためには、通常のログインのパスワー ドとは必ず違うものにしなさい。)

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 crocus10 [←]
Password:
authorized_keys を作成した後には、ssh で接続する時に次のように 「パスフレーズ passphrase」が聞かれる。
$ ssh crocus10 [←]
Enter passphrase for key '/home/prof/yas/.ssh/id_rsa': 
MacOSX では、次のように、ウインドウが表示されることがある。


図? MacOSX で ssh 公開秘密鍵のパスフレーズの打ち込み(ssh-agentとキーチェーンアクセスの機能)

これに対して、ssh-keygen でパスフレーズを打ち込む。(公開鍵による認証に 失敗すると、通常のパスワードによる認証に落ちるのが一般的である。システ ムによっては、認証方式に制限を加えていることがある。)

★練習問題(1115) ssh-agentの実行(coins MacOSX)

秘密鍵を管理するプロセス ssh-agent を使えば、一度だけパスフレーズを打ち、 それに登録すれば、ssh でログイン時の度にパスフレーズを打たないよくなる。 さらに、MacOSX では、ssh 秘密鍵のパスフレーズを Keychain Access に登録 することもできる。

coins の iMac で MacOSX が動作している時には、ssh-agent が利用可能になっ ている。この事を確認しなさい。 ssh-agent が利用可能な場合、次のようにprintenv SSH_AUTH_SOCK で /tmp の下のファイル名が表示される。また、ssh-add -l で、 ssh-agent と接続できる。

$ printenv SSH_AUTH_SOCK [←]
/tmp/launch-IbzuAT/Listeners
$ ssh-add -l [←]
The agent has no identities.
$ []

ssh-agent が利用できない場合、次のようにprintenv SSH_AUTH_SOCK でなにも表示されない。また、ssh-add -l で、ssh-agent と接続でき ないというエラー・メッセージが表示される。

$ printenv SSH_AUTH_SOCK [←]
(何も表示されない)
$ ssh-add -l [←]
Could not open a connection to your authentication agent.
$ []

★練習問題(1116) ssh-agentの実行(手動)

Linux 等、ssh-agent が動いていない場合、手動で実行することも できる。 まず、ssh-agent が利用できないことを確認する。 次のようにprintenv SSH_AUTH_SOCK でなにも表示されない。また、ssh-add -l で、ssh-agent と接続でき ないというエラー・メッセージが表示される。
$ printenv SSH_AUTH_SOCK [←]
(何も表示されない)
$ ssh-add -l [←]
Could not open a connection to your authentication agent.
$ []
次に、ssh-agent を実行する。 ssh-agent が利用可能な場合、次のようにprintenv SSH_AUTH_SOCK で /tmp の下のファイル名が表示される。また、ssh-add -l で、 ssh-agent と接続できる。
$ ssh-agent bash [←]
$ printenv SSH_AUTH_SOCK [←]
/tmp/launch-IbzuAT/Listeners
$ ssh-add -l [←]
The agent has no identities.
$ []
うえの例では、端末で別の bash を実行している。 その他に、次のように、同じ bash を使うこのもできる。
$ eval `ssh-agent` [←]
$ printenv SSH_AUTH_SOCK [←]
/tmp/launch-IbzuAT/Listeners
$ ssh-add -l [←]
The agent has no identities.
$ []
eval を使う方法ではログアウトした時に ssh-agent のプロセスが残ること がある。そうならないように ログアウト時に明示的に終了させる ようにする。
$ ssh-agent -k [←]
$ exit [←]

★練習問題(1117) ssh-agentの利用

ssh-agent を実行したら、次のように利用できる。
$ ssh-add [←]
                鍵の登録
Enter passphrase for /home/prof/yas/.ssh/id_rsa: パスフレーズ[←]
Identity added: /home/prof/yas/.ssh/id_rsa (/home/prof/yas/.ssh/id_rsa)
$ ssh-add -l [←]
	        鍵が登録されたことの確認
$ ssh www [←]
	        鍵の利用
$ []

★練習問題(1118) MacOSX キーチェーンアクセス(Keychain Access.app)

キーチェーンアクセスは、MacOSX に付属している、パスワード等の機密情報を 暗号化して保存するプログラムである。 暗号化には、利用者が指定したパスワードを鍵として使う。 標準では、次のファイルに、暗号化された機密情報を保存している。 このファイルが存在することを ls -l や Finder で確認しなさい。

「キーチェーンアクセス.app」のパスワードとログインの時に打つパスワード を同じにしていると、自動的に機密データの暗号を解いてアプリケーションに 渡す機能がある。注意すべきことは、ログイン・パスワードを変更しても、 「キーチェーンアクセス.app」のパスワードは変更されないことである。 活用するには、ログイン・パスワードを変更したら、 「キーチェーンアクセス.app」のパスワードも変更するとよい。

何も使っていなければ、「キーチェーンアクセス.app」のパスワードは、初期 パスワードのままになっている。重要な情報を保存していなければ、上記のファ イルを削除し、ログインしなおすことで、リセットするとよい。

次のような MacOSX のアプリケーションが、「キーチェーンアクセス.app」を 使って機密情報を暗号化して保存することができる。

「キーチェーンアクセス.app」を実行して、どのような機密データが保持され てるかを見てみなさい。

次の手順でパスワードを暗号化して保存しなさい。

  1. 保存前に最終更新時刻を調べる。
    $ ls -l ~/Library/Keychains/login.keychain [←]
    
  2. キーチェーンアクセスを実行する。
    $ open "/Applications/Utilities/Keychain Access.app" [←]
    
  3. 「ファイル」メニューから「新規パスワード項目」を選ぶ。
  4. 開かれたウィンドウで、次の項目を埋める。
  5. 項目を埋めたら、「追加」ボタンを押す。
  6. 先ほど追加した項目が、表示される。
  7. ダブルクリックすると、ウィンドウが開かれ、「キーチェーン項目」と 「アカウント名」が表示される。
  8. さらに、「パスワードを表示」のチェックボックスを押すと、パスワード が表示される。この時、必要ならばログインのパスワードを打ち、「常に許 可」、「拒否」、「許可」から選ぶ。
  9. 保存後に最終更新時刻を調べる。
    $ ls -l ~/Library/Keychains/login.keychain [←]
    

★練習問題(1119) opensslコマンドによるハッシュ値の計算

次の手順で、SHA-1 によりハッシュ値を計算してみなさい。 引数として、sha1 の代わり, sha224, sha256, sha384, sha512, md5 と指定し て、それぞれハッシュ値を計算しなさい。

★練習問題(1120) Tera Term、その他のプログラムの利用

手引き 9.1.2節 参照。 Tera Termや PuTTYは、Windows で動作するssh のクライアントである。これら のプログラム、または、類似のプログラムを用いて、coins の外部からcoins 内のコンピュータに接続しなさい。

★練習問題(1121) VPNの利用

VPN (Virtual Private Network) とは、 インターネットという誰もがアクセス可能なネットワークを利用しながら、 事実上専用線(private network) を使っているように安全な通信路を 提供する事実である。VPN を実現するためには、暗号化の技術が使われている。

coins でも、VPN 機能を提供している。 手引き 9.3節 参照。 この機能を利用しなさい。

■課題11 暗号、SSL、SSH、Webサーバ・アクセスログ

以下の問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。

(1) 練習問題(1104) を行いなさい。 Web サーバが生成しているアクセスログから、自分自身がアクセスした記録を 抜き出しなさい。それには、まず自分が利用しているコンピュータの IP アド レスを調べ、アクセスログからその IP アドレスが含まれている行を抜き出す とよい。アクセスログのうち、「数行」をレポートに含めなさい。

(2) coins の Web サーバ www.coins.tsukuba.ac.jp で使われている SSL の証 明書を観察しなさい。この証明書に含まれている重要な項目を2つ選びなさい。 それぞれ、何を意味するのか、簡単に説明しなさい。

SSLで使われる証明書練習問題(1112) SSLの証明書の表示 参照。

(3) The Unix Super Text の次の部分を読みなさい。

次の項目について簡単に説明しなさい。HTMLと似ているものについては、HTML のタグ名を示してもよい。たとえば、「\section」の説明として、「HTMLの <H1>と似ている。」と回答してもよい。

(4) 手引きの次の次の部分を読みなさい。

次の項目について簡単に説明しなさい。

(5) [加点] ssh で最初にあるホストに接続する時に、次のような表示がなされ ることがある。

RSA key fingerprint is 17:1a:63:a8:0d:82:e3:d6:60:f7:fb:28:1a:19:4e:7b.
Are you sure you want to continue connecting (yes/no)? 
この表示の意味を、今日の授業内容の用語を用いて説明しなさい。

また、ssh で以前に接続したことがあるホストに接続すると、「Are you sure you want to continue connecting (yes/no)? 」という表示はなされない。そ の理由を説明しなさい。

(6) [加点] ssh と VPN に関連して、次の課題を「2つ以上」行いなさい。

(6a) [加点] sshコマンド、PuTTY、Tera Term、その他の ssh クライアントを 用いて、「学外」からcoins のコンピュータに接続しなさい。そのことを示す ために、レポートには、どのようなプログラムを使ったのか、ログイン後のコ マンドの実行結果等を含めなさい。

(6b) [加点] sshコマンド、PuTTY、Tera Term、その他の ssh クライアントを 用いて「公開鍵を用いた認証」により、coins のコンピュータに接続しなさい。 そのことを示すために、レポートには、どのようなプログラムを使ったのか、 公開鍵の生成手順、クライアント側の設定、サーバ側の設定を含めなさい。

(6c) [加点] 学類外のコンピュータから VPN 機能を使って coins のコンピュー タに接続して、coins のコンピュータを利用しなさい。利用には、ssh による 接続の他に、World Wide Web、電子メール等を含めてもよい。レポートに次の 項目を含めなさい。


Last updated: 2016/05/28 10:59:55
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>