公開日2021.01.13
最終更新日2022.10.04
はじめに
みなさま、こんにちは
今回はアルゴリズムの中の「暗号化アルゴリズム」について解説していきたいと思います。
解説の前に!
「アルゴリズムについてまだよくわからないかも」「アルゴリズムについての認識を確認しておきたい」なんて方は、ぜひこちらの記事もご覧ください。
暗号化アルゴリズムとは?
暗号を使ったアルゴリズム(そのまま笑)
例えば、とあるデータをAさんからBさんへ渡すとします。
もしも、Aさんがなにもせずにそのままデータを渡した場合、Bさんに届くまでの間にデータが改ざんされてしまう恐れや中身を勝手に閲覧されてしまう恐れがあります。
恐ろしい、、、
このような事態を防ぐためにデータを暗号化することでリスクを防ぐことができるというわけです!
暗号化したデータは復号化する必要があるので、こちらも一緒に説明していきますね。
さて、暗号化アルゴリズムには3つの種類が存在します。
- 共通鍵暗号化方式
- 公開鍵暗号化方式
- ハイブリッド暗号方式
ひとつずつ特徴やメリットデメリットをご紹介!
共通鍵暗号化方式
暗号化鍵と復号化鍵が共通(同じもの)である方式です。
データを暗号化・復号化する鍵(共通鍵)は、やりとりをする相手とのみ共有して使用します。
また、処理速度が早いのが特徴でありメリットです。
デメリットとして、やりとりをする相手ごとに鍵を作成するため、管理が大変になる可能性があります。
暗号化する方法としてAESなどが使われています。
AESとはAdvanced Encryption Standardの略で、4種類の変換を複数回実行してしている暗号化方法です。
処理負荷の小さい暗号方式、AESを使ってTLSや無線LANの暗号化通信で使用されています。
※解説:TLSとは暗号化して送受信するためのプロトコル(データ通信時の規約のこと)である
公開鍵暗号化方式
共通鍵暗号方式とは異なり、暗号化鍵(公開鍵)と復号化鍵(秘密鍵)が別々に存在します。
公開鍵暗号方式はBさん(データを受信したい側)が公開鍵と秘密鍵の両方を作成します。
方法としては、
- Bさん(データを受信する側)が公開鍵と秘密鍵の2つを作成
- 作成したうちの暗号化用の公開鍵を一般公開
- 公開鍵を使って、Aさん(送信者)がデータを暗号化
- Bさんは、自分で作成した秘密鍵でデータを復号化する
という感じです。
私はここで「はて?」と混乱したのでわかりやすく図で解説します。
どうですか?
ご理解いただけたと信じて、特徴をご紹介します。
共通暗号方式との比較になりますが、公開鍵暗号方式は第三者に秘密鍵を知られるリスクがかなり低いです。
また、暗号化の際に使うのは公開鍵であり、復号化の鍵は秘密鍵なのでやりとりをする相手ごとに鍵を管理する必要もありません。
ただ、処理速度が遅いというデメリットがあります。
代表的な暗号化のアルゴリズムはRSAです。
RSAとは発明された方々の頭文字をとって名付けられており、
ロナルド・リベスト(Ronald Rivest)、アディ・シャミア(Adi Shamir)、レオナルド・エーデルマン(Leonard Adleman)
3名の頭文字をとっているんです。
RSAの暗号アルゴリズムは、素数を掛け合わせた素因数分解を応用して暗号化します。
ハイブリッド暗号方式
最後にご紹介する方式は、公開鍵暗号方式と共通鍵暗号方式のデメリットを考慮して考えられた方式です。
方法としては、
- Bさん(受信する側)は公開鍵暗号方式で公開鍵と秘密鍵を作成
- Bさんは暗号化用の公開鍵を公開
- Aさん(送信する側)は共通鍵暗号方式で秘密鍵を作成
- Aさんが自身で作成した共通鍵を使ってデータを暗号化し、さらに共通鍵をBさんが作った公開鍵で暗号化する
- Bさんは自分で作成した秘密鍵で共通鍵を復号化し、共通鍵でデータを復号化する
はい、2回目の「はて?」になった方のために、わかりやすく図で解説していきます。
基本的には共通鍵暗号方式と同じなのですが、第三者に鍵を知られてしまうリスクを考慮した方法として使われています。
まとめ
暗号化アルゴリズムには3種類の方式があり、それぞれメリット・デメリットがある
- 共通鍵暗号方式は処理速度が速いが、共通鍵を知られてしまうリスクがある
- 公開鍵暗号方式は第三者に秘密鍵を知られてしまうリスクは低いが、処理速度が遅い
- ハイブリッド暗号方式は少し手間がかかるが、セキュリティ強度が高いと言える
最後に
暗号化アルゴリズムについて、ご理解いただけましたでしょうか?
個人的には理解が深まりました。アウトプットをするのは学習を進める上でとても大事なので、この記事や他の記事を読んで理解できたことは誰かに話してみたり、レポートにまとめてみたり、ブログを書いてみたりして、アウトプットしていきましょう!
少しでもお役にたてれば幸いです。