最終更新日 2024年11月10日
この記事では、私が現場で実践している、公開鍵暗号方式の指導・解説手順を紹介します。
実際に後輩エンジニアや顧客、エンドユーザに説明している時と変わらないのでぜひ参考にしてみてください!!!
身近でよく使われているのに現場の若いエンジニアは共通鍵暗号方式をよくわかっていない?
共通鍵暗号方式は身近でとてもよく使用されています。
例えば、Zip ファイル作成の時やWi-Fiの通信(WPA2など)など、仕事で使用する時だけでなく、日常生活でも使われています。
しかし、ITに詳しくない一般の方だけでなく、現役エンジニアでもあまりよく知らない人が多いです。
X( Twitter )でも以下のような投稿がされており、共通鍵暗号方式についてよく分からない人が多いことが伺えます。
共通鍵暗号方式は身近ないろんなところで使われているので新たな発見に繋がる!
冒頭でも紹介しましたが、共通鍵暗号方式は身近なところで多々使われています。
そのため生活する上で、さまざまな場面で登場してきます。
その時、共通鍵暗号方式について知っていれば、「あっ、こんなところでも使われてるんだ!」と新たな発見になり毎日楽しくなります!
現場の後輩エンジニアに共通鍵暗号方式を教える際実践している指導手順
この記事では私が現場で実践している、若手エンジニアに共通鍵暗号方式について説明する際の指導手順を記載します。
私が共通鍵暗号方式について指導するときに説明している内容の全体像は以下の画像の通りです。
説明したり教えたりする前に、事前に上記のような感じで、どのように説明するか、説明内容の全体像を整理しておくとベターです。
なぜなら、事前に説明内容の構造を理解しておくことで、説明にスムーズに説明できるからです。
例えば、家の配置を説明する場合を考えてみましょう。
部屋や家具の配置をリストで覚えるよりも、実際にその家の間取り図を頭の中で思い浮かべる方が早く、正確に思い出せますよね。
視覚的に家の全体像が浮かんでくるため、「リビングの隣にキッチンがあって、その奥に寝室がある」という風に、配置や距離感がすぐに把握できます。
あとは、街中の道を覚える場合も同じです。
道順を「右に曲がって、次に左に曲がって…」と文章で思い出すより、地図や景色を思い浮かべる方が、交差点や建物の位置がすぐに思い出せます。
イメージとして覚えていることで、全体像を一瞬で頭に浮かべられるからです。
このように、視覚情報は一瞬で全体を把握できるため、文字よりも早く思い出せます。
これと同じような感じです。説明内容を、徐々にブレークダウンするような形で、話題ごとに整理すると、話の構造が頭に入ります。すると次に何を話せばいいか、頭に入れた構造を思い出すことで次に何を話すかスムーズに思い出すことができます。
テーマと説明の流れ
まず、初めにテーマ(何について説明するか)と説明の流れ(何をどのような順番で説明するか)をざっくり話しましょう!!
テーマと説明の流れを説明することで、聞き手はこれから説明される内容の全体像が分かるため、話の展開を予想しやすくなり、結果、説明内容を理解しやすくなります。
持久走とかでも時間無制限であとどのくらいで終わるのかわからない中ランニングし続けていると辛いですよね。説明を受ける時も今全体のどこの説明なのか、次はどんな説明をされるのか分からないと聞き手も辛いです。
私が説明するときは以下のように説明しています。
今回は「共通鍵暗号方式」について説明します。共通鍵暗号方式について理解してもらうために、5つの観点で説明します
まず1つ目に「共通鍵暗号方式はどんなものか」説明します。次に2つ目「実際に暗号化されるまでの流れ」を解説し、3つ目「実際に作成される鍵の数」や4つ目「アルゴリズム」、5つ目「身近な利用場面」についても具体的に解説していきます。
説明する際に以下のような形でスライドで示してあげるとより分かりやすいです!
概要の説明
まずはざっくりベースで共通鍵暗号方式の概要を説明しましょう!
最初はざっくり説明し、徐々に深い内容を説明する順番の方が、聞き手は負担なく理解できます。
最初から詳細情報を説明してしまうと、受け取る情報量が多く、聞き手に負担がかかってしまいます。
概要は以下の画像の赤枠部分です。
最初に概要を説明し、大枠を理解することで、脳はその後の詳細情報をどこに関連付けるかを把握しやすくなります。概要があると、新しい情報を既存の知識に結びつける「フレームワーク」ができ、理解がスムーズに進みます。
また、いきなり詳細な説明をすると、聞き手は受け取る情報量がとても多くなってしまいます。
複雑な内容を一度に理解するのは負担が大きいですが、段階的に深掘りすることで、少しずつ消化できるため負担が軽減されます。これにより、聞き手は集中力を保ちながら学べます。
概要を説明する際、何をどんな順番で軽く話しておくとなお良いです。
私はいつも以下のように説明しています。
まず、「共通鍵暗号方式」の概要について説明します。
概要は4つのステップで話します。一言で言うと何か、一般的にどんなものと言われているか、特徴、身近な具体例の4ステップです。
《一言で説明》
まずは一言で簡潔に説明しましょう。
この時はなるべく専門用語を使わないで表現することがポイントです。
聞き手がその専門用語を知らないと、よく分からないまま説明を聞き続け、理解で躓くきっかけになってしまうからです。
例えば、共通鍵暗号方式を、「エンドツーエンドで双方向通信をする時に同じ暗号鍵を使って通信を暗号化する方式です。」と表現した場合、「エンドツーエンド」という言葉の意味を知らないと「エンドツーエンドってなんだろう?」となり、理解できていない状態になってしまいます。
そのため、この段階で説明する時は、なるべく専門用語を使わずに、簡潔に説明できる内容にしましょう!
私はいつも以下のように説明しています。
「共通鍵暗号方式」は1つのカギでデータの暗号化と解読をして、安全に通信する方法です。
《概要》
次はもう少し情報を追加して説明しましょう。
基本情報を3つくらい説明するイメージです。
聞き手に少しずつ共通鍵暗号方式の情報をインプットして、徐々に理解を深めてもらいましょう。
私はいつも以下のように説明しています。
「共通鍵暗号方式」(対称鍵暗号とも呼ばれます)は、データの暗号化(情報を安全な形に変えること)と復号(暗号化された情報を元に戻すこと)に、同じ鍵(暗号化や復号に使う秘密のパスワードのようなもの)を使う方法です。
この鍵を、情報を送る人と受け取る人の両方が通信をする前に事前に共有し、その鍵を使用してデータを暗号化します。
ただし、共通鍵暗号方式には鍵の管理が大変という課題があります。
もしこの鍵が誰かに盗まれてしまうと、暗号化したメッセージが読まれてしまうからです。
このため、鍵を安全に共有し、他人に知られないようにすることがとても重要です。
《特徴》
概要で追加情報を説明したら、共通鍵暗号方式の特徴を説明しましょう。
他の暗号化方式と比較した時の違いを特徴として説明すると良いです。
比較することで、比較対象との違いが強調されます。これにより、説明の要点がわかりやすくなり、聞き手が「何が重要か」を認識しやすくなります。
私はいつも以下のような形で説明しています。
「共通鍵暗号方式」の特徴は3つほどあります。
1つ目が、「処理が速い」ということです。
暗号化の時はデータ(メッセージなど)を数値に変換し、その数値化したデータに対して、鍵(秘密にしておくパスワードのようなもの)を使って暗号化を行います。この鍵は、数値化したデータに特定の数学的な操作(例えば足し算、掛け算、または複雑な演算)を適用するために使います。この操作によって元のデータは見た目が全く違う暗号文(他の人には意味が分からないようにしたデータ)に変わります。共通鍵暗号方式は数学的な操作の処理が比較的シンプルなため、処理に必要な計算資源(CPUの使用率や時間など)が少なく、暗号化や復号が素早く行えます。そのため、大量のデータを扱うときにも効率的です。
2つ目が「鍵の共有」が必要ということです。
共通鍵暗号方式を使用するには、データを送る人と受け取る人が同じ鍵(共通鍵)を他の人に盗まれないように安全に共有する必要があります。この鍵を他の人に知られてしまうとメッセージが盗聴されてしまうためです。そのため、いかに鍵の共有を安全に行うかが重要になります。
3つ目に「鍵の管理」が大変ということです。
共通鍵が漏れてしまうと、その鍵で暗号化されたデータ(過去のメッセージも含めて)がすべて解読可能になるため、鍵の保管が重要になります。また、通信相手ごとに別々の鍵を用意する必要があるため、扱う鍵の数が増えると鍵の管理が大変になります。
《具体例》
次は具体例を挙げて説明しましょう!
実際に身近で共通鍵暗号方式が使われている例を挙げます。新しい情報を既存の知識や経験に関連付けることで、理解が深まります。
たとえば、「データのバックアップ」を説明するときに「重要な書類をコピーして別の場所に保管すること」と例えると、誰もが持っている経験を通じて理解が容易になりますね。
このように具体例を挙げると聞き手が理解しやすくなります。
私はいつも以下のような形で説明しています。
例えば、家で使うWi-Fiのパスワードも共通鍵の一例です。自分とWi-Fiルーターが同じパスワードを知っていて、そのパスワードを使ってデータを暗号化して通信することで、他の人がデータを盗聴しても、どのようなデータかわからないようにしています。
この暗号化は、インターネットを通じて送信されるすべての情報、たとえばウェブページの閲覧、アプリの利用、動画のストリーミングなどに適用されます。
Wi-Fiをスマホで使うとき以下のような画面でパスワードを入力しますね。厳密には少し違うのですが、このパスワードが共通鍵のようなイメージです。
暗号化の流れ
次は暗号化通信が行われるまでの実際の流れを説明しましょう!
プロトコルなど分かりにくい用語はなるべく身近なものに例えて説明すると聞き手は理解しやすいです。また、なんのためにそれを行なっているか、目的も説明に織り交ぜるとベストです!
暗号化の流れは、以下の画像の赤枠部分です。
以下で実際に私が説明の時に使っている例えや説明内容を伝授します。
《ステップ0 暗号化までの流れをざっくり説明》
まず、暗号化までの流れをざっくり説明しましょう。
暗号化までの流れを聞き手に押さえてもらい、理解しやすくするためです。ポイントは幾つのステップを踏むのか最初に明示することです。
これにより聞き手は話の大枠を理解して、この後話す内容を関連づけながら聞くことができます。すると今何の話をしているか分からないなど、迷子にならないで話を聞くことができます。
私はいつも以下のような形で説明しています。
通信は5つのステップを経て暗号化されます。
まず、1つ目に「鍵交換プロトコルの選択」、2つ目に「パラメータ(数字)の共有」、3つ目に「共通鍵作成の準備」、4つ目に「共通鍵作成」、ここまで完了すると暗号化通信が開始されます。
家でスマホにWi-Fiを繋ぐ時は、接続する時にパスワード入力しますよね。このパスワードを入力したあと、この5つのステップをスマホとWi-Fiルーターが行っています。
以下のような形で暗号化の流れに関するスライドを用意できるとなお良いです。
《ステップ1 鍵交換プロトコルの選択》
まず、共通鍵暗号方式では暗号化の鍵交換プロトコルを選択する必要がありますが、その内容を説明します。ポイントは何のために実施しているのかを明確に伝えることです。
今回で言うと、鍵交換プロトコルの選択は、「安全に秘密鍵を共有すること」ですので、その内容を伝えましょう。その際、プロトコルにより相手を認証できることも伝えられるとよいと思います。
理由は、ステップ2で交換するパラメータは他人に知られてもよいものですが、知られてもいい値をなぜ安全に共有する必要があるか矛盾しているように感じられるからです。
安全に交換するための手順をお互いに決めて、尚且つ相手を認証していることを説明しましょう。
このステップ1の説明時、私はいつも以下の内容で説明しています。
最初に、通信を行う両者(例えはAさんのスマホとWi-Fiルータ)が「鍵交換プロトコル」(共通鍵を安全に作るための方法)を選びます。
プロトコルの選択は、秘密鍵(暗号化されたデータを解読できる鍵)を安全に共有する手順を決めるために実施します。また、プロトコルを使用することで、サーバ証明書による認証(なりすましをしていないか確かめること)をし、本当にその相手と通信をして良いのか確かめることができます。
このプロトコルはいくつか選択可能ですが、両者で同じプロトコルを選ばないと通信できません。
例えると、合言葉のようなものです。秘密のメッセージをやりとりするために、あらかじめ「合言葉をどう決めるか」を話し合うようなものです。
《ステップ2 パラメータ(共通の数字)の共有》
次は、パラメータ(共通の数字)の共有について解説しましょう。
この時は、目的と共有するパラメータは誰が見て問題ないということをを明確に伝えましょう。
今回の場合は、共通鍵を作る材料(パラメータ)を共有してその材料をもとに共通鍵を作成することが目的です。この時の通信は、暗号化されていないので盗聴される可能性がありますが、他人に見られても問題ないのであれば安心ですよね。
私はいつも以下のように説明しています。
次に、通信を行う両者は「パラメータ」と呼ばれる共通の数字をお互いに共有します。この共通の数字は、後で鍵を作る材料になります。この材料を使って、この後のステップで実際に共通鍵を作成します。
この時点では通信が暗号化されておらず、盗聴可能です。ですが、このパラメータは誰が見ても問題ないものなので、公開しても安全です。
このパラメータはスマホやWi-Fiルータがランダムな値を自動で作成します。
実際に交換するパラメータは以下のような感じです。
パラメータ:
8F 7A B2 3C D1 E5 9A 72 4B A3 1F C6 0D 89 35 2F
《ステップ3 共通鍵作成の準備(秘密の数字の準備)》
次は秘密の数字の準備のステップについての説明をしましょう。
その際、何のために秘密の数字を準備するのかを、この秘密の数字は他人に教えないということを明確に伝えましょう。
私はいつも以下のように説明しています。
今度は、お互いが自分だけの「秘密の数字」(他の人には絶対に教えない個別の数字)を決めます。この秘密の数字は、共通鍵を作るために使われます。
この時点ではまだ通信は暗号化されないため、もしこの秘密の数字を教えてしまい、その通信を誰かに盗聴されると、盗聴した人が共通鍵を作成できてしまいます。そうなるとあらゆる通信を盗聴されていまいます。
《ステップ4 共通鍵作成》
次は事前にステップ2とステップ3で準備し値を使って共通鍵を作成することを説明しましょう。
私はいつも以下のように説明しています。
ステップ4で、実際に両者は、先ほどのステップ2で準備した「共通の数字」とステップ3で準備した自分の「秘密の数字」を使って、計算を行い「共通鍵」を作成します。
この共通鍵は、通信する二人だけが知っている秘密の鍵です。どちらも同じ共通鍵を持っているので、これを使ってメッセージを暗号化(わかりにくくすること)したり、暗号化されたメッセージを解読(元のメッセージに戻すこと)したりできます。
《ステップ5 暗号化通信開始》
最後に共通鍵を作成したら暗号化通信が開始されることを伝えましょう。
この時、共通鍵が作成されるまでの通信は暗号化されていないことは明確に伝えましょう。
私はいつも以下のように説明しています。
共通鍵が完成したら、この鍵を使ってメッセージを暗号化します。暗号化されたメッセージは、鍵を知らない第三者には意味が分かりません。しかし、共通鍵を持っている通信相手は、その鍵を使ってメッセージを解読し、元の内容を知ることができます。これで、安全な通信が始められるのです。
ここから先の通信データは共通鍵を使用して暗号化されます。逆に言うと、共通鍵が作成されるまでの通信は暗号化されていないのでその点は抑えておきましょう。
暗号化されるまではいろんな処理がされているんですね!
作成される鍵の数
次は共通鍵で作成される鍵の数について説明しましょう。
共通鍵の特徴の1つとして、通信相手ごとに共通鍵の用意が必要という特徴があります。
この特徴を定量的に理解するために通信相手ごとに1つ共通鍵の作成が必要ということを説明しましょう。
「作成される鍵の数」の説明は、共通鍵暗号方式指導手順全体像の以下赤枠の部分です。
鍵の数を説明する際は、2人の場合、3人の場合、4人の場合など複数例を挙げて実際に計算しながら説明しましょう。そうすることで、通信するペアの数に比例して必要な共通鍵の数が増加することが分かり、ユーザ数が増えると必要な鍵の数が増えることが理解しやすくなります。
私はいつも以下のように説明しています。
共通鍵暗号方式では、通信を行うそれぞれのペアごとに1つの共通鍵が必要になります。このため、必要な鍵の数は、通信するペアの数に比例して増加します。
具体的には、n人のユーザーがいる場合、全てのユーザー同士が通信を行うためには以下の鍵が必要です。
鍵の数の計算:
必要な鍵の数 = n × (n – 1) / 2
2人の場合(AさんとBさん):1つの鍵が必要
3人の場合(Aさん、Bさん、Cさん):それぞれのペア間に鍵が必要なので、3つの鍵(A-B、A-C、B-C)が必要
4人の場合:6つの鍵が必要
これが、共通鍵暗号方式のデメリットの1つです。ユーザー数が増えると、必要な鍵の数も急激に増加するため、鍵の管理が難しくなります。この点で、公開鍵暗号方式よりも鍵管理が複雑になるケースが多いです。
聞き手が数学が苦手な場合など、鍵の数の計算式を説明しても理解が難しい場合がありますので、そのような場合は以下のように図解して説明しましょう。
アルゴリズム
次は共通鍵暗号方式で使用できるアルゴリズムについて説明しましょう。
アルゴリズムはITの世界ではよく登場するため、大まかな特徴やどのようなシチュエーションで使用されるかを聞き手にインプットさせましょう。アルゴリズムについては何となくわかったという浅めの理解に終わってしまうことが多いので、身近なシチュエーションを説明し関連付けすることで直観的に理解してもらうことが目的です。
アルゴリズムの解説は、共通鍵暗号方式指導手順全体像の以下赤枠部分です。
共通鍵暗号方式で使用されるアルゴリズムは代表的なものに、AES、Camellia、Kcipher-2があります。私が説明しているときは、実際にこの3つを例に挙げて説明しています。
私は以下のように説明しています。
共通鍵暗号方式で使用される暗号方式は主に3つあります。
1つ目は「AES」です。「AES」は幅広い用途で使われる世界標準の暗号方式で、特に強力で安全です。
2つ目に「Camellia」です。「Camellia」は、日本の技術で開発された暗号方式で、AESと同等のセキュリティを持ち、日本国内でよく使われます。
3つ目に「Kcipher-2」です。「Kcipher-2」は、軽量で高速な暗号方式で、スマートデバイスやIoTなど、処理能力が限られた環境での使用に適しています。
AESは先進暗号標準とも呼ばれ、アメリカの国立標準技術研究所(NIST)が標準化した共通鍵暗号標識です。AESは高速かつ安全であり、計算が効率的で速いため、PCやスマホなど、多くのデバイスで使用されています。また、セキュリティが非常に高く、機密情報の暗号化に多く使用されています。
鍵の長さは、128ビット、192ビット、256ビットの3つの鍵長を使用でき、ビット数が多いほど攻撃者が解読しにくくなります。
Camelliaは、日本のNTTと三菱電機が開発した共通鍵暗号方式です。
CamelliaはAESと同等の安全性を持っており、企業システムや政府機関でよく利用されています。鍵の長さもAESと同様、128ビット、192ビット、256ビットの3つの鍵を使うことができます。
日本で開発されたこともあり、国内の情報通信や政府関連のシステムで利用されいます。
Kcipher-2は、日本の総務省が標準化した共通鍵暗号方式で、軽量で高速な暗号方式です。Kcipher-2は、スマートデバイスやIoTデバイス(インターネットにつながった家電製品など)での利用を想定して作られており、計算資源が限られた環境でも高速に処理できるのが特徴です。
Kcipher-2は、小型機器での利用に向いており、低消費電力のデバイスでも使いやすくなっています。
共通鍵の利用場面
最後の共通鍵を使用して実際に暗号化通信が行われている身近な例を説明しましょう。
共通鍵暗号方針指導手順全体像では以下の部分です。
身近な例としては3つの観点があると考えています。
1つ目が「リアルタイム性が求められる場面」2つ目が「暗号化スピードが重視される場面」3つ目が「低コストで多くのデバイスと通信する必要がある場面」の3つです。
上記の3つの観点について、実際に身近に使われている例を挙げて説明しましょう。
身近な例で説明することで、共通鍵暗号方式について身近な場面と関連付けて理解することができます。
私はいつも以下のように説明しています。
共通鍵暗号方式は3つの場面で使用されます。
1つ目が「リアルタイム性が求められる場面」2つ目が「暗号化スピードが重視される場面」3つ目が「低コストで多くのデバイスと通信する必要がある場面」の3つです。
1つ目のリアルタイム性が求められる場面とは、例えばオンラインゲームやビデオ会議など、通信スピードが重要になる場面です。ゲームの操作の反応が遅かったら負けてしまいますよね。ビデオ会議も相手の声が遅れて聞こえると会議に支障が出てしまいます。
なので、実はオンラインゲームでは、ゲームサーバーとプレイヤーの間で共通鍵を使ってデータ(捜査情報やゲームの進行情報)を暗号化して通信しているのです。
2つ目の暗号化スピードが重視される場面については、例えば、金融取引や電子決済など、お金のやり取りが発生する場合が該当します。人気アーティストのチケットなど数量制限があるものをWebサイトで購入るするときなど、決済が遅くて購入できませんでしたとかなると悲しいですよね。。。そのため、クレジットカードの決済や銀行のオンライン取引などでもよく利用されています。
3つ目の低コストで多くのデバイスと通信する場面は、IoTデバイスやスマートホームの環境です。例えば、スマートスピーカーがエアコンを操作する際に、共通鍵を使ってスピーカーとエアコンの間で命令データを暗号化します。共通鍵暗号方式は性能が低いデバイスでも使えるため、低コストで多くのスマートデバイス同士を連携するのに向いています。
共通鍵暗号化方式の理解の重要性
共通鍵暗号化方式(データを安全にするための方法の一つ)を理解することは重要です。
この方式は、一つの「鍵」(データを暗号化・復号するための秘密のパスワードのようなもの)を使い、情報を安全に守る仕組みです。
例えば、家の鍵と同じです。家族みんなが同じ鍵を使って家に入りますが、その鍵が盗まれると、誰でも家に入れてしまいます。データも同様に、共通鍵が漏れると情報が危険にさらされます。
このため、共通鍵を安全に管理することが大切です。こうした理解があることで、デジタル情報をより安全に守ることができるのです。
ゴリタン
インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。
CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。