■セキュア通信
エンジニアなら知っておきたい、絵で見てわかるセキュア通信の基本 - Qiita
https://qiita.com/t_nakayama0714/items/83ac0b12ced9e7083927
今なぜHTTPS化なのか?インターネットの信頼性のために、技術者が知っておきたいTLSの歴史と技術背景 - エンジニアHub|若手Webエンジニアのキャリアを考える!
https://employment.en-japan.com/engineerhub/entry/2018/02/14/110000
リミット間近の「常時SSL」移行、5つのシナリオと陥りやすい落とし穴とは | 【レポート】Web担当者Forumミーティング 2018 Spring | Web担当者Forum
https://webtan.impress.co.jp/e/2018/05/23/29268?amp
■情報セキュリティのCIA
C ... Confidentiality(機密性)
I ... Integrity(完全性)
A ... Availability(可用性)
■SSL/TLSとHTTPS
SSL ... Secure Sockets Layer。通信相手の認証、通信内容の暗号化、改竄の検出を行うプロトコル
TLS ... Transport Layer Security。SSLの次期バージョン
HTTPS ... Hypertext Transfer Protocol Secure。セキュアな接続をHTTPで行うこと
■公開鍵
情報を暗号化して送るにあたって、暗号化と復号化を行うための共通鍵(秘密の文字列)をどうやって渡すか。という問題
普通に考えると
1. メッセージに鍵をかける。メッセージを守る鍵を安全に受け渡す必要がある
2. 鍵に鍵をかける。鍵を守る鍵を安全に受け渡す必要がある
となってしまう
この問題は、一般的なセキュア通信では以下のようにして解決している
1. 送信者は、受信者から受信者の鍵(暗号化用)を取得する
2. 送信者は受信者の鍵(暗号化用)でメッセージを保護、送信する
3. 受信者は自分の鍵(復号化用)でかけられた保護を解除し、メッセージを受け取る
送信者が取得する鍵は公開されるため、公開鍵暗号と呼ばれる
また、公開される鍵のことを公開鍵と呼び、公開されない鍵のことを秘密鍵と呼ぶ
ただし暗号化用の鍵をもとに復号化用の鍵を作成されてしまうと、この方法は成り立たなくなる
「暗号化はできるが、復号化には結びつかない鍵」として、素因数分解が使われる(このアルゴリズムをRSAと呼ぶ)
「合成数から素数を得る」計算は、その逆の「素数から合成数を得る」に比べてコストが非常に高いことが利用される
ただし公開鍵暗号は共通鍵暗号に比べて暗号化&復号の総計算コストが高いため、実際にHTTPSで情報をやりとりする場合には
1. SSL認証を行いつつ、送信者が受信者の公開鍵を取得する
2. 送信者はその場限りの共通鍵を生成し、公開鍵で暗号化して受信者に送信する
3. 受信者は復号を行い、共通鍵を取得する
のように、「公開鍵暗号+共通鍵暗号」というハイブリッド方式を取る
これにより、安全性と高速性の両立を図っている
■RSA暗号の原理とその解読
3288743189 と 3285521957 の積は 10805237958393700873 である…という計算はコンピュータなら容易だが、
10805237958393700873 は何と何の素数の積か?…という計算には、桁が多くなると非常に時間がかかる
(素因数分解は総当たりで求めるしか方法が無いため)
秘密鍵には「3288743189 と 3285521957 の積は 10805237958393700873 である」という情報を含ませているが、
公開鍵には「10805237958393700873」という積しか持たせていない
これにより、「秘密鍵から公開鍵を作成するのは容易だが、公開鍵から秘密鍵を作成するのは難しい」を実現させている
ただし数値の桁数が小さいと解読されてしまうため、現在は2048bit(256byte)で秘密鍵を作るのが一般的になっている
短いビット長ならRSA暗号の解読は可能
具体的な手順は以下が参考になる
(短いビット長の)RSA暗号を解いてみる - clock-up-blog
http://blog.clock-up.jp/entry/2016/12/15/crack-rsa-key
■SSL証明書の発行
1. SSLを適用させたいサーバ上で、秘密鍵を作成する。この鍵は流出してはいけない
2. 秘密鍵をもとにCSRを作成する。CSRには公開鍵、発行者情報やコモンネーム(FQDN)、電子署名(もとのCSRをハッシュ化し、さらに秘密鍵で暗号化したもの)が含まれる
3. CSRを認証局に渡すと、認証局が自身の秘密鍵を使ってCSRに電子署名を付与する。これがSSL証明書となる
4. SSL証明書を、SSLを適用させたいサーバに設置する
■中間証明書
証明書の発行はオンラインで迅速に行えるといいが、オンラインであるがゆえに、認証局の脆弱性を突かれて不正な証明書発行がされる可能性がある
このとき、認証局が発行したすべての証明書を無効にする必要があるが、影響範囲が非常に大きい
この対策に、認証局はオフラインで構築し、別途構築した複数の中間証明局で証明書を発行する
これなら中間認証局が攻撃された際の、影響範囲を抑えることができる
■共通鍵で可逆暗号化
同じアルゴリズムというわけではないが、参考程度に
PHPで可逆暗号化 | refirio.org
http://refirio.org/view/350