【SRE】公開鍵、証明書、SSL/TLSの関係性がわかりづらい

この記事は下記の書籍を主に使用しています。
[暗号技術入門 第3版　秘密の国のアリス \| 結城 浩 | コンピュータ・IT | Kindleストア | Amazon](https://www.amazon.co.jp/dp/B015643CPE/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

## 公開鍵
暗号化の鍵と復号化の鍵を分けて取り扱う手法です。
つまり送信者はメッセージを暗号化の鍵を使って暗号化し、受信者は復号化の鍵を使って復号するということです。

### RSA
公開鍵暗号アルゴリズムの一つで、暗号化の鍵と復号化の鍵を分ける方法です。

#### 暗号化
`暗号文 = 平文^E mod N`
**平文を E乗して、その結果をNで割ったあまりを求めることになります。**
EとNの組み合わせが公開鍵になります。

#### 復号化
`平文 = 暗号文^D mod N`
**暗号文を D乗して、その結果をNで割ったあまりを求めることになります。**
DとNの組み合わせが暗号鍵になります。

### RSA以外の暗号方式
- ElGamal方式
- Rabin方式
- 楕円曲線暗号方式

## デジタル署名
>デジタル署名は公開鍵暗号を応用した技術でもあり、デジタル署名の仕組みのなかで公開鍵と秘密鍵も登場します。
[デジタル署名とは](https://www.infraexpert.com/study/security5.html)より引用

[デジタル署名とは｜「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word14396.html)

### 署名って？
プライベートキーによる暗号文のことを署名として使用します。
公開鍵による復号化は、誰にでもできるので、署名の検証も誰でも行うことができます。

### デジタル署名ができること
改竄やなりすましを検出できるようになります。
ただ前提条件として、**送信された公開鍵が本物であることが条件となります。**
そこで正しく公開鍵を入手する方法が証明書になります。

### コピーが作れるのでは？
結論、作れるだろうし、作れても良いです。
理由は、**署名者と特定のメッセージが紐づいていることが重要だからです。**


## 証明書(公開鍵証明書)
### 証明書とは？
**公開鍵が正しいものかどうか証明するものを証明書と呼びます。**
公開鍵の認証をしてくれます。

### 証明書はなぜ必要なのか
公開鍵だけ取得する方法と認証局の証明書を通して公開鍵を取得する2つのパターンが考えられます。
この質問の場合、前者ではなぜダメなのかという話になります。

結論、公開鍵をすり替えることが容易になるからです。
認証局を通していないと、この公開鍵が誰からのものでということがわからなくなってしまいます。
認証局を通していると、**デジタル証明書署名がついているので、すり替えが困難になります。**

このすり替えは、`main-in-the-middle`攻撃と呼ばれています。
[中間者攻撃（Man In The Middle Attack）とは？仕組みや危険性、対策について徹底解説](https://cybersecurity-jp.com/cyber-terrorism/34742)

### 認証局って何？
俗にいう、CA と呼ばれるものです。
信頼できるデジタル署名を使い続けることができるのか、それは誰が証明書を発行するのか。

#### 役割
- 証明書の登録
- 証明書の破棄

[認証局 （CA：Certification Authority）とは？｜GMOグローバルサイン【公式】](https://jp.globalsign.com/ssl-pki-info/pki/ca.html)

#### PKI(公開鍵基盤)
証明書を実際に運用する基盤のことです。
PKIの構成は以下の通りです。

- 利用者  
PKIを利用する人
- 認証局  
証明書をは発行する人
- リポジトリ  
証明書を保管しているデータベース


#### ルートCA
>上位の認証局による認証を受けず、自分の正当性を自ら証明する認証局。
[ルートCA  【 root certificate authority 】  ルート認証局](http://e-words.jp/w/%E3%83%AB%E3%83%BC%E3%83%88CA.html)より引用

[いまさら聞けない、SSLサーバ証明書とルート証明書の関係](https://www.digicert.co.jp/welcome/pdf/wp_sslandroot-certificate.pdf)
[ルート認証局の信頼性｜GMOグローバルサイン【公式】](https://jp.globalsign.com/ssl-pki-info/pki/ca_trust.html)


## SSL/TLS
上記の公開鍵やデジタル署名など様々な技術が組み合わされています。

`HTTPS = HTTP + SSL/TLS`

```
盗聴されにくしたい　→　機密性　→　公開鍵暗号
改竄されたくない　→　正真性　→　デジタル署名
相手が本物稼働か確かめたい　→　認証　→　デジタル署名、証明書
```

### TLS
TLSレコードプロトコルとTLSハンドシェイクプロトコルに分けることができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148392/015c6708-8eca-d8c6-f7c6-6bea710db3df.png)

#### TLSレコードプロトコル
メッセージを暗号化する部分です。
この記事には書いていませんが、対象暗号やメッセージ認証コードがここで使用されます。
[The TLS Protocol Version 1.0](https://www.ipa.go.jp/security/rfc/RFC2246-06JA.html)

#### TLSハンドシェイクプロトコル
使用するアルゴリズム、共有鍵を決定し、証明書による認証も行います。
公開鍵やデジタル署名、証明書がここで使用されます。
[SSL/TLS（SSL3.0～TLS1.2）のハンドシェイクを復習する - Qiita](https://qiita.com/n-i-e/items/41673fd16d7bd1189a29)
[SSL/TLSのハンドシェイクってどんなの？ - Qiita](https://qiita.com/jkr_2255/items/62d8d15d206c60f37d30)
[TLS ハンドシェイクプロトコル](https://www.ipa.go.jp/security/rfc/RFC2246-07JA.html)

>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148392/7945ecaa-803f-f4df-95d7-47d9892c6a07.png)
[【図解】https(SSL/TLS)の仕組みとシーケンス,パケット構造 〜暗号化の範囲, Encrypted Alert, ヘッダやレイヤについて～│SEの道標](https://milestone-of-se.nesuke.com/nw-basic/tls/https-structure/) より引用



## 暗号技術の全体図
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148392/24c1b22b-5f61-4fdf-8cfd-271e8a6df41e.png)
[暗号技術入門15 暗号技術と現実社会 \| SpiriteK Blog](http://www.spiritek.co.jp/spkblog/2017/03/02/%E6%9A%97%E5%8F%B7%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%8015-%E6%9A%97%E5%8F%B7%E6%8A%80%E8%A1%93%E3%81%A8%E7%8F%BE%E5%AE%9F%E7%A4%BE%E4%BC%9A/) より引用

### その他参考にした記事
[SSHの公開鍵認証における良くある誤解の話 - Qiita](https://qiita.com/angel_p_57/items/2e3f3f8661de32a0d432#comments)