Skip to content.

kagome.lab.tkikuchi.net

Sections
Personal tools
You are here: Home » Members » tkikuchi's Home » 授業 » 情報ネットワーク論特講 » 暗号通信
Views

暗号通信

Document Actions
SSL, SSH

パスワードと暗号

  • パスワード = 合言葉
  • 「有楽町で会いましょう」
  • 「山」「川」
  • 人が横で聞いていたらばれる
  • システムに「平文」で保存してはいけない

パスワードの暗号化

  • パスワードを決める ... 暗号化して保存
  • パスワードの入力 ... 暗号化して比較

暗号化されたパスワードの例

  • 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ビットでも違えば全く違う
    • 同じハッシュになる文が出てくる確率は非常に小さい

暗号通信

  • SSL
    • 公開鍵暗号を使って共通鍵を交換
  • OpenSSL
  • SSH/HTTPS などのライブラリ

SSH

ssh

  • SSH Client
  • Terminal (シェル)から起動
  • サーバの公開鍵を確認(初めての場合)
  • 暗号による鍵の交換 -> 共通鍵による暗号通信

ssh 認証

  • ユーザの公開鍵
    • あらかじめ公開鍵をサーバに渡しておく
    • 秘密鍵で暗号化した署名を送信
    • サーバ側で復号できればOK
  • パスワード
    • (UNIX システムの)ユーザパスワードを暗号化して送信

ssh key の生成

  • ssh-keygen

ssh の応用

  • scp ... ホスト間のファイルコピー(rcp の代わり)
  • sftp ... ftp の代わり
  • トンネリング、TCP転送 (X11 など)
Created by tkikuchi
Last modified 2006-06-18 13:19
 

Powered by Plone

This site conforms to the following standards: