録画サーバを構築したときのメモです。
ssh
けっこう複雑な仕組みです。
ssh でログインするまでの認証の仕組み
以下のようなシステム構成を考える。
- ユーザ (クライアント): ssh を使ってログインする側
- リモートホスト (サーバ): ssh を使ってログインされる側 (sshd が動いてる方)
ssh を使う前準備として、ユーザは自分の公開鍵と秘密鍵のペアを作成し、作成した公開鍵を接続するリモートホストへ事前に登録する。
まず、以下のようにして公開鍵と秘密鍵のペアを作成する。
% ssh-keygen -t rsa # ユーザが自分の公開鍵と秘密鍵のペアを作成する
こうすると、ユーザの
- id_rsa: 秘密鍵
- id_rsa.pub: 公開鍵
のペアが作成される。ユーザは、リモートホストにこの公開鍵 (id_rsa.pub) を登録してもらう。
ホストの ~/.ssh/authorized_keys は、ユーザーの公開鍵を登録するための設定ファイルで、ここに公開鍵を登録してもらえばよい。
% cat id_rsa.pub >> ~/.ssh/authorized_keys # リモートホストがユーザから受け取った公開鍵を "認証済み公開鍵リスト(的な物)" に登録する。
以上が必要な前準備。
TODO
こうすることで、リモートホストがユーザ認証をする際に、
リモートホスト側では、ユーザーが登録した公開鍵を使用して暗号化したデータをクライアントへ送信します。
クライアントはそのデータをユーザーの秘密鍵で復号化し、サーバーへ送り返します。
このとき、暗号化されたデータを復合化できるのは、公開鍵とペアの秘密鍵を持っているユーザーだけです。
暗号化する前のデータとクライアントから返されたデータが一致していれば、ユーザーの認証は成立します。
(Turbolinux 10 Server: ユーザーガイド 20.5. 公開鍵を使用したユーザー認証 より引用)
といったように、接続されたユーザが正しいユーザかどうかを確認することができる。
公開鍵暗号
ssh は暗号システムとして、公開鍵暗号というシステムを使っている。
具体例
公開鍵暗号システムを使用しているネットワーク内に A, B, C さんがいるとする。このとき、このシステムは
- 公開鍵 3つ: εa, εb, εc: 他の人の公開鍵を誰でも見ることができる
- 暗号鍵 3つ: δa, δb, δc: 自分の暗号鍵は自分しか知らない
- 暗号化関数 1つ: c = E(m, ε): 平文 m と公開鍵 ε を入れると暗号文 c を出力 (関数は公開されている)
- 復号化関数 1つ: m = D(c, δ): 暗号文 c と秘密鍵 δ を入れると平文 m を出力 (関数は公開されている)
で構成される。鍵は (ε, δ) で各ユーザが一人一つ割り当てられている。つまり計 6 個の鍵が存在している。
特徴
ネットワークの加入者を N 人とする。
- 公開鍵: 各ユーザが 1 つ、計 N 個存在している。誰でも見ることができる
- 暗号鍵: 各ユーザが 1 つ、計 N 個存在している。各ユーザは自分の暗号鍵を秘密にしている。暗号鍵は自分の公開鍵に対応している
- 公開鍵と暗号鍵は 1 対 1 対応で、ある公開鍵に対応した唯一の暗号鍵を用いないと復号は
- 暗号化と復号化のアルゴリズムは公開で、比較的簡単に実行することができる
公開鍵暗号の具体例: RSA 暗号
以下の要素で構成されている。パラメータがたくさんあるが、最初に決める必要があるのは暗号鍵の p, q のみで、ほかは計算から出てくる。
- 公開鍵: ε = (e, n)
- 暗号鍵: δ = (d, p, q)
- 暗号化関数: c = E(m, ε) = E(m, e, n) = m^e % n
- 復号化関数: m = D(c, δ) = D(c, d, p, q) = c^d % n (n は公開されているので可視)
- n = pq
- d は gcd(d, l) = 1 を満たす値なら ok (l = LCM(p-1, q-1)) (簡単に計算可能)
- e は ed % l = 1 を満たす値なら ok (簡単に計算可能)
具体例
p = 3, q = 11 とすると、
- n = pq = 33
- d は gcd(d, l) = 1 を満たす、ある d は d = 7
- e は ed % l = 1 を満たす、ある e は e = 3
より, ε = (e, n) = (3, 33), δ = (d, p, q) = (7, 3, 11) と求められる。この ε, δ は暗号文を受信するある一人のユーザの公開鍵と暗号鍵である。これを使って、この人に別の人が 平文: m = 29 を送りたいとすると、まず相手に送る暗号文 c は
となり、これを相手に送る。この暗号文を受信した (唯一の正しい) 人は暗号鍵を用いて、
と m を求めることができ、正しく 平文: m = 29 を受信することができる。
参考
最終更新:2013年11月28日 16:12