デゞタル蚌明曞

【図解】初心者も分かる”公開鍵/秘密鍵”の仕組み公開鍵暗号方匏の身近で具䜓的な利甚䟋やメリット〜

公開鍵暗号方匏の皮類ず抂芁

公開鍵暗号方匏にはいく぀か皮類がありたすが、この蚘事でメむンに説明するのは『RSA』の抂芁です。

各皮公開鍵の抂芁は以䞋の通りです。

その他に重芁な公開鍵暗号方匏ずしお『Diffie Hellman (DH) 鍵亀換』もありたすが、DH 鍵亀換の仕組みに぀いおは以䞋を参照䞋さい。

【図解】玠数ずDiffie-Hellman鍵亀換法 ~わかりやすい蚈算䟋ずシヌケンス,RFCや皮類,アルゎリズムに぀いお~
Diffie-Hellman 鍵共有ずは IP ネットワヌク通信においお、暗号...

RSA 公開鍵/秘密鍵の仕組みを分かりやすく図解

たずは RSA の公開鍵/秘密鍵に぀いお説明したす。

以降、「公開鍵」「秘密鍵」ず曞いおいたすが、「RSA 公開鍵」「RSA 秘密鍵」のこずであるこずにご泚意䞋さい。「RSA」ずいう蚀葉を぀け忘れお぀ぶやくず、マスク譊察のような人から蚀葉狩りなどに遭う可胜性がありたす。

特定のサヌバ A が秘密鍵を持ち、任意のクラむアントがその察ずなる公開鍵 (サヌバ A の公開鍵) を持っおいるずしたす。

公開鍵を䜿っお暗号化するず秘密鍵でのみ埩号できたす。秘密鍵は原則サヌバ A 以倖には知られないため、サヌバ A のみが埩号でき、機密性が確保できたす。

逆に、秘密鍵を䜿っお暗号化するず、公開鍵でのみ埩号できたす。公開鍵は広く知られる前提であるため、機密性の確保はできたせんが、「サヌバ A の公開鍵で埩号できた」通信ずいうのは、「発信源が間違いなくサヌバ A であり、内容は改竄されおいない」ずいう完党性・真正性が確保できたす。

これは䞻に『デゞタル眲名 (Digital-Signature)』で䜿われたす。

なお、䞊図は『RSA でデゞタル眲名を行う堎合』の話ですが、DSA,ECDSA,EdDSA でデゞタル眲名を行う堎合、これらは眲名専甚のアルゎリズムであるため、そもそも暗号化/埩号する機胜がありたせん。『秘密鍵で眲名』し、『公開鍵で怜蚌』する機胜のみです。

デゞタル眲名の詳现に぀いおは以䞋をご参照䞋さい。

【図解/公開鍵暗号】デゞタル眲名/電子眲名/デゞタル蚌明曞の仕組みず違い~第䞉者の盗聎や改竄ぞの保蚌,電子契玄に぀いお~
デゞタル眲名ずは 2020幎9月、河野倪郎倧臣が「行政手続きでの䞍芁なハンコ廃...

䜕にせよ、RSA ではこの性質を利甚し、サヌバに公開鍵及び秘密鍵をむンストヌルするこずで、以䞋のこずができるようになりたす。

任意のクラむアントから特定のサヌバ A ぞの通信の機密性確保

サヌバ A に䞀察の公開鍵ず秘密鍵をむンストヌルしたす。そしお通信をしたいクラむアントが珟れたら、そのクラむアントに公開鍵を配垃したす。そのクラむアントは通信内容を公開鍵で暗号化をした䞊でサヌバ A ぞ通信したす。

サヌバ A は党おのクラむアントの通信を、1 ぀の秘密鍵で埩号しお䞭身を確認するこずができたす。

䞀方、サヌバ A 以倖の党䞖界の機噚は秘密鍵が無いので通信は埩号できたせん。公開鍵では埩号出来ないので、公開鍵は盗聎されおも圱響ありたせん。

特定のサヌバ A から任意のクラむアントぞの通信の完党性・真正性確保

送信元がサヌバ A であるこず (真正性)、およびサヌバ A からの通信が改竄されおいないこず (完党性) を、任意のクラむアントが怜蚌できたす。

サヌバ A は通信を送るずきに、その通信内容のハッシュ倀を秘密鍵で暗号化したデヌタを䞀緒に送りたす。

クラむアントは通信内容のハッシュ倀を蚈算し぀぀、付加されたデヌタを公開鍵で埩号し、同じ倀になるかを確認したす。合臎すればそれはサヌバ A からの通信であり、通信内容は途䞭で改竄されおいないずいうこずを意味したす。

筆跡鑑定のように埌から人を特定するこずができるので『デゞタル眲名 (Digital-Signature)』ず呌ばれおいたす。

最近ではビットコむンの multi-sig が話題になりたしたが、これは、ビットコむンを䜿う際に、耇数人 (䟋えば倫婊) による䞊蚘デゞタル眲名のサむンが必芁ずなる、デゞタル眲名の応甚䟋です。

共通鍵暗号方匏ず公開鍵暗号方匏の比范 メリット・デメリット

共通鍵暗号方匏の代衚栌 AES ず公開鍵暗号方匏の代衚栌 RSA を比范したす。

 比范項目AES 共通鍵暗号方匏RSA 公開鍵暗号方匏
暗号・埩号速床 (蚈算負荷)高速 (䜎負荷)䜎速 (高負荷)
鍵をセットするタむミング通信開始より前に共有通信開始時に公開鍵を送付
クラむアント数Nのずきの
鍵の必芁数
2NN+1
2030幎以降でも䜿える匷床
のbit数 (セキュリティ匷床)
256bit3072bit

䞀番身近な具䜓䟋 https (SSL/TLS) ぞの応甚

https (SSL/TLS) では通信の暗号化自䜓は共通鍵暗号方匏を䜿いたすが、その共通鍵の元ネタの亀換には RSA ずは異なる公開鍵暗号方匏が䜿われたす。具䜓的には『DH (Diffie Hellman) 鍵亀換』が利甚されたす。

DH では䞊で説明しおきたものずは異なるタむプの公開鍵 (DH 公開鍵) を䜿いたす。この DH 公開鍵はサヌバずクラむアントでそれぞれ異なるのですが、この 2 ぀の公開鍵を合䜓させお共通鍵を生成したす。

ですが、DH には認蚌機胜がなく、成り枈たしに匱いため、RSA 公開鍵暗号方匏による認蚌を行いながら共通鍵の亀換を行いたす。

昔は共通鍵の元ネタを公開鍵だけで暗号化しお送る方匏も遞べたしたが、最近はセキュリティ䞊の理由から䜿われないようになっおいたす。公開鍵を䜿っお共通鍵の元ネタを亀換するず、前方秘匿性が無くなるためです。

なので https (SSL/TLS) における RSA 公開鍵 (DH 公開鍵ではなく今たで説明しおきた公開鍵暗号方匏) は『認蚌』の甚途のみに䜿われたす。

具䜓的にはクラむアントは以䞋 3 ぀を確認したす。

  1. デゞタル蚌明曞の信頌チェヌンの最䞊䜍 (ルヌト蚌明曞) が「信頌されたルヌト蚌明機関」に登録されおいるか(デゞタル蚌明曞自䜓が信頌できるものか)
  2. 眲名を公開鍵で埩号したものず、蚌明曞のハッシュ蚈算結果が同じになるか(蚌明曞自䜓が改竄されおいないか)
  3. アクセス先 URL のドメむン名ずデゞタル蚌明曞の SANs (サブゞェクト代替名) は䞀臎するか(※1)
  4. サヌバの秘密鍵によりデゞタル眲名された「DH 公開鍵 (SV)」を、RSA 公開鍵で怜蚌できるか(サヌバは RSA 秘密鍵を持っおいるか)

(※1) 以前は「コモンネヌム (CN)」が䞀臎するかどうかを芋るこずがありたしたが、最近では SANs のみを確認する傟向にありたす。

このように公開鍵方匏ず共通鍵方匏を䞡甚するこずで、お互いのメリットをフルに掻かしおいるのです。

䟋ずしお Web サヌバぞの https アクセスを考えたす。

Web サヌバは『RSA 秘密鍵』ず『RSA 公開鍵付き蚌明曞 (デゞタル蚌明曞、より䞀般的にはサヌバ蚌明曞)』を持ち、クラむアントはサヌバぞのアクセス時にサヌバから RSA 公開鍵付き蚌明曞を提瀺されたす。

RSA 公開鍵付き蚌明曞は『蚌明曞本䜓』ず『眲名』に明確に分かれおおり、蚌明曞本䜓には公開鍵が内包されおいたす。䞀方、眲名は、蚌明曞本䜓をハッシュ化し、秘密鍵で暗号化したものです。

たた、蚌明曞本䜓には『サブゞェクト代替名』ずいうサヌバぞアクセスする際の URL のドメむン名が曞かれおいたす。䟋えば www.yahoo.co.jp の Webサヌバなら、サブゞェクト代替名も www.yahoo.co.jp になりたす。

なお、https プロトコルのシヌケンスは以䞋の通りです。

  1. クラむアントがサヌバぞ https アクセス、その際、自身が䜿える暗号方匏を通知
  2. サヌバは最適な暗号方匏を返信しらさらに眲名付き蚌明曞をクラむアントぞ提瀺
  3. クラむアントはルヌト蚌明曞の怜蚌、蚌明曞の改竄有無、アクセス URL のドメむン名ずSANs (サブゞェクト代替名) の合吊を確認
  4. ‎問題なければ、クラむアントずサヌバ間で DH 公開鍵方匏により、共通鍵の玠を共有、䜵せおサヌバからは RSA 秘密鍵による眲名をクラむアントぞ送付 (DH は成り枈たしに匱いためデゞタル眲名で盞手を認蚌する)
  5. クラむアントず‎サヌバはそれぞれ共通鍵の玠から共通鍵を生成
  6. 共通鍵で‎暗号化通信開始

たた、ケヌスずしおは少ないですが、SSL/TLS にはオプションで、クラむアントの認蚌を行うこずもできたす。

【図解】クラむアント蚌明曞(https,eap-tls)の仕組み ~シヌケンス,クラむアント認蚌,メリット~
TLSにおけるクラむアント認蚌ずは TLS の芏栌ずしおは、サヌバの認蚌は必須...

その他の有名な䜿甚䟋 SSH ぞの応甚

SSH を䜿うための事前準備ずしお、サヌバ偎ではたず最初に RSA 等の秘密鍵/公開鍵のペアを生成する必芁がありたす。ここでは䟋ずしお RSA 秘密鍵/公開鍵を䜿うこずずしたす。

実際に SSH クラむアントからアクセスを受けた堎合、たずは DH 鍵亀換により共通鍵を共有し、以降の通信を党お暗号化した䞊で、デゞタル眲名による認蚌を行いたす。

なお、共通鍵は時間経過ずずもに別の鍵に倉えおいきたす。

SSH サヌバの認蚌ホスト認蚌

SSH クラむアントはクラむアント偎の DH 公開鍵を送信したす。それを受けおサヌバはサヌバ偎の DH 公開鍵を送信したすが、同時に『RSA 公開鍵』、『RSA 秘密鍵による眲名』も送信したす。

SSH クラむアントは SSH サヌバからの眲名を RSA 公開鍵で怜蚌し、盞手が正しい通信盞手だず認蚌するのです。これがホスト認蚌です。

なお、SSH クラむアントは、それが初回アクセスであれば、SSH サヌバの IP アドレスず玐付けお、その RSA 公開鍵をむンストヌルしたす。TeraTerm の堎合、以䞋のような画面が衚瀺されたす。"Continue" を抌䞋するずクラむアントに RSA 公開鍵がむンストヌルされたす。

次回以降、同じ IP ぞのアクセス時に、提瀺される公開鍵が倉わるず、譊告を出したす。単にサヌバを曎改した堎合は問題無いですが、身に芚えが無い堎合、成りすたしの可胜性があるためです (その埌の ID パスワヌド入力が挏掩し、正芏のサヌバに䞍正ログむンされる可胜性がある)。

䟋えば TeraTerm だず以䞋のような譊告画面が出たす。本圓に鍵を倉えおいるのであれば "既存の鍵を,新しい鍵で䞊曞きする" にチェックを入れ、"続行" を抌䞋し、鍵を眮き換えたす。

SSH クラむアントの認蚌

ホスト認蚌が終わった埌は逆に、SSH サヌバが SSH クラむアントを認蚌したす。これには倧きく 2 ぀のやり方がありたす。

1 ぀は ID パスワヌド認蚌、もう 1 ぀は公開鍵認蚌です。

SSH クラむアントの ID パスワヌド認蚌

前述の通り、SSH ではたず鍵亀換により共通鍵での通信暗号化が為されたす。なので SSH クラむアントの ID パスワヌド認蚌は、共通鍵で暗号化された状態でサヌバぞ送付されたす。サヌバはやはり共通鍵でその情報を埩号し、ID パスワヌドが正しいかどうかを確認したす。

SSH クラむアントの公開鍵認蚌

SSH クラむアントの公開鍵認蚌においおは、ID パスワヌドを䜿わず、クラむアントの公開鍵による認蚌を行いたす。

この方匏を䜿うためには、SSH クラむアント偎でも事前に RSA 等の公開鍵/秘密鍵のペアを生成し、公開鍵を SSH サヌバぞむンストヌルする必芁がありたす。

䟋えば user-a ずいうナヌザが SSH アクセスするためには、サヌバ偎の "/home/user-a/.ssh/authorized_keys" に公開鍵情報を曞き蟌んでおきたす。

あずは SSH クラむアントが『クラむアント偎の RSA 秘密鍵による眲名』をサヌバぞ送信するだけです。サヌバ偎では RSA 公開鍵を前述の authorized_keys に保有しおいたすので、これを䜿っお眲名の怜蚌を行いたす。この怜蚌に成功すれば SSH クラむアントが正しい (正しい RSA 秘密鍵を持っおいる) ず刀断したす。

秘密鍵のセキュリティ、パスフレヌズの必芁性

秘密鍵はずおも重芁なものであるがゆえに、メヌル添付等を含め、安易に耇補すべきではありたせんし、保護すべきです。Windows 等のいく぀かの゜フトりェアでは秘密鍵を゚クスポヌトできないような保護蚭定がありたす。

たた、OpenSSL コマンドや ssh-keygen コマンド等で鍵ペアを䜜成する際、秘密鍵にパスフレヌズを付けお保護するこずもできたす。

このパスフレヌズによる保護は、もし秘密鍵の利甚タむミングが手動実行時のみであれば、利甚のたびにパスフレヌズを入力すればそれで問題ありたせん。

ですが䟋えば Apache の https 甚秘密鍵をパスフレヌズで保護しおいる環境においお、Web サヌバが予期せず再起動しおしたった堎合はパスフレヌズの入力を求められ、手動で打ち蟌たないず httpd が起動したせん。

なので自動で秘密鍵が利甚されるこずを期埅する環境においおは、パスフレヌズを蚭定しおはいけいたせん。

䞀方、人間がサヌバ等の管理のために SSH 接続で秘密鍵を䜿う堎合は、あった方がセキュリティは高くなりたす。

䞀芋同じものずも思われがちですが、これはニ芁玠認蚌の考え方では、異なるものです。二芁玠認蚌では、認蚌の芁玠ずしお『䜕を知っおいる』『䜕を持っおいる』『䜕者なのか』ずいった皮類の䞭から異なる 2 皮類の芁玠に合栌するこずで認蚌成功にする、ずいう考え方をしたす。(同じ芁玠の䞭で 2 回認蚌するものを 2 段階認蚌ず蚀いたす)

パスフレヌズは人間が頭の䞭で芚えおおくのが前提なので『䜕を知っおるか』に該圓したす。䞀方、秘密鍵の内容は人間が芚えきれるものではなく、『䜕を持っおいるか』に圓たりたす。(具䜓的には秘密鍵のファむルそのもの)

このように、パスフレヌズを蚭定した秘密鍵を䜿うこずで、二芁玠認蚌を実珟しおいるのです。

※ちなみに、『䜕者なのか』は䞻に静脈認蚌や網膜認蚌等の生䜓認蚌のこずです。

コメント

  1. angel より:

    色々調べられたり考えられたりしたのだろうずは思いたすが、基本的なずころが間違いだらけです。詳しく曞くならちゃんず裏をずる、分かっおない郚分は無理に詳しく曞かない、䜕はずもあれ基本を抌さえるのが倧事だず思いたす。

    • nesuke より:

      > angel さん
      コメントありがずうございたす。私も党おの発蚀、蚘述で正しいこずを蚀っおいる぀もりはないです。それはangelさんも同じかず思いたすが、間違っおいるものはできる限りで盎したいず思っおいたす。

      なので、ぜひ具䜓的な間違いの箇所を教えお頂けないでしょうか。

      宜しくお願いしたす。

      • angel より:

        「正しい」ずいう保蚌を完党に行うのはそれは難しいでしょうが、それでも劥圓性をどのように担保するのかは曞き手ずしお考えなければいけないず思いたす。少なくずも「どこかでそう曞いおあったから」は党くあおになりたせん。
        では、ざっず芋圓たる点に぀いおコメントしたす。
        —
        ○公開鍵・秘密鍵でできるこず 暗号化ずデゞタル眲名
        * 逆に、秘密鍵を䜿っお暗号化するず、公開鍵でのみ埩号できたす。
        問題点: そんな事実はない
        備考: たず、公開鍵暗号の「暗号化」ず「眲名」は別技術。
        RSAに限っおは「暗号化」「眲名」に䞡甚できるずいう特殊性があり、そこから生たれたよくある誀解。

        ○特定のサヌバ A から任意のクラむアントぞの通信の完党性・真正性確保
        * その通信内容のハッシュ倀を秘密鍵で暗号化したデヌタ
        問題点: 䞊の間違いの延長で同様に間違い
        備考: 「眲名」の仕組みを詳しく説明するのには数孊が必須。
        なおか぀方匏によっお蚈算内容は様々なので、䞀般向けにはむしろ螏み蟌むべきではない。
        「眲名」「怜蚌」で十分だし、その意味を抌さえるずいう基本を確かにする方が倧事。

        ○共通鍵暗号方匏ず公開鍵暗号方匏の比范 メリット・デメリット
        この衚自䜓が埮劙
        メリット・デメリットずいうより、向き・䞍向きに応じお
        色々䜿い分けされおる、くらいのこずしか蚀えないず思う

        ○䞀番身近な具䜓䟋 https (SSL/TLS) ぞの応甚
        * その共通鍵の元ネタ (プレマスタヌシヌクレット) は公開鍵暗号方匏が䜿われたす。
        気になる点: 「プレマスタヌシヌクレット」は TLS1.2たでの名前で、TLS1.3からは
        シェアヌドシヌクレットなので、補足を入れるなり詳しい呌び名を省くなり工倫がほしい

        * 具䜓的には『DH (Diffie Hellman) 鍵亀換』が利甚されたす。
        問題点: 今時ECDHのこずも蚀おうよ

        * ですが、DH には認蚌機胜がなく、成り枈たしに匱いため、
        気になる点: 鍵亀換・認蚌を圹割分担しおるだけなので、この説明はちょっずネガティブに穿っお芋える

        * RSA 公開鍵 (DH 公開鍵ではなく今たで説明しおきた公開鍵暗号方匏) は『認蚌』の甚途のみに䜿われたす。
        良い点: 「認蚌」をちゃんず蚀葉にしおる説明は少ないので良いず思う。
        問題点: ただ、その認蚌が䜕を指しおいるか説明がない。あず、「眲名」であるこずの明蚘がほしい
        図䞭の「☆サヌバ認蚌」だけだず50点、これは蚌明曞の怜蚌にすぎないため

        * 図䞭「DiffieHellman鍵亀換」
        問題点: そんな凊理はしおいない。ずいうかDH秘密鍵はどこいった

        * 図䞭「共通鍵暗号方匏」
        気になる点: MAC/AEAD による改ざん怜知の話も出しおおきたい

        * 蚌明曞本䜓には『コモンネヌム』ずいうサヌバぞアクセスする際の URL 名が曞かれおいたす。
        問題点: 「コモンネヌム」ではなく「SANs」、URL名ではなく「ドメむン名」
        備考: ドメむン名確認においお、コモンネヌムはSANsがない堎合の予備的なもの

        * クラむアントは眲名付き蚌明曞を受け取るず、蚌明曞の発行元 (ルヌト) が信頌できるルヌト蚌明曞かどうかの確認、
        問題点: 䞭間認蚌局の考慮がないので、衚珟を芋盎した方が良い

        * ④問題なければ、クラむアントずサヌバ間で DH 公開鍵方匏により、 (略)
        良い点: ここの蚘述自䜓は特に間違っおいるずはいえないので良いず思う。
        備考: ただ、そこたでの蚘述や図に霟霬があるので、この文面の内容を明確に把握できおないのではないか。

        ○その他の有名な䜿甚䟋 SSH ぞの応甚
        * 以降の通信は (公開鍵の送付も含め) 党おこの共通鍵による暗号化を行った䞊で行いたす。これにより公開鍵の改竄を防ぐこずができたす。
        良い点: 鍵亀換埌の通信が暗号化されおいるのを挙げるのは良いず思う
        問題点: 「公開鍵の改ざんを防ぐ」は特に意味がないのでミスリヌディング。なにか誀解があるのではないか。

        ○SSH サヌバの認蚌ホスト認蚌
        * 共通鍵を亀換埌、サヌバからクラむアントぞサヌバの公開鍵が提瀺されたす。
        問題点: 鍵亀換ず公開鍵の提瀺は同時なので ( プロセス自䜓が䞀䜓化しおるので )、そのような順序関係はない

        * そしおクラむアントはある適圓な数を公開鍵で暗号化し、それをサヌバに送信したす。(略)これがSSHサヌバの認蚌です。
        問題点: そのような事実はない。ずいうか䜿っおるのは「眲名」なのだから暗号化は関係ない。

        ○SSH クラむアントの ID パスワヌド認蚌
        * SSH クラむアントの ID パスワヌド認蚌においおは、ID パスワヌド情報を共通鍵で暗号化しおサヌバぞ送付したす。
        気になる点: ID・パスワヌドを暗号化、ずいうよりも、鍵亀換成立埌で通信が暗号化されおいるから
        ID・パスワヌドも保護される、が劥圓。殊曎にID・パスワヌドを狙っお暗号化しおいるようにも読める

        ○SSH クラむアントの公開鍵認蚌
        * 䟋えば “/home/user-a/.ssh/known_hosts” に公開鍵情報を曞き蟌んでおきたす。
        問題点: 䞀般には authorized_keys ファむル。known_hosts は圹割が違う

        * あずはホスト認蚌の逆を行いたす。
        問題点: ホスト認蚌の話ず同様、そのような事実はない
        —

        この蚘事に関係する話は、以䞋を参考にどうぞ
        * 2぀の公開鍵暗号
        https://qiita.com/angel_p_57/items/897bf94160be8d637585
        * SSL/TLSの基本
        https://qiita.com/angel_p_57/items/446130934b425d90f89d
        * SSHの公開鍵認蚌における良くある誀解の話
        https://qiita.com/angel_p_57/items/2e3f3f8661de32a0d432

        • nesuke より:

          angel さん
          コメントありがずうございたす。正盎いきなり喧嘩腰で䞍愉快だなぁず思っおいたしたが、ご指摘に関しおは参考になりたした。ありがずうございたす。

          ご指摘の 17 点のうち、2 点 (SSHの認蚌) に぀いおは確かに裏取りが甘かったです。ここに関しおは私の理解䞍足だったので修正したした。

          1 点に぀いおは文章を修正したが図の修正が間に合っおなかったものがありたす。こちらに぀いおも修正したした。

          1 点は angel さんの認識違いではず思う箇所がありたした。

          1 点は埮劙だずいうコメントですが、特段埮劙だずは思いたせんでした。(理論ず実装をごっちゃにしおいる節が芋られたした)

          4 点に぀いおは、明らかな間違いであったり、説明を修正した方がよい郚分がありたしたが、基本がどうずいうレベルの話ではなく、些现な点だず、個人的には思っおいたす。

          残り 8 点含む党䜓的な話ずしお、ご指摘は䞻にスタンスの違いだず思っおいたす。

          スタンスずいうのは具䜓的には、angelさんの説明が「分かり易さを犠牲にしおも、正しい情報を曞くべき」ずいうスタンスだず掚枬したすが、私は「倚少は正しさを犠牲にしおでも、たずは読む人に腹萜ちさせるのが優先」ずいうスタンスです。

          正しさずいうのは䞻に『现かいずころを党郚曞くかどうか』です。䟋えばこの蚘事ではDHの説明だけしかしおいたせんので、それゆえそれしか方法が無いようにも芋えるからデタラメだずいう䞻匵は理解はできたすが、秘密鍵初心者にDHずECDHの違いを説明しおも分かるわけないんじゃないずいう理由で省いおたりしたす。

          正しさを犠牲にするこずにより倧郚分の人が間違った知識で技術者ずしお䞍利益を被るのであれば本意ではありたせんが、そのような䞍利益よりも理解の助けずなり実務に圹立぀利益を考えるず、私はこのスタンスで蚘事を䜜りたいず思っおいたす。

          本蚘事を読んだ人がステップアップしおより现かなものを孊んでいき、「ああ、あのサむトの説明は少し違うな」ず思われるこずもあるでしょうが、私ずしおはそれでもこのサむトの圹割は果たしおいる、ず考えおいたす。

          そんな前提で、頂いたコメントに぀いお返信させお頂きたす。

          >○公開鍵・秘密鍵でできるこず 暗号化ずデゞタル眲名
          >* 逆に、秘密鍵を䜿っお暗号化するず、公開鍵でのみ埩号できたす。
          >問題点: そんな事実はない
          >備考: たず、公開鍵暗号の「暗号化」ず「眲名」は別技術。
          >RSAに限っおは「暗号化」「眲名」に䞡甚できるずいう特殊性があり、そこから生たれた
          >よくある誀解。

          そんな事実は無い、ずいうよりは「RSA」のこずを蚀っおいる、ずいう前提が抜けおいるだけだず思いたす。远加したした。

          >○特定のサヌバ A から任意のクラむアントぞの通信の完党性・真正性確保
          >* その通信内容のハッシュ倀を秘密鍵で暗号化したデヌタ
          >問題点: 䞊の間違いの延長で同様に間違い
          >備考: 「眲名」の仕組みを詳しく説明するのには数孊が必須。
          >なおか぀方匏によっお蚈算内容は様々なので、䞀般向けにはむしろ螏み蟌むべきではな
          >い。
          >「眲名」「怜蚌」で十分だし、その意味を抌さえるずいう基本を確かにする方が倧事。

          問題点に぀いおは䞊蚘ず同じですが、「䞀般向けにはむしろ螏み蟌むべきではない。」や「にする方が倧事。」に぀いおはスタンスの違いです。「すべきでない」ずいうのは䞻芳の抌し付けに聞こえたす。(客芳的な論拠を付けられるなら別ですが)

          >○共通鍵暗号方匏ず公開鍵暗号方匏の比范 メリット・デメリット
          >この衚自䜓が埮劙
          >メリット・デメリットずいうより、向き・䞍向きに応じお
          >色々䜿い分けされおる、くらいのこずしか蚀えないず思う

          ここでは珟実䞖界での実装の話をしおいるわけではありたせん。
          方匏のメリット・デメリットであり、その結果、実装で䜿い分けがされおいるわけですよね。

          >○䞀番身近な具䜓䟋 https (SSL/TLS) ぞの応甚
          >* その共通鍵の元ネタ (プレマスタヌシヌクレット) は公開鍵暗号方匏が䜿われたす。
          >気になる点: 「プレマスタヌシヌクレット」は TLS1.2たでの名前で、TLS1.3からは
          >シェアヌドシヌクレットなので、補足を入れるなり詳しい呌び名を省くなり工倫がほし
          >い

          これは知りたせんでした。たしかにtls 1.3 の RFC をさらっず怜玢した感じでは draft の途䞭から
          premasterずいうワヌドが出おこなくなりたした。ずりあえず消しずきたす。(しかし本質からは倖れた指摘で、基本がなっおいるかどうか、ずは違う話かず。)

          >* 具䜓的には『DH (Diffie Hellman) 鍵亀換』が利甚されたす。
          >問題点: 今時ECDHのこずも蚀おうよ

          先ほど申した通り、スタンスの違いです。「この蚘事で䜕を説明したいか」ずいう芳点で、省いおたす。

          この説明を入れるならそれこそ数孊的な話が必芁になり、私が説明したい内容から焊点ががやけたす。䞭途半端な説明をするよりは曞かない方がいいず刀断しおいたす。数孊に匷い方がこのような䞻匵をされるのは䜕ずなくお気持ちは分かりたすが。

          >* ですが、DH には認蚌機胜がなく、成り枈たしに匱いため、
          >気になる点: 鍵亀換・認蚌を圹割分担しおるだけなので、この説明はちょっずネガティ
          >ブに穿っお芋える

          うヌん、仰っおいるこずは分かりたすが、、この説明のほうが私は理解が進むず思いたす。
          「これこれこういう圹割分担をしおいたす」ずさらっず説明しおしたうず「DHは成りすたしに匱い」
          ずいう事実が印象に残らないず思いたすので。

          >* RSA 公開鍵 (DH 公開鍵ではなく今たで説明しおきた公開鍵暗号方匏) は『認蚌』の甚
          >途のみに䜿われたす。
          >良い点: 「認蚌」をちゃんず蚀葉にしおる説明は少ないので良いず思う。
          >問題点: ただ、その認蚌が䜕を指しおいるか説明がない。あず、「眲名」であるこずの
          >明蚘がほしい
          >図䞭の「☆サヌバ認蚌」だけだず50点、これは蚌明曞の怜蚌にすぎないため

          この次の図で説明しおいたす。分かりづらかったので文章を箇条曞きにしお分かりやすく補足を぀けたした。

          >* 図䞭「DiffieHellman鍵亀換」
          >問題点: そんな凊理はしおいない。ずいうかDH秘密鍵はどこいった

          仰る通りです。修正したした。

          >* 図䞭「共通鍵暗号方匏」
          >気になる点: MAC/AEAD による改ざん怜知の話も出しおおきたい

          確かにAEADの話は入れたいのですが、これも焊点ががやけるのでここは割愛。

          >* 蚌明曞本䜓には『コモンネヌム』ずいうサヌバぞアクセスする際の URL 名が曞かれお
          >いたす。
          >問題点: 「コモンネヌム」ではなく「SANs」、URL名ではなく「ドメむン名」
          >備考: ドメむン名確認においお、コモンネヌムはSANsがない堎合の予備的なもの

          これは違うのではそもそもSANsっおサブゞェクト”代替”名ですよね
          コモンネヌム以倖にも代替で䜿える名前なのでは(コモンネヌムはサブゞェクト内にある)
          しかも拡匵フィヌルドですし、本来的にはコモンネヌムだず思いたすが。

          なお、本蚘事のメむンは「秘密鍵・公開鍵」ですので、httpsに特化しお色々ず
          詳しい説明をする぀もりはありたせん。他の蚘事でこのあたりは蚘茉しおいたす。

          >* クラむアントは眲名付き蚌明曞を受け取るず、蚌明曞の発行元 (ルヌト) が信頌でき
          >るルヌト蚌明曞かどうかの確認、
          >問題点: 䞭間認蚌局の考慮がないので、衚珟を芋盎した方が良い

          これも焊点ががやけるので割愛。

          >* ④問題なければ、クラむアントずサヌバ間で DH 公開鍵方匏により、 (略)
          >良い点: ここの蚘述自䜓は特に間違っおいるずはいえないので良いず思う。
          >備考: ただ、そこたでの蚘述や図に霟霬があるので、この文面の内容を明確に把握でき
          >おないのではないか。

          図の修正が远い぀いおいなかったので修正したした。

          >○その他の有名な䜿甚䟋 SSH ぞの応甚
          >* 以降の通信は (公開鍵の送付も含め) 党おこの共通鍵による暗号化を行った䞊で行い
          >たす。これにより公開鍵の改竄を防ぐこずができたす。
          >良い点: 鍵亀換埌の通信が暗号化されおいるのを挙げるのは良いず思う
          >問題点: 「公開鍵の改ざんを防ぐ」は特に意味がないのでミスリヌディング。なにか誀
          >解があるのではないか。

          改めお芋おみお、自分でも意味わからなかったです。曞き盎したした。

          >○SSH サヌバの認蚌ホスト認蚌
          >* 共通鍵を亀換埌、サヌバからクラむアントぞサヌバの公開鍵が提瀺されたす。
          >問題点: 鍵亀換ず公開鍵の提瀺は同時なので ( プロセス自䜓が䞀䜓化しおるので )、そ
          >のような順序関係はない
          >
          >* そしおクラむアントはある適圓な数を公開鍵で暗号化し、それをサヌバに送信したす
          >。(略)これがSSHサヌバの認蚌です。
          >問題点: そのような事実はない。ずいうか䜿っおるのは「眲名」なのだから暗号化は関
          >係ない。

          これはご指摘の通り、裏取りを取らずに蚘茉しおいたした。確認し、修正したした。

          >○SSH クラむアントの ID パスワヌド認蚌
          >* SSH クラむアントの ID パスワヌド認蚌においおは、ID パスワヌド情報を共通鍵で暗
          >号化しおサヌバぞ送付したす。
          >気になる点: ID・パスワヌドを暗号化、ずいうよりも、鍵亀換成立埌で通信が暗号化さ
          >れおいるから
          >ID・パスワヌドも保護される、が劥圓。殊曎にID・パスワヌドを狙っお暗号化しおいる
          >ようにも読める

          SSHの䞻機胜から考えお、そんな解釈したすず蚀いたいですが䞀理あるので修正したした。

          >○SSH クラむアントの公開鍵認蚌
          >* 䟋えば “/home/user-a/.ssh/known_hosts” に公開鍵情報を曞き蟌んでおきたす。
          >問題点: 䞀般には authorized_keys ファむル。known_hosts は圹割が違う

          凡ミスです。修正したした。これも基本がどうずいう話ではないかず。

          >* あずはホスト認蚌の逆を行いたす。
          >問題点: ホスト認蚌の話ず同様、そのような事実はない

          これも確認し、修正したした。

  2. 通りすがり より:

    通りすがりの基本情報技術者怜定の受隓者ですが、公開鍵ず秘密鍵の違いがよく分かりたした。
    情報を発信する方にはその発信内容に察する批刀をする人がいるのが぀きものですが、圹に立っおいるず思っおいる方もリヌドオンリヌで倧勢いたすので私含む、お気になさらず発信を続けお欲しいず思いたす。

    • nesuke より:

      通りすがりさん、お気遣いありがずうございたすずおも励みになりたす。

      初めおのこずだったのでどう察凊したものか、ずいう感じでしたが、このサむトも認知床が䞊がっおきたのだな、勲章みたいなものだな、ず捉えるこずにしたした。

      今埌もぜひごひいきに

  3. あああああ より:

    こんにちは。
    「䞀番身近な具䜓䟋 https (SSL/TLS) ぞの応甚」の図におご質問させおください。

    ①他サむトや参考曞では、この図で蚀うDH鍵亀換プロセスにおいおは、
     CLからSVにpremaster secret(PMS)をSVのRSA公開鍵によっお暗号化し、SV偎でPMSを耇合した埌
     SV、CLそれぞれでPMSからMS(共通が技)を生成する旚が蚘茉されおいたす。
     この図では「DH公開鍵(CL)」がPMSに該圓するず理解したのですが、
     その堎合䞊蚘説明ず異なり、SVのRSA公開鍵で暗号化されおSVに送られおいないのは䜕故でしょうか。

    ②SV、CLそれぞれにおいお「DH公開鍵(SV,CL)ずDH秘密鍵から、共通鍵を生成」ずありたすが、
     DH秘密鍵ずはSV、CLそれぞれのDH秘密鍵のこずでしょうか
     そうであれば、SVずCLで同じ共通鍵が䜜成される仕組みが理解できたせんでしたので、
     解説いただけるず助かりたす。おそらく私の理解力が足りおいないため

    よろしくお願いいたしたす。

    • nesuke より:

      あああああさん
      コメントありがずうございたす。

      ①に぀いおですが、鍵亀換プロセスでRSA公開鍵は珟圚ほが䜿われおいたせん。珟圚httpsで実装されおいるのはDH公開鍵です。(TLSバヌゞョン1.3ではRSA方匏は廃止になりたした。)
      「RSA公開鍵による共通鍵生成」は、前方秘匿性が無く、倧きなセキュリティリスクを䌎うこずが認知されたからです。あるサヌバの秘密鍵が挏掩した際、過去のhttps通信を「党お」埩号出来おしたうのです。(このあたりはスノヌデン事件ず関わりがありたす。)

      私もずっず気になっおはいるのですが、他サむトや参考曞では叀い情報がそのたた䜿われおいるようですね。

      ②に぀いおは、ご認識の通り、SV/CLそれぞれのDH秘密鍵のこずです。
      このあたりは Diffie-Hellman で怜玢すれば色々ず情報が出おくるず思いたす。私自身が分かり易い説明ができなかったので割愛しおいるのですが、、そのうち解説蚘事にしおみたいず思いたす。

      • あああああ より:

        ご返信ありがずうございたす。

        ①本文䞭にも、鍵亀換ずしおRSAを䜿甚するのは危険な旚しっかり蚘茉されおありたしたね。倧倉倱瀌いたしたした。
         ただ、本サむトの別蚘事「【図解】よく分かるデゞタル蚌明曞(SSL蚌明曞)の仕組み 」
         䞭の「デゞタル(SSL)蚌明曞ずは」箇所のシヌケンス図におおも、RSAずは曞かれおいないものの
         クラむアント偎から”共通鍵の元ネタ”をサヌバの公開鍵で暗号化しおいるように芋えたす。

         そもそも、DH方匏では、RSA方匏ずは異なり、クラむアントからサヌバに”共通鍵の元ネタ”(本蚘事の図でいう”DH公開鍵(CL)”)を暗号化しお送る必芁性が無くなった、ずいう解釈でよろしいのでしょうか・・

        ②私の方でも調べおみたす。解説蚘事のご怜蚎ありがずうございたす

        • nesuke より:

          あああああさん

          「デゞタル蚌明曞の仕組み」に぀いおですが、図が叀い方匏の説明になっおおり、修正しようず思いながらも攟眮しおおりたした。。。この機䌚を頂き、修正したした。。

          > そもそも、DH方匏では、RSA方匏ずは異なり、クラむアントからサヌバに”共通鍵の元ネタ”(本蚘事の図でいう”DH公開鍵(CL)”)を暗号化しお送る必芁性が無くなった、ずいう解釈でよろしいのでしょうか・・

          はい。RSAずDHは根本的に方匏が違いたす。DHでは特定条件の互いに異なる公開鍵を送り合うこずで、呚りに知られずに共通鍵を生成するこずができたす。

タむトルずURLをコピヌしたした