数学は全然なので暗号自体の数学的な仕組みはさっぱりです、ごめんなさい。😅
ですが数学の詳細は知らなくても使い方を正しく理解すれば活用する事は可能です。PKIの基礎知識が得られたらと思っています。
暗号のカテゴリーと種類
PKIで利用する暗号技術を以下に取りまとめます。
共通鍵暗号方式
暗号も復号も「同じ鍵」で行う方式です。共通鍵の最もわかりやすい例がブログタイトルにもある「パスワード」です。共通鍵が複雑なほど暗号強度は上がる傾向がありますが、それを人に要求するのはちょっと違うと考えてしまいます。💦
ですが現状では、有効な代替え手段がないのも現実です。比較的処理速度を出せるのでさまざまなシーンで活用されています。当然ですが、共通鍵が漏れてしまえば終わりです。以下に代表的な種類を挙げます。
種類 | 特徴 |
---|---|
DES(Data Encryption Standard) | データを特定長のブロック単位で暗号化する方式です。1977年より改善を重ねながら使われている暗号方式です。DESは脆弱性があるため、現在は利用が推奨されていないようです。 歴史ある暗号技術として紹介しました。 DES暗号 – Wiki |
AES(Advanced Encryption Standard) | こちらもブロック単位で暗号化する方式です。DESの後継として、標準的な共有鍵暗号として、広く普及しています。 AES暗号 – Wiki |
RC4 | データを逐次暗号化する方式です。ストリーム方式と呼ばれています。暗号化する為にブロック毎に切り出す必要が無いので、Web閲覧等の用途に向いています。そう、HTTPS(SSL通信)は実はRC4を使った共通鍵暗号方式でセキュアな通信を行なっています。そして初回接続時にPKI方式を使って共通鍵を交換するハイブリッドな仕組みで実現しています。 ストリーム方式 – Wiki, RC4 – Wiki HTTPS -Wiki, SSL/TLS -Wiki |
非対称鍵暗号方式
暗号と復号とを「異なる鍵」で行う方式です。現物(復号鍵)でしか開けない特性が「パスワードが嫌い」な私にとって最大の魅力に感じています。現物(復号鍵)さえあればパスワードなんて無粋なものは不要となるからです。実際こういったパスワードを知らないでも成立する仕組みは「ゼロ知識証明」という名前で古くから研究されていています。例えば、S/MIMEの様な暗号メールツールは分かりやすい活用事例です。演算リソースを駆使して情報を資産とするブロックチェーンも非対称鍵暗号の利用事例です。
広く知られているPKI(公開鍵暗号基盤)は非対称鍵暗号の使われ方の一つだと私は理解しています。復号用の鍵を公開しても、インプットとなる暗号化された情報自体は「暗号時に使用した鍵」がないと「作る事が困難」なので、それならば「復号鍵は配っても問題ない」との考えの基で作られたのがPKIです。特に再作成が難しいという特性は単なる暗号化に留まらず、公開された情報の「真贋を判定」する「電子署名」という素晴らしい利用方法が生み出されました。
種類 | 特徴 |
---|---|
RSA | 素因数分解の難しさを利用した暗号技術です。鍵ペアA/Bを使って、鍵Aで暗号化→鍵Bで復号、鍵Bで暗号化→鍵Aで復号といった双方向で利用できる特徴があります。 RSA暗号 – Wiki |
楕円曲線暗号 | 楕円曲線の数学的特性を使用した暗号技術です。RSAと比較して、はるかに小さいキーサイズで同等の暗号強度を提供します。 楕円曲線暗号 – Wiki |
暗号の使い方
暗号技術をうまく使う事で情報に信用を与える事が可能です。この信用を得る仕組みを総じて「情報セキュリティ」だと私は考えています。いろいろと細かく分類されているかと思いますが、ここではざっくりと以下に取りまとめます。
認証(Authentication)
復号出来る「情報を持っている事」は、特定のデータの出自を「論理的に証明」する 情報セキュリティです。要は、「この鍵で開けるから本物だ」だから得られるお墨付きが認証です。目の前の現物を確認する「ローカル認証」、ネットワークを介して認証する「ネットワーク認証」とあり、PKIはネットワーク認証において高機能なネットワーク認証を提供します。認証は「デジタル署名(Digital Signature)」用いて実現され、不正侵入やなりすましを防ぎます。
守秘性(Confidentiality)
データを意図した相手にのみ読める様にする事「暗号化(Encryption)」を利用した情報セキュリテイを示します。例えば、暗号化の機能を用いて盗聴の脅威を防ぐ事でしょうか。ZIPファイルを作成する際にパスワードを設定して持ち出すことも守秘性の獲得にあたります。
しかしながら、パスワードが流出した事自体を検知することはとても難しい事も理解しておく必要があります。ですから、守秘性を重視しすぎるととてもとても深い世界にはまり込んでしまいます。
完全性(Integrity)
データが改ざんされていない事を証明する情報セキュリティです。改ざんがないデータだと確認できれば、安心してデータを利用する事ができます。データが改ざんされていない事を証明するのも、守秘性を同じくとても大変な事です。
否認防止 (Non-Repudiation)
データへの所作を証明する事で、否認される脅威を抑止します。これは認証と完全性が機能していないと実現する事ができません。
PKIについて
PKIについての要点を取りまとめます。
提供する機能
PKIが提供する機能を表にまとめました。
提供機能 | 説明 |
---|---|
暗号化(Encryption) | データを暗号化して、第三者の盗聴を防ぐ。 |
デジタル署名(Digital Signature) | データに対して、データ作成者の署名を施します。署名を検証する事で、データ作成者の確証を得る事ができます。 |
構成要素
要素 | 説明 |
---|---|
認証局(Certification Authority) | 証明書所有者に、公開鍵と相対する秘密鍵の公開鍵証明書を発行します。公開鍵証明書の信頼性が失われた場合は、その証明書を失効させ、証明書失効リスト (CRL) を発行します。CRLをリポジトリに公開し、証明書利用者が証明書の確認を可能とします。 |
登録局(Registration Authority) | 証明書申請にあたり、本人の与信確認を行います。認証局に対し、証明書の発行や失効を要求します。 |
リポジトリ(Repository) | 証明書およびCRLの格納と公開を行います。 |
アーカイブ(Archive) | 証明書の長期保存、秘密鍵のバックアップを預かります。 |
証明書所有者(Certificate Holder) | 証明書および対応する秘密鍵を用いて、デジタル署名や暗号文の復号を行います。所有者は「秘密鍵の管理責任を負う」必要があります。 |
証明書利用者(Relying Party) | 証明書所有者の証明書を入手し、デジタル署名の検証や文書の暗号化を行います。リポジトリより証明書やCRLを取得し、有効性検証を行います。取得した証明書を使用して、署名検証や文書の暗号化を行います。 |
秘密鍵と公開鍵について
秘密鍵および公開鍵は、その名の通り公開鍵暗号基盤に固有の名称です。秘密鍵は公開鍵を「生成」する重要な役割を担い、公開鍵は広く「公開」し、秘密鍵の所有者のみが復号できる手段を不特定多数に提供する事ができます。公開鍵を使って暗号化する際には「パスワードが不要」です。この様な技術は「ゼロ知識証明」と呼ばれています。私は「知らなくても証明できる」という事を表す言葉と理解して使っています。😅
証明書のフォーマット(要約)
証明書所有者が所有して活用する公開鍵の証明書について(技術的な詳細は割愛して)鍵ペアの視点で要約してみました。ビジネスで使用できる証明書を作るためには所有者の与信が必要です。与信の結果は証明書チェーンとして記録され、いくつもの与信結果が積み重なって「信用できる証明書」が完成します。
証明書の与信状況を誰でも確認できる、とても良く考えられたシステムです。証明書チェーンという形で署名を連なって改ざんを困難にすることで信用を得ている事がわかります。
データの署名を作成
デジタル署名という優れた方法を使ってデータの完全性を高める事ができます、と説明しましたがイメージが難しいと思っています。私もそうでした。💦 どの様にデータの署名が作られるのか、私なりに簡素化しして以下に説明してみます。
- 署名したいデータのハッシュ値を算出します
- ハッシュ値を手元の秘密鍵を使って署名します
- PKIの署名とは「秘密鍵で暗号化する事」と考えて問題ありません
- データと電子署名とデータ所有者の証明書をデータ受領者に送ります
以上で、データ受領者にデータとデータの電子署名を送る事ができました。図上は証明書も同時に送るイメージですが、事前に送付しておいても差し支えありません。
署名を認証する
データ受領者は、受け取ったデータを電子署名で認証する事ができます。認証が通ったデータであれば安心して利用する事ができます。
- 証明書を検証し、安全に利用できるか確認する
- 認証したいデータのハッシュ値を算出します
- 証明書から公開鍵を取り出し、電子署名の認証を行います
- 具体的には電子署名を「公開鍵で復号」しデータ所有者が算出したハッシュ値を入手する事です
- データから計算したハッシュ値とデータ所有者が算出したハッシュ値を比較します
- 一致したら認証成功です、不一致ならば完全性が損なわれているので却下です
SSL/TLSについて
共通鍵暗号と公開鍵暗号を用いて、データ通信を暗号化する仕組みのことです。通信のやりとりが暗号化されていれば安心して通信できます。
Transport Layer Security(SSL/TLS) – Wiki
公開鍵暗号はPKIが採用されています。ビジネスで利用するのであれば、使用する公開鍵証明書には相応の与信が必要ですよね。
ですが与信付きの証明書は結構なお値段がするのも証明書チェーンの構造を見れば納得です。結果、公開鍵所有者はサービス側が持つのが一般的となりました。そうすると一つの公開鍵証明書をサービス利用者全員で共有する事になり、サービス利用者間では参照が可能となってしまいます。そこでPKIと共通鍵暗号によるハイブリッドな仕組みで安全な暗号通信を実現したのがSSL/TLSです。以下にやりとりの概要を示します。
ゼロ知識証明をうまく使って、サーバーとのE2E(End To End)通信を実現しています。現在は、さらにクライアントの与信の仕組みを追加する流れが加速しています。スマホによる認証がその代表格ですが、ベンダーにますます縛られてしまうのは非常に危険です。
まとめ
ひとまず、AKIに関係がありそうな暗号技術の概説は終わりです。私見ですが、個人で証明書を持つのはまだまだ難しいと感じています。私もこのブログサイトを立ち上げるためにサイト証明書を自分で作りましたが、やはり気楽に作れるものではありませんでした。(汗
最近はマイナンバーの推進で個人でも高品質な公開鍵証明書が持てる時代になってきました。使いやすいかどうかの課題はありますが、個人認証に証明書が使える事は大歓迎です。私が目指すのは「よくわからない」けど「使える」事なので細かい技術的な事は隠せるに越した事はないです。新しい仕組みが、世にあふれるIT恐怖症の方々(私も含む😅)の助けになればと切に願っています。
コメント