秘密鍵と公開鍵で暗号化　公開鍵暗号方式とは?

# 公開鍵暗号方式とは？
公開鍵暗号方式とはデータの暗号化手法のひとつであり、秘密鍵と公開鍵という鍵のペアを使ってデータを暗号化、復号化する手法のこと。

# 秘密鍵と公開鍵
公開鍵暗号方式には秘密鍵と公開鍵という2つの鍵が使われる。2つの鍵はペアとして作成される。

![001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/e8e9cc82-1d92-3752-8488-4d9f9e2ea022.jpeg)


各鍵には次のような特徴がある。

## 秘密鍵・公開鍵、共通の特徴
秘密鍵と公開鍵はそれぞれデータを暗号化する機能を持つ。

* 秘密鍵でデータを暗号化  

![002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/6a0e3367-6d33-d602-89d1-85e9d0dc2f9e.jpeg)


* 公開鍵でデータを暗号化

![003.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/b2619f05-504f-551c-aad8-928e763b9146.jpeg)


## 秘密鍵の特徴
* 秘密鍵とペアの公開鍵によって暗号化されたデータを復号化することができる

![004.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/1162508d-75f6-b869-2027-887c7bbfb476.jpeg)


* 秘密鍵とペアの公開鍵以外の鍵によって暗号化されたデータは復号化できない

![005.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/2d8b1590-6397-e213-7e66-d4b4d6c844a9.jpeg)


* 他人に見せたり、渡したりしてはいけない

![006.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/03582a7f-b412-069a-136a-55a4854c4c58.jpeg)


## 公開鍵の特徴
* 公開鍵とペアの秘密鍵によって暗号化されたデータを復号化することができる

![007.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/595e35ac-a440-2554-14e2-a8cdf4cd1100.jpeg)


* 秘密鍵とペアの公開鍵以外の鍵によって暗号化されたデータは復号化できない

![008.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/eb1bce2b-4985-e6e9-61a9-473f4a0b34e1.jpeg)


* 他人に公開したり、複製して渡してもOK

![009.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/26384421-a0ba-5795-c54f-a04315ddf7da.jpeg)


## 秘密鍵と公開鍵の特徴まとめ
秘密鍵と公開鍵の特徴をまとめると以下の表のようになる。

|    |  暗号化  |  復号化  |  公開  |
| :---: | :---: | :---: | :---: |
|  秘密鍵  |  ○  |  ○：ペアの鍵で暗号化されたデータ<br>×：それ以外のデータ  |  ×  |
|  公開鍵  |  ○  |  ○：ペアの鍵で暗号化されたデータ<br>×：それ以外のデータ  |  ○  |

秘密鍵・公開鍵ともにデータを暗号化することができることや、ペアの鍵で暗号化されたデータを復号化することができるという機能は共通しているが、他人に公開するか・しないかの違いがある。

# 公開鍵暗号方式の用途
秘密鍵と公開鍵を使用したデータの暗号化、復号化は「機密データの送信」と「データ送信元の証明」に使われる。

## 機密データの送信
秘密鍵・公開鍵を使った機密データの送信は次の手順で行われる。

(1) 秘密鍵・公開鍵のペアを作成する

![010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/d90163f6-da60-f600-944a-3be6ab233121.jpeg)


(2) 作成した公開鍵を渡す

![011.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/937b3dcf-1a5c-ca22-3636-8cca4dec7b6f.jpeg)


(3) 受け取った公開鍵を使ってデータを暗号化する

![012.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/13d9df35-18ea-4b9c-e773-1b73a364f21d.jpeg)

(4) 暗号データを秘密鍵の持ち主に送る

![013.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/77faafe9-6dc2-1ffb-2d29-50919abe4b4c.jpeg)


(5) 受け取った暗号データを秘密鍵で復号化する

![014.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/19b5c1c0-2c19-8369-d50e-2388afa4f58f.jpeg)

このようにデータを暗号化して送信すると、例え送信中にデータ内容を見られたとしても秘密鍵の持ち主以外はデータを復号化することができないため、機密データを安全に送信することができる。

![015.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/88299efa-93ea-98cc-c185-71d84f981452.jpeg)


## データ送信元の証明
データ送信元の証明は次の手順で行われる。
(1) 秘密鍵・公開鍵のペアを作成する

![016.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/13cb3a64-0fd6-dd72-f042-955ddfec9fd9.jpeg)


(2) 作成した公開鍵を渡す

![017.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/7886a1aa-a2ae-1fc4-78c9-f18c7879e372.jpeg)


(3) 秘密鍵でデータを暗号化する

![018.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/65a7b58d-844e-bcee-32c9-53f66caa25a2.jpeg)


(4) 暗号データを公開鍵の持ち主に送る

![019.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/b47b3425-b00c-d5e5-8ccb-cac4073ab05a.jpeg)


(5) 受け取った暗号データを秘密鍵で復号化する

![020.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668115/899ac505-1882-a90e-69e3-e683584a6a51.jpeg)


この使い方の目的は機密データを安全に送信することではなく、暗号化されたデータが秘密鍵の持ち主から送られてきたということを証明することである。

公開鍵でデータを復号化できるということは、そのデータは公開鍵とペアの秘密鍵によって暗号化されたものであり、秘密鍵は鍵ペアの作成者以外持っていないので、受け取ったデータは鍵ペアの作成者から送られたものであることが保証される。

# 公開鍵暗号方式のメリット・デメリット
公開鍵暗号方式には以下のようなメリット・デメリットがある。

## メリット：安全性が高く、管理が容易
公開鍵暗号方式には安全性が高く、管理が容易であるというメリットがある。秘密鍵さえ流出しなければ公開鍵で暗号化されたデータは復号化できないので、暗号化したデータを安全に送信することができる。また、データのやり取りをするユーザーが増えても公開鍵を複製して配布するだけで済むので管理も容易。

## デメリット：処理に時間がかかる
デメリットとしては暗号化・復号化の処理に時間がかかるという問題がある。暗号化・復号化には複雑な計算が用いられるのでその分処理に時間がかかってしまう。

# まとめ
* 公開鍵暗号方式とはデータの暗号化手法のひとつ
* 秘密鍵と公開鍵という鍵のペアを使ってデータを暗号化、復号化する
* 機密データの安全に送信したり、データの送信元の証明に使われる
* 安全性が高く管理も容易だが、処理に時間がかかる