暗号化とは
暗号化は、第三者が読めない形へデータを変換し、正しい鍵を持つ相手だけが復元できるようにする処理です。英語ではencryption(エンクリプション)といいます。
読める元データをplaintext(プレーンテキスト、平文)、変換後をciphertext(サイファーテキスト、暗号文)、戻す処理をdecryption(ディクリプション、復号)といいます。
アルゴリズムは公開されても安全であることを前提にし、秘密にする中心は鍵です。独自の変換方法を隠すだけでは、検証された暗号方式の代わりになりません。

暗号化の六つの構成要素
メッセージ、ファイル、ディスクブロック、パスワード保管庫など、復号前は利用できる内容です。
標準化され専門家の検証を受け、目的に合うモードとパラメーターを選びます。
十分なランダム性で生成し、用途を分け、保存・配布・回転・廃棄を管理します。
第三者に取得されても、鍵なしでは現実的な時間で平文を得にくい状態です。
認証付き暗号やMACを使い、暗号文の一部を書き換えられていないか確かめます。
正規端末でもマルウェアや画面共有があれば平文を読まれるため、終端も守ります。
共通鍵暗号と公開鍵暗号を組み合わせる
共通鍵暗号は暗号化と復号に同じ秘密鍵を使い、大量データを高速に処理できます。相手へ鍵を安全に共有する方法が課題です。AESなどが代表例です。
公開鍵暗号は公開鍵と秘密鍵の組を使います。公開鍵で暗号化し秘密鍵で復号する用途や、秘密鍵で署名し公開鍵で検証する用途があります。RSAや楕円曲線系の方式が使われますが、暗号化・署名・鍵合意は同じ操作ではありません。
TLSなどは、公開鍵技術で相手を認証して共有秘密を合意し、実データは効率のよい共通鍵暗号で守るhybrid構成を使います。
機密性だけでなく完全性と相手認証が必要
暗号化しただけでは、攻撃者が暗号文を書き換えたことを検出できない方式があります。現代の通信ではAEAD(Authenticated Encryption with Associated Data/オーセンティケーテッド・エンクリプション・ウィズ・アソシエーテッド・データ)などの認証付き暗号を使い、機密性と完全性を同時に守ります。
また、暗号化先の公開鍵が本物の相手のものかを確認しなければ、攻撃者の鍵へ安全に暗号化してしまいます。証明書や事前共有情報で相手を認証します。
保存時・通信中・エンドツーエンドでは復号地点が違う
暗号化at restはディスクやバックアップを保存中に守りますが、ログイン済み端末でファイルを開けば復号されます。暗号化inトランジットはTLSなどで通信区間を守りますが、サーバーで復号して処理できます。
エンドツーエンド暗号化は通信サービスのサーバーを含む中継点で本文を復号せず、送信者と受信者の端末だけが鍵を持つ設計です。ただし宛先、時刻、量などのメタデータ、端末バックアップ、通報機能の扱いは製品ごとに異なります。
鍵管理に失敗すると強いアルゴリズムも役に立たない
鍵をソースコードへ埋め込む、全利用者で共用する、暗号文と同じ場所へ平文で置く、退職者の鍵を失効しない、といった運用は保護を崩します。鍵を用途ごとに分け、アクセスを制限し、回転と破棄を記録します。
暗号化を評価するときは、アルゴリズム名だけでなく、何を守るか、鍵を誰が持つか、どこで復号するか、改ざんを検出するか、端末とバックアップがどう守られるかを確認します。
暗号化、平文、暗号文、鍵の用語確認資料:NIST Computer Security Resource Center「Encryption」