暗号化の基礎知識とパスワード保護

この記事は約 4 分で読めます

インターネット上でやり取りされるデータは、暗号化によって第三者からの盗聴や改ざんを 防いでいます。パスワードの保護もこの暗号技術に深く依存しており、暗号化の基礎を 理解することは、自分のアカウントを守るうえで欠かせない知識です。本記事では、 共通鍵暗号と公開鍵暗号の違い、ハッシュ化の仕組み、そしてパスつく.com が生成する パスワードの暗号学的な強度について解説します。

暗号化とは何か

暗号化とは、元のデータ (平文) を特定のアルゴリズムと鍵を使って、意味のわからない データ (暗号文) に変換する処理です。正しい鍵を持つ受信者だけが暗号文を元の平文に 復号できるため、通信経路上で第三者にデータを傍受されても内容を読み取られません。 HTTPS 通信、メールの暗号化、ファイルの保護など、日常のあらゆる場面で暗号技術が 使われています。

暗号化の強度は、使用するアルゴリズムの種類と鍵の長さによって決まります。 鍵が長いほど、総当たりで正しい鍵を見つけるのに必要な計算量が指数関数的に増加し、 解読が困難になります。たとえば AES-128 の鍵空間は 2 の 128 乗 (約 3.4 × 10 の 38 乗) 通りであり、 毎秒 10 億個の鍵を試行しても全探索に約 10 の 21 乗年を要します。 現在の標準的な暗号アルゴリズムでは、128 ビット以上の鍵長が推奨されています。

共通鍵暗号と公開鍵暗号

共通鍵暗号 (対称鍵暗号)

共通鍵暗号は、暗号化と復号に同じ鍵を使用する方式です。代表的なアルゴリズムとして AES (Advanced Encryption Standard) があり、高速な処理が可能なため、 大量のデータを暗号化する場面で広く使われています。AES-256 は 1 秒あたり 数 GB のデータを暗号化でき、ファイルの暗号化やディスク全体の暗号化 (BitLocker、FileVault) にも採用されています。

共通鍵暗号の課題は「鍵の配送問題」です。送信者と受信者が同じ鍵を共有する必要が あるため、鍵そのものを安全に相手に届ける手段が求められます。この問題を解決する ために考案されたのが公開鍵暗号です。よくある誤解として「共通鍵暗号は古い技術で 安全性が低い」と思われがちですが、AES は現在も最も広く使われる暗号アルゴリズムであり、 鍵の管理さえ適切であれば極めて高い安全性を持ちます。

暗号アルゴリズムの原理を体系的に学ぶには、暗号技術の入門書 (Amazon)が参考になります。

公開鍵暗号 (非対称鍵暗号)

公開鍵暗号は、暗号化に使う「公開鍵」と復号に使う「秘密鍵」の 2 つの鍵を ペアで使用する方式です。公開鍵は誰にでも公開でき、秘密鍵は所有者だけが保持します。 RSA や楕円曲線暗号 (ECC) が代表的なアルゴリズムです。RSA-2048 の安全性は 2030 年頃まで十分とされていますが、より長期的な安全性を求める場合は RSA-4096 や ECC (256 ビット以上) が推奨されます。

HTTPS 通信では、最初に公開鍵暗号で共通鍵を安全に交換し、その後の通信は 高速な共通鍵暗号で行うハイブリッド方式が採用されています。この仕組みにより、 鍵の配送問題を解決しつつ、高速な暗号化通信を実現しています。注意点として、 公開鍵暗号は共通鍵暗号に比べて処理速度が 100〜1000 倍遅いため、 大量データの暗号化には直接使用せず、鍵交換やデジタル署名に限定して使うのが一般的です。

ハッシュ化とパスワード保護

暗号化とは異なり、ハッシュ化は一方向の変換です。元のデータからハッシュ値を 計算できますが、ハッシュ値から元のデータを復元することはできません。 この性質を利用して、サービス側はパスワードをハッシュ化して保存します。 ログイン時には、入力されたパスワードをハッシュ化し、保存されたハッシュ値と 比較することで認証を行います。

現在推奨されるパスワードハッシュアルゴリズムは bcrypt、scrypt、Argon2 です。 これらは意図的に計算コストを高く設計されており、攻撃者が総当たりで パスワードを推測する速度を大幅に低下させます。たとえば bcrypt (コストファクター 12) では 1 回のハッシュ計算に約 250 ミリ秒かかるため、GPU を使っても毎秒数千回程度しか 試行できません。一方、SHA-256 のような汎用ハッシュ関数は毎秒数十億回の計算が可能であり、 パスワードのハッシュ化には適していません。

ソルトとペッパー

ハッシュ化の際に「ソルト」と呼ばれるランダムな文字列をパスワードに付加することで、 同じパスワードでも異なるハッシュ値が生成されます。これにより、事前に計算された ハッシュ値のテーブル (レインボーテーブル) を使った攻撃を無効化できます。 さらに「ペッパー」と呼ばれるサーバー側の秘密値を追加することで、 データベースが漏洩した場合でもパスワードの解読を困難にします。 ソルトなしでハッシュ化した場合、同じパスワードを使う全ユーザーが同一のハッシュ値を持つため、 1 つのパスワードを解読するだけで同じパスワードの全アカウントが危険にさらされます。

パスつく.com が生成するパスワードの暗号学的強度

パスつく.com は Web Crypto API の crypto.getRandomValues() を使用して パスワードを生成しています。この API は暗号学的に安全な疑似乱数生成器 (CSPRNG) に 基づいており、生成されるパスワードには統計的な偏りがありません。 CSPRNG は OS のエントロピープールから種を取得するため、Math.random() のような予測可能な疑似乱数とは根本的に異なります。

パスワードの強度はエントロピー (ビット数) で測定されます。たとえば、英大文字・ 英小文字・数字・記号の 4 種類 (約 95 文字) を使った 16 文字のパスワードは、 log2(95 の 16 乗) で約 105 ビットのエントロピーを持ちます。これは現在の スーパーコンピュータ (毎秒 10 の 18 乗回の演算) でも、全探索に約 10 の 13 乗年を 要する強度です。一方、英小文字のみ 8 文字のパスワードは約 38 ビットにとどまり、 数時間で解読される可能性があります。

パスワードのエントロピーと暗号学的強度を深く理解するには、パスワード強度と暗号理論の専門書 (Amazon)が実践的です。

暗号化を日常で活用するためのポイント

暗号技術の恩恵を最大限に受けるには、いくつかの実践的な習慣が重要です。 まず、HTTPS が有効なサイトでのみパスワードを入力してください。 HTTP のサイトでは通信が暗号化されず、パスワードが平文で送信されます。 2024 年時点で Web トラフィックの約 95% が HTTPS 化されていますが、 残りの 5% には依然としてリスクが存在します。

次に、パスつく.com で生成した十分な長さのランダムパスワードを使用してください。 暗号学的に安全な乱数で生成された 16 文字以上のパスワードは、 ハッシュ化された状態でも総当たり攻撃に対して極めて高い耐性を持ちます。 サービスごとに異なるパスワードを設定し、パスワードマネージャーで管理することで、 1 つのサービスが侵害されても他のアカウントへの影響を防げます。

端末に保存するデータについても、ディスク暗号化 (Windows の BitLocker、 macOS の FileVault、スマートフォンの端末暗号化) を有効にしておくことで、 端末の紛失や盗難時にデータを保護できます。暗号化は「設定して終わり」ではなく、 強力なパスワードと組み合わせて初めて真価を発揮する技術です。 ディスク暗号化のパスワードが脆弱であれば、暗号化自体が無意味になる点に注意してください。