Views
パスワードと暗号
毎年教えるたびに頭が痛くなるが、今年もこれで終わり。
前回の問題
- 脆弱性 (ぜいじゃくせい)
- 原因
- バッファオーバフロー(またはそれらしい言葉)をあげた人 ... 9人
- SQL インジェクション をあげた人 ... 4人
- クロスサイトスクリプティング をあげた人 ... 0人
- その他は X
最後の授業の最初に
- この授業の試験はありません。
- 毎年、後からポツポツと聞きに来る人がいます。
- シラバスにも書いてあります。
- うんざりです。
- これ以降、「試験あるんですか」と私に聞いた人には、単位はありません。
- 冗談で終わればよいが。。。
パスワードと暗号
- パスワード = 合言葉
- 「有楽町で会いましょう」
- 「山」「川」
- 人が横で聞いていたらばれる
- システムに「平文」で保存してはいけない
パスワードの暗号化
- パスワードを決める ... 暗号化して保存
- パスワードの入力 ... 暗号化して比較
暗号化されたパスワードの例
tkikuchi@fms% /www/bin/htpasswd -c passwd tokio New password: Re-type new password: Adding password for user tokio tkikuchi@fms% cat passwd tokio:gqyee65NFqv9s
暗号化パスワードの解析
tokio:gqyee65NFqv9s
- 最初の2文字 = salt ... ランダム文字
- 残りの11文字 = DES 暗号
- 但し、復号は不可能(と言われている)
パスワードを当ててみる
- ログインできた!
- できた時点でばれてしまう
- crack を使う
自家製 crack
tkikuchi@fms% cat crack.py #!/bin/env python # crack.py import sys import crypt f = open("passwd") user, passwd = f.readline().strip().split(":") salt = passwd[:2] while 1: guess = raw_input("あててみる? ") guesscrypted = crypt.crypt(guess, salt) if passwd == guesscrypted: print "BINGO!" break else: sys.stdout.write("Non, Non. ")
DES 暗号
- Data Encryption Standard
- 既に標準ではない
- DES in Wikipedia
- 8文字ごとに暗号化
- 鍵(Key)は8文字(=56bit)
ビット順の交換による暗号
tkikuchi@fms% cat bitx.py #!/bin/env python # bit 交換関数 def bitx(bits, key): outbits = [] for k in key: outbits.append(bits[int(k)]) return ''.join(outbits) if __name__ == '__main__': bits = "11100110" # "01234567" を以下のように交換 key = "72165430" ciph = bitx(bits, key) print ciph deci = bitx(ciph, key) print deci tkikuchi@fms% ./bitx.py 01111001 11100110
排他論理和による暗号
>>> a = 123456789 >>> b = 987654321 >>> c = a^b >>> c 1032168868 >>> c^b 123456789
共通鍵暗号
- AとBが同じ「鍵」を持つ
- A:「箱」に入れて「鍵」をかける ... 暗号化
- 「箱」を運ぶ
- B:「鍵」で「箱」を開ける ... 復号
共通鍵暗号では
- 「鍵」が合えばBは「箱」の送信者をAと認める
- パスワードはこれを応用
公開鍵暗号
- 2つ「鍵」を持つ。
- 片方の「鍵」で閉じた「箱」はもう一方の「鍵」で開く
- A:Bの「公開鍵」で暗号化
- B:自分の「秘密鍵」で復号
- Bの「公開鍵」は本当にBのものなんだろうか?
- C「認証機関」が証明(署名する)
公開鍵暗号を使った署名
- C:自分の「秘密鍵」で暗号化
- A:Cの「公開鍵」で復号
- 全文を暗号化するのでなく、ハッシュ関数で短くしたものを暗号化
- ハッシュは文のうち1ビットでも違えば全く違う
- 同じハッシュになる文が出てくる確率は非常に小さい
暗号・署名ツール
- PGP ... Pretty Good Privacy
- GPG ... GNU Privacy Guard
-----BEGIN PGP MESSAGE----- Version: GnuPG v1.4.1 (FreeBSD) hQIOA33/fYzLqW99EAgAktG4bZNInd1Tpr5DH1opHfj16RaIOVnW2Oi1Nvu02rkv LM1WX32HI25sSJEMQ9oKrN7QDrsGxwMN+1g12KHWHh/4mTk0FStQqscnOL+O4goB tb8XzzN/O8+4+RNeOKCT4nsHaxHvJOzPQYqqjQd1uAkc2EkrTXme+7/ANksbRnXW dLhXukf8QPIAuTRka9qXuQ4jKwoMbi4sHORpXH3wvIj9HY0to3X7CJqMYaMuXOxr tQT8jtpKm6SabJdYVJtPr6woF3rbC90khBtDzyKV0E1sg3Hei5zTCE27dj0H259E X5vnxlMf6Mxmg5+pemE7xqW28+aL5TrgTLFOKqa62gf/ScFJWLg3EzFJw+2Tpcv9 NfEtez/vg98+T0AAhONAVpExM6jq/DVKsn9O+hx8PSkjYisoHqLZdwRzolMhvnDI 1MYWyHRTlL9KezfHbeEQo4qOC9nCYCq8uygrAxhY8AowzA0u3OtDhfIDCPX/aMDt pxZmKzuoHnW1f5k7phoFKdS6AUJS7RU0hDsIZPwn1pARx6PAbAkieiyyDeXEMt95 rfy0BWtpmOjsPSuM0jtAKv+c4q01hZCaQH2BNZmmpRWbc265i2kcY+Pl8bKSyD2T VRq5atZy57q7SAjs7BjpYuHAw8OjGPUOpADl9CkVI56plaqJnKidIJBC47dLcAOS btLARwEQZZqLyDl2GUNGKbZ7PIA/S/GVGW9YNU92QdgoBFUqj047k/K7MhWFRd2A exNfsKTLzwNa/e2MgMm1kpYD4rajIZi5YSU5aR00dGE0pr9OFaT5RL+okSLHwvDs Xir4IU8zn4MkALtbTbHmPzZHBhwV+iuX3gM+DbMlxTy1+Y0Q+AvTESeMO1mp7aPr uQj/PtUkE12xo3FNGih/Bn3bKf7L+iTGssm6OdWQtbopMuUXFLSQtvHc8q5sD776 rOXrEpjqWcF+ax9VIAQfFZjtkam6X83xAT2pa05aUnaa/OhXhDWOqluyJBL3Cjcl SHHL3xGdc2YdoADfZl/InvIhAERRwzo8GjSf =wV2N -----END PGP MESSAGE-----
HTTPS
- SSL (Secure Socket Layer)
- ブラウザに「認証機関」の公開鍵を持つ
- サーバ側のBが正しいことを認める
- 乱数で共通鍵を生成
- Bの公開鍵で暗号化した共通鍵をサーバに送り、以後の通信を暗号化する
正しく認証されたサイト
- と、そうでないサイト
- 生協ショッピングサイト
- 自己認証のサイト
SSH/SFTP/SCP
- telnet ... パスワードが平文でネットを流れる
- ssh ... SSL を用いてログイン
- sftp/scp ... ファイル転送
- この とおりです。
あれこれありましたが
- この授業は終わりです
- でも、これからどんな新しい問題が出てくるかわかりません
- 皆さんの勉強は終わりません
- 私も、来年の授業へ向けて勉強です