ほとんどのパケットは丸見え。
文字を一定量ずらす。
暗号化と復号化の鍵が同じ。
鍵の(伝達)共有手段が問題となる。
暗号化と復号化の鍵が異なる。
暗号化に公開鍵、復号化に秘密鍵を用いる。
計算コストが高い
長大なバイト列を特定の計算を施して一定長のバイト列に 変換する。データの比較を短いバイト列で済ますことができる。
特定のアルゴリズムを用い、元のバイト列を暗号化する関数。
Rubyの例を示す。文字列 "original"
を
salt "ab"
でDES暗号化。
"original".crypt("ab")
=> "abvUK.F.H7/6I"
暗号化文字列の最初の2文字はsalt自身。
"ab"
以外のsaltで試してみよ。
多くのシステムでは、crypt()
メソッド(関数)の、saltの与え方で使用するアルゴリズムを
切り替えられる。salt部分の用法は厳密には
$id$salt$......$
で、id の部分と使用アルゴリズムの対応は 以下のとおり。
1 | MD5 |
2a | Blowfish |
5 | SHA-256 |
6 | SHA-512 |
パスワードはパスワードどうしで比較するのではなく 暗号化された文字列どうしで比較する。 1方向ハッシュ関数はそのために重要。
チャレンジ文字列とパスワード文字列を合成したものを クライアント側とサーバ側で互いに暗号化し、比較。
パスワードをサーバ側に送る。 暗号化されていない回線で利用すると危険。