セキュリティ向け暗号技術基礎と活用例
........
- 更新日
- 公開日
- 2023.10.30
サイバーセキュリティ対策の実装検討にあたっては、暗号技術の基本機能や用語の理解が不可欠です。暗号技術に関する書籍も多く出版されておりますが、聞きなれない言葉や数学的に難解な説明に苦労するというお話もよく伺います。本記事では、サイバーセキュリティ対策をこれから検討する電気・ソフトウェア設計者様向けに、まず知っておくべき暗号技術の種類や基本用語をご説明いたします。
1) 暗号技術とは?
暗号技術は、セキュリティ機能として一般的に下記3つを保証するために使用されます。
- 認証 :通信相手が正しい相手であること。
- 完全性:メッセージが不正に改ざんされていないこと。
- 秘匿性:メッセージが不正に読まれないこと。
2) 暗号技術の種類
いろいろな暗号技術が実用化されていますが、守りたいセキュリティ特性に応じて下表のような代表的暗号技術があります。本記事では、これらについて紹介していきます。
セキュリティ特性 | 暗号技術 |
秘匿性 | 対称暗号、非対称暗号 |
完全性、認証 | ハッシュ関数、デジタル署名 |
3) 対称暗号(共通鍵暗号)
暗号化と復号化に同じ鍵を使う暗号化を「対称暗号」といいます。下絵がイメージ図です。
上記例では、それぞれ下記が行われています。
・リョウは、共通鍵にて平文を暗号化する。
・サンは、共通鍵にて暗号文を平文にする。
このような共通鍵の使用において、重要となる前提条件が以下2点あります。
・リョウとサンはお互いをセキュア的に信頼している。
(秘密鍵が本物であると確信がある)
・リョウは共通鍵の複製をサンへ安全な方法で送信している。
(第三者は共通鍵を知りえない前提)
以上の前提条件からも、共通鍵を使った暗号化の脆弱性は、鍵の秘匿性によって決定されますが、懸念をあげるとすれば以下でしょう。
・鍵の渡し手(リョウ)が知らない鍵の複製は存在するか?
・鍵の共有はセキュアであったか?
・鍵の受け取り手(サン)は、鍵を大切にするか?
このように対象暗号における共通鍵の保護には、細心の注意が必要となります。
下表は、対称暗号の主なアルゴリズムです。現在は、「AES」が推奨されています。
アルゴリズム | 説明 |
DES(Data Encryption Standard) | 古く非推奨 |
triple-DES | 非推奨 |
AES(Advanced Encryption Standard) | 推奨 |
4) 非対称暗号(公開鍵暗号)
非対称暗号では、暗号化と復号化に使用する鍵はペアになっており(数学的に紐づけられている)、一方は秘密鍵、もう一方は公開鍵と呼ばれます。
上絵では、それぞれ下記が行われています。
・リョウは、自分しか知らない秘密鍵にて平文を暗号化する。
・サンは、リョウから渡された公開鍵にて暗号文を平文にする。
非対称暗号においては、秘密鍵(プライベート鍵ともいう)が他者に知られないことがシステムのセキュリティに非常に重要である一方、公開鍵は他者に知られても問題がないため、配布が容易といえます。下絵がイメージ図です。
どちらか一方が秘密鍵と公開鍵のペアを作成し、もう一方へ公開鍵を渡すことで、同一でない非対称(秘密鍵/公開鍵のペア)の鍵を使用して、お互いに暗号化/復号化を行います。
ただこの場合においても、懸念が存在します。下絵はリョウとサンの間にデータを抜き出そうとする第3者が入ってしまった場合のイメージです。
それぞれに鍵を渡す(受け取る)相手であると身分を偽称すると、間に入り平文を読み取ることも可能となってしまいます。これはMan-in-the-Middle攻撃の一種です。
下表は、非対称暗号の主なアルゴリズムです。
アルゴリズム | 特徴 |
RSA | 現在主流 |
ElGamal | 暗号文が平文の2倍の長さ |
Rabin | 解読がRSAより困難 |
Eliptic Curve Cryptography(楕円曲線暗号) | RSAより鍵の長さが短く、注目されている |
5)ハッシュと認証
ハッシュは、任意のデータから別の値(多くの場合は短い固定長の値)を得る操作です。下絵のように、ファイルサイズが異なっても、固定サイズのハッシュ値32バイトを得ることができます。
ハッシュを使うと、送信者のなりすまし防止と、受信したメッセージの改ざん検出を行うことができます。下絵でその例を説明します。
- リョウは、送りたいメッセージと一緒に暗号ハッシュ値を送ります。暗号ハッシュとは、メッセージと共通鍵から作ったハッシュ値です。
- サンは、受信したメッセージと共通鍵から暗号ハッシュ値を作ります。これが送られてきた暗号ハッシュ値と一致するか確認します。一致した場合は、メッセージの送信者はリョウであり、受け取ったメッセージは改ざんされていないと判断できます。
下表は、ハッシュに用いられる主なアルゴリズムです。
アルゴリズム | 説明 |
MD4,MD5 | 脆弱性が指摘されている |
SHA1 | 脆弱性が指摘されている |
SHA2(SHA256,SHA384,SHA512) | 現在主流 |
SHA3 | 将来的に使われる予定 |
6)デジタル署名
デジタル署名を使うことで、送信者のなりすまし防止と改ざん検知を行うことができます。デジタル署名には、非対称暗号の技術が使われます。
下絵では、リョウがサンにデジタル署名付きのファイルを送る例を説明します。
- リョウは、送信するファイルのハッシュ値(ダイジェスト)を作成し、秘密鍵を用いて暗号化した署名を準備します。サンにファイルと署名の両方を送信します。
- サンは、受信したファイルのハッシュ値(ダイジェスト)を作成します。一方で受信した署名を公開鍵で復号化してダイジェストを再現し、ファイルから求めたダイジェストと一致確認を行います。一致した場合は、送信者はリョウであり、ファイルが改ざんされていないと確認できます。
7)証明書と公開鍵基盤(PKI)
非対称暗号やデジタル署名を使用した場合においても、公開鍵が偽物であった場合には、第3者が間に入りMan-in-the-Middle 攻撃にさらされてしまいます。
自分の持っている公開鍵が本来の通信相手の公開鍵であることを確認するための手段として、証明書を活用することができます。
証明書の発行は通常、OEMまたは認証局(CA)が行います。(CAの代表例としては、Symantec、GlobalSignなどです。)
リョウは自身の公開鍵の証明書を認証局に作成してもらい、サンへ自身の公開鍵と認証局発行の証明書を合わせて送信します。一方、サンは事前に認証局から受け取っていた(証明書の)公開鍵と、受信した証明書を組み合わせて、公開鍵の認証を確認します。(以下イメージ図)
実際のシステムにおける証明書(デジタル署名付き)の例としては、プリンタのインクカートリッジの非対称認証があります。この例については、10)暗号化の実用例で解説します。
8)セッション鍵と鍵合意
同じ鍵を使用したまま大量の暗号データを送るのは、鍵が推測される可能性があり危険といえます。これに対処するため、頻繁に変更されるセッション鍵(一時鍵)を使います。セッション鍵の決定方法として、通信相手がそれぞれに関連付けられた情報を使って1つの鍵を生成することを、鍵合意(Key agreement)といます。
下絵は、ECDH(Diffie-Helman楕円曲線)鍵合意のイメージ図です。お互いの公開鍵ペアを持つ通信者間で、一意の共有秘密鍵(SS(Shared Secret))を得ることができる演算をECDH演算と呼びます。
下絵では、上記で生成した共有秘密鍵(ECDHE:Ephemeral(短寿命)鍵生成)に対して、更に「KDF」(Key Derivation Function、鍵導出関数)を経由してセッション鍵を作成しています。
9)乱数
暗号技術では、頻繁に乱数が使用されます。暗号に用いられる乱数の特徴には、以下の3つがあげられます。
①無作為性 ・・・統計的な偏りや規則性がない数列
②予測不可能性 ・・・過去の数列から次の数を予測できない
③再現不可能性 ・・・同じ数列を再現できない
乱数は、暗号技術において下記の場合などに使用されます。
・各種鍵の生成時:対称暗号、非対称暗号、デジタル署名等
・ナンス(nonce)の生成時:リプレイアタック防止
本記事では、ナンスの生成について説明します。下絵のように、通信データ(例:送金連絡)を第三者が盗み見て、繰り返し送信を行うことを「リプレイアタック」といいます。
このリプレイアタックの防止にナンスが使用されます。送受信に際し、1回きりのナンスを双方で通信データに付与することで、受信者が同一ナンスを含んだデータを複数受理することを防ぐことができます。
10)暗号化の実用例
実用例①:プリンタのインクカートリッジ認証(正規品確認)
プリンタメーカと、製造ラインのHSM(Hardware Security Module)の秘密鍵を使って、HSMとインクカートリッジの公開鍵の証明書を作成しておきます。
・プリンタメーカは、HSMの公開鍵に対する証明書を作成。
・HSMは、インクカートリッジの公開鍵に対する証明書を作成。
プリンタとインクカートリッジが接続されると、プリンタに予め入っているプリンタメーカの公開鍵を用いて、HSM公開鍵の検証を行います。その後、HSM公開鍵が検証完了した場合、HSM公開鍵を用いて、インクカートリッジの公開鍵を検証します。インクカートリッジの公開鍵が検証完了した後、乱数を使用したチャレンジレスポンスを行い、一連の認証作業を完了します。
実用例②:セキュア・インターネット通信(TLS通信)
下絵は、TLS通信のセッション確立のイメージ図です。セッション確立は以下手順にて行われます。
①ClientHello:クライアントがサーバに接続し、通信開始を要求します。(クライアントはサポートする暗号化方式やプロトコルのリストを送信)
②ServerHello:サーバは、クライアントの要求に応じて、使用する暗号化方式やプロトコルを選択し、それをクライアントに通知します。
③鍵の交換:サーバとクライアントは、共通の鍵を生成し、これを使って通信を暗号化します。
④セッション確立完了:サーバとクライアントは、通信が安全に確立されたことを確認し、セッションが開始されます。
セッションが確立されると、以降の通信は暗号化され、セキュアな秘匿通信が行われます。
セキュリティ対策のための暗号基礎技術と、実用例を紹介しました。実装される暗号アルゴリズム(AES, RSA等)は、機器の演算能力の向上に伴ってより高度なアルゴリズムに更新されていくと予想されますが、この記事で紹介した暗号方式の種類や認証、証明書を用いる手法は基本事項として継承されていくと思います。本記事を読んで頂いたことによって、お客様のセキュリティ対策実装の足掛かりになりましたら、幸いです。
サイバー攻撃対策に活用できる「国際標準規格:IEC 62443」、EUでの無線搭載機器を対象にしたRE指令について知りたい方は、こちらの記事もご覧ください。