Skip to content.

kagome.lab.tkikuchi.net

Sections
Personal tools
You are here: Home » Members » tkikuchi's Home » 授業 » 情報社会と情報倫理 » パスワードと暗号
Views

パスワードと暗号

Document Actions
毎年教えるたびに頭が痛くなるが、今年もこれで終わり。

前回の問題

  • 脆弱性 (ぜいじゃくせい)
  • 原因
    • バッファオーバフロー(またはそれらしい言葉)をあげた人 ... 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 ... ファイル転送
  • この とおりです。

あれこれありましたが

  • この授業は終わりです
  • でも、これからどんな新しい問題が出てくるかわかりません
  • 皆さんの勉強は終わりません
  • 私も、来年の授業へ向けて勉強です
Created by tkikuchi
Last modified 2006-01-25 15:41
 

Powered by Plone

This site conforms to the following standards: