Skip to content

Instantly share code, notes, and snippets.

@nishinoshake
Last active May 29, 2016 04:03
Show Gist options
  • Save nishinoshake/63fdaea36798ecae5bb90172d4973565 to your computer and use it in GitHub Desktop.
Save nishinoshake/63fdaea36798ecae5bb90172d4973565 to your computer and use it in GitHub Desktop.
暗号化がよくわからん

共通鍵暗号方式 AES

平文(ひらぶん)plain text
 ↓ 共通鍵と暗号化アルゴリズム
暗号文
 ↓ 共通鍵と復号化アルゴリズム
平文

問題点はふたつ。
そもそも共通鍵を安全に交換できるならその方法で通信すればいいじゃん問題。
毎回カギを変えないと他の人との通信も複合できちゃう問題。

この鍵は送信・受信者の間のみで通信される。漏れたら終わり。

#公開鍵暗号方式 RSA 公開鍵はだれでも取得できるオープンな鍵で、暗号化に使う。
復号には受信者が生成した(受信者のみが保持する)秘密鍵が必要になる。
受信者が公開鍵をバラまけば、誰か→受信者の通信は受信者しか復号できない通信になる。

平文
 ↓ 公開鍵で暗号化
暗号文
 ↓ 秘密鍵で復号化
平文

問題点はふたつ。
基本的に一方通行の通信しかできない問題。
通信速度が遅くなる問題。

SSL ( Secure Socket Layer )

  1. クライアントからサーバへSSLの接続要求(https://と入力)
  2. サーバ証明書と公開鍵が送られてくる
  3. 認証局から発行されたものかどうかを確認
  4. OKだったらクライアント側で共通鍵を生成する
  5. サーバから証明書と一緒に送られてきた公開鍵で共通鍵を暗号化する
  6. サーバ側の秘密鍵で共通鍵を復号化する
  7. これで1:1の共通鍵で通信ができる!
  8. 共通鍵と公開鍵の合わせ技で一本

CA(認証局)

デジタル証明書を欲しいといったサーバ業者が怪しくないかを確かめ、OKなら証明書を発行する。

SSH ( Secure Shell )

認証方法はパスワード認証と鍵認証

##パスワード認証

  1. クライアントがサーバに接続要求
  2. サーバからクライアントに公開鍵を送付
  3. クライアントは共通鍵を生成して公開鍵で暗号化してサーバに送付
  4. サーバは受け取った共通鍵を自身の秘密鍵で暗号化
  5. お互いの共通鍵で通信確立
  6. クライアントからユーザ名とパスワードを共通鍵で暗号化してサーバに送付
  7. サーバは共通鍵で復号化してユーザ認証
  8. 以降、その共通鍵で暗号化通信

##鍵認証

  1. 秘密鍵・公開鍵をクライアントで生成し、公開鍵をサーバ側に設置する(scpなどの安全な方法で設置する)
  2. クライアントからホスト名とユーザ名を指定してログイン
  3. サーバで乱数を生成し、公開鍵と乱数で暗号生成してクライアントへ。乱数のハッシュをサーバに保存。
  4. 秘密鍵で暗号を復号化して乱数を抜き出してハッシュしてサーバに送信
  5. 乱数のハッシュが一致したら認証

自分にしか解けない暗号データをちゃんと解ければ認証ということ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment