情処対策に向けての公開鍵暗号

もうじき情報処理技術者試験ということで、勉強を進める中で「公開鍵暗号」につまる人もいるかと思いますが、なるべく簡単に説明するとどうなるかの試みをまとめました。 ※10/18 暗号化と署名の使われ方について追記
6
angel (as ㌵㌤の猫) @angel_p_57

さて、これ「公開鍵暗号」のことを、今だったらどう説明するだろう。 twitter.com/nknk_tayu/stat…

2019-10-02 03:22:04
angel (as ㌵㌤の猫) @angel_p_57

単純に言うと「特定の人だけできる処理と誰でもできる処理を分けるという『コンセプト』を実現した、色々なセキュリティ技術をまとめた呼び名」になるだろうか。

2019-10-02 03:22:47
angel (as ㌵㌤の猫) @angel_p_57

「色々な」だと実感し辛いけど、「処理を分ける」というのは現実世界でも既にある。 ちょうどいい例が「印鑑 (銀行印や実印)」で、はんこの持ち主しか印を押せないし、印影を知ってる人なら誰でも本物かどうかを判別できる。

2019-10-02 03:23:15
angel (as ㌵㌤の猫) @angel_p_57

で、処理を行う時に必要な、ちょっとした、だけども重要なデータを「鍵(キー)」と呼んでいる。印鑑の例だと、はんこや印影サンプルが該当する。 建物の鍵のような開け閉めをイメージすると誤解の元。日常使う「鍵」という言葉ですらもっと広い意味を持ってるから。

2019-10-02 03:24:02
angel (as ㌵㌤の猫) @angel_p_57

例えば自動車のキーって、ドアの開け閉めじゃなくてエンジン始動に使ったりもするし、「事件の鍵」だとか「キーマン」って使い方だと、事件の解決やプロジェクトの成功に必要な情報だったり人だったりを意味する。 開け閉めではとうていイメージしきれない。

2019-10-02 03:24:56

他に「鍵と鍵穴」で説明する例もあるけど、あまりお勧めできない。
一部の方式のイメージには合うものの、やっぱり「開け閉め」にイメージが固定されて、視野が狭くなってしまうから。

angel (as ㌵㌤の猫) @angel_p_57

話を戻して、「特定の人だけできる処理」用には、その人だけの「鍵」を使う。他の人には漏らさないので「秘密鍵」と呼ぶ。 「誰にでもできる処理」用には、一般に公開する「鍵」で、そのまま「公開鍵」と呼ぶ。

2019-10-02 03:25:26

普通に「鍵」というと秘密にするのが当然だったからこそ、一部の鍵を公開するという発想が斬新で ( 言うても40年も前の話だけど )、だからこそ「公開鍵暗号」という名前になったわけだ。

angel (as ㌵㌤の猫) @angel_p_57

「印鑑」で、はんこと印影が対になっているように、「秘密鍵」と「公開鍵」も対になっている。 ここで公開鍵から秘密鍵の内容がバレてしまうようだと分かれている意味がない。 現実のはんこの場合に偽造を防ぐのは難しいだろうけど、各種公開鍵暗号は数学的な知見で防いでいる。

2019-10-02 03:26:26

よく「素因数分解の計算が困難なことを利用」とか言われてるアレのこと。
他には「離散対数問題」も有名。「楕円曲線暗号」と言われる各種技術もやっぱり公開鍵暗号だけど、こちらも離散対数問題が関係する。

angel (as ㌵㌤の猫) @angel_p_57

さて「色々なセキュリティ技術」なので機能も様々なんだけど、その主なものは「署名」(電子署名/デジタル署名) 現実の例に挙げた印鑑をまさに電子的に実現した公開鍵暗号。

2019-10-02 03:26:51
angel (as ㌵㌤の猫) @angel_p_57

秘密鍵の持ち主しか作れないデータ「署名」が、押印のように同意や保証のための証拠に使われる。 他の人は公開鍵でそれが本物かどうかを「検証」できる。 ※機能面を重視して、秘密鍵・公開鍵を署名鍵・検証鍵と呼ぶことも。

2019-10-02 03:27:18
angel (as ㌵㌤の猫) @angel_p_57

もちろんその「保証」の対象になるデータがすり替わってしまうと困るので、「検証」には対象データに改ざんがないかを見る機能も含まれている。

2019-10-02 03:27:43
angel (as ㌵㌤の猫) @angel_p_57

「本人にしか署名が作れない」という特性を生かして、Webサイトが本物かどうか ( SSLのサーバ認証 )、ユーザが本物かどうか ( SSHの公開鍵認証やWebのFIDO/WebAuthn ) と言った認証への応用もある。

2019-10-02 03:28:14
angel (as ㌵㌤の猫) @angel_p_57

次に重要なのは「鍵交換」なんだけど、テスト対策/一般的な想像上の話的には「暗号化」の方が目立つんだろうな。 「暗号化」のことだけを指して「公開鍵暗号」という人も多いし。これは文脈で判断。

2019-10-02 03:28:39
angel (as ㌵㌤の猫) @angel_p_57

公開鍵暗号の「暗号化」は、特定の人にだけ元の内容が分かる ( 他の人には分からない ) ように機密データ ( 暗号文 ) を作り出す技術。

2019-10-02 03:29:03
angel (as ㌵㌤の猫) @angel_p_57

つまり「秘密鍵」を持った特定の人だけ「復号」して元の内容が分かる。「暗号化」で暗号文を作るのは「公開鍵」を受け取った人なら誰でもできる。

2019-10-02 03:29:42
angel (as ㌵㌤の猫) @angel_p_57

この機能が ( 実用とは離れて ) 目立つのは、暗号化・復号に同じ情報「共通鍵」が必要な「共通鍵暗号」と対比されやすいから。 ただ「共通鍵暗号」は「暗号化」だけの機能だけど「公開鍵暗号」は文脈によるものの「まとめた呼び名」なので、もっと広い範囲を含むことに注意。

2019-10-02 03:30:10
angel (as ㌵㌤の猫) @angel_p_57

ちなみに、世間一般的には「署名」の「署名(作成)・(署名)検証」処理と、「暗号化」の「暗号化・復号」処理をごっちゃにした説明が多いけど、そうすると高確率でこんがらがる。 なにせ別機能の話だから。

2019-10-02 03:30:43
angel (as ㌵㌤の猫) @angel_p_57

基本情報くらいなら取り敢えずこれくらいで良いのかな。ハイブリッド暗号まで要る…? 過去問だと署名の基本機能の話 fe-siken.com/s/kakomon/27_a… SSHの認証への応用 fe-siken.com/kakomon/29_aki… あたり。あ、答えはともかく解説はちょっとアレなので注意。

2019-10-02 03:31:37

そうは言っても、暗号化・復号と署名・検証がごっちゃになった説明は世の中多いわけで。そのことについて、他の方とのやり取りで補足。

しろ @xylo_nt

@angel_p_57 ありがとうございます、署名と暗号化が別々なのはわかりました ただ署名の作成ではハッシュ化→秘密鍵で暗号化という理解で大丈夫でしょうか?

2019-10-02 23:08:21
angel (as ㌵㌤の猫) @angel_p_57

@xylo_nt いえ、違います。目的も意義も違うのはもちろんのこと、処理内容も違います。つまり、( 一般に出まわっている説明なのですが ) 完全なデマです。 単純に「秘密鍵の持ち主でないと作れないデータを作る」だけです。

2019-10-02 23:13:59
angel (as ㌵㌤の猫) @angel_p_57

@xylo_nt ついでに言えば、公開鍵による「(署名)検証」も「復号」ではありませんし、「元のハッシュを作り出せることを確認する」という決まりもないです。署名データがホンモノかどうかを確認する手段は様々です。 ※1方式として「元のハッシュを作り出す」やり方があるのは事実ですが。

2019-10-02 23:18:16
angel (as ㌵㌤の猫) @angel_p_57

@xylo_nt もちろん、デマが生まれたのには理由があります。有名な方式であるRSAは、ほかの方式にない特徴として「暗号化・署名に両用できる」ものでして。 で、秘密鍵による「復号」「署名」の内部の処理が共通。言わば、「ハッシュを復号すると署名」この特殊事情がねじれて伝わった、という所です。

2019-10-02 23:38:25