テキスト暗号化 / 復号化
AES-256-GCMを使ってブラウザ内でテキストを直接暗号化・復号化します。データが端末の外に送信されることはありません。
テキスト暗号化 / 復号化
テキストとパスワードを入力して、「暗号化」または「復号化」を押してください。
OpenSSL コマンドリファレンス(AES-256-CBC)
OpenSSL を使えば、コマンドラインからテキストを暗号化・復号化することもできます。以下のコマンドは AES-256-CBC と PBKDF2 による鍵導出(100,000 回反復、SHA-256)を使用します。
暗号化するには、暗号化対象テキスト を暗号化したいテキストに置き換え、設定するパスワード を任意のパスワードに置き換えてください。復号化する場合は、暗号文BASE64 を暗号化コマンドが出力した Base64 文字列に置き換えてください。
暗号化
printf '%s' '暗号化対象テキスト' | openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -pass pass:'設定するパスワード' -a
復号化
echo '暗号文BASE64' | openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -pass pass:'設定するパスワード' -a
結果が異なるのはなぜですか?
上の Web ツールは AES-256-GCM(認証付き暗号)を使用しますが、OpenSSL コマンドは AES-256-CBC を使用します。これは openssl enc が GCM モードをサポートしていないためです。両者は出力形式がまったく異なるため、この Web ツールで OpenSSL の出力を復号化することも、その逆を行うこともできません。ただし、どちらも同じパラメータの PBKDF2(SHA-256、100,000 回反復)で暗号鍵を導出します。
このツールの使い方
「平文」欄に保護したいテキストを入力または貼り付け、強力なパスワードを設定して「暗号化」を押します。すると、復号化に必要な情報がすべて入った Base64 文字列が返されます。ソルト、IV、認証タグ、暗号文が 1 つのブロックにまとめられています。
元に戻すには、「復号化」モードに切り替え、Base64 文字列を貼り付け、同じパスワードを入力して「復号化」を押します。パスワードが正しく、データが改ざんされていなければ、元の平文がすぐに表示されます。
AES-256-GCM はどれくらい強力ですか?
パスワードを失っていない限り、それを使わずに平文を復元することは、非常に高性能なコンピューターを使っても極めて困難です。AES-256 の鍵空間は であり、総当たり攻撃は現在の技術でも将来的に想定できる技術でも現実的ではありません。さらに PBKDF2 による鍵ストレッチング(100 000 回反復)も加わるため、安易なパスワード推測も実用的ではありません。
ただし、弱いパスワードや使い回しのパスワードでは、この利点が大きく損なわれます。必ず強力で一意のパスフレーズを使ってください。
対称暗号とは?
対称暗号では、暗号化と復号化の両方に同じ鍵(パスワードから導出された鍵)を使います。公開鍵と秘密鍵のペアを用いる非対称暗号とは異なり、対称方式はシンプルで高速なため、双方が同じ秘密を共有している状況で、保存データや通信中のデータを保護するのに適しています。
なぜ AES-256-GCM を使うのですか?
- 認証付き暗号:GCM(Galois/Counter Mode)は、1 回の処理で機密性と完全性の両方を提供します。暗号文が 1 ビットでも改変されると、復号化は認証エラーで失敗し、文字化けした出力を返しません。
- 広く信頼されている:AES-256 は、政府機関、金融機関、そして世界中のセキュリティ重視ソフトウェアで使われている暗号化標準です。
- 業界標準:TLS 1.3 の既定暗号スイートの一部であり、NIST に推奨され、Web Crypto API を通じて主要なプラットフォームでネイティブにサポートされています。
このツールでは常に同じ固定アルゴリズムを使うため、暗号化側と復号化側でアルゴリズムの不一致を心配する必要はありません。
暗号化 / 復号化の仕組み
- 鍵導出(PBKDF2) — パスワードはそのまま暗号鍵として使われるわけではありません。代わりに、ランダムな 16 バイトのソルトと一緒に PBKDF2 に入力され、SHA-256 を 100 000 回反復して処理されます。出力は 256 ビット鍵となり、パスワードだけから逆算するのは計算上非常に困難です。
- 暗号化 — ランダムな 12 バイトの IV(初期化ベクトル)が生成されます。続いて AES-256-GCM が、導出した鍵と IV を使って平文を暗号化し、暗号文と、復号時に検証される 16 バイトの認証タグを生成します。
- パッキング — ソルト、IV、認証タグ、暗号文をその順番で連結し、1 つの Base64 文字列としてエンコードします。つまり、受け取る側はパスワードだけ分かっていればよく、他の情報はすべて出力に埋め込まれています。
- 復号化 — Base64 文字列をデコードし、ソルト、IV、タグ、暗号文に分割します。PBKDF2 がパスワードとソルトから同じ鍵を再導出し、AES-256-GCM がデータを復号します。タグの検証に失敗した場合、処理はただちに失敗します。これにより、パスワード違いと暗号文の改ざんの両方を防げます。
プライバシーについて
すべての処理は完全にブラウザ内で実行されます。平文、パスワード、暗号文がサーバーへ送信されることはありません。ブラウザのネットワークインスペクターを開けば確認できますが、暗号化・復号化の間に外向きのリクエストは一切発生しません。
参考として、結果エリアには同じパスワードと反復回数で AES-256-CBC 暗号化を行う OpenSSL コマンドも表示されます。これらはローカルのコマンドライン暗号化を試すための例ですが、その出力はこのツールでは復号できず、逆も同様です。互換性がない理由は 2 つあります。
- 暗号モードが異なる — このツールは AES-256-GCM(認証付き暗号)を使います。
openssl encは GCM モードをサポートしていないため、コマンドは AES-256-CBC にフォールバックします。こちらには認証タグが組み込まれていません。
- バイナリ形式が異なる — このツールは出力を
salt(16 bytes)+ IV(12 bytes)+ auth tag(16 bytes)+ ciphertextの形でまとめ、それを Base64 エンコードします。OpenSSL は独自のSalted__ヘッダー形式を使い、ソルトは 8 バイトで、認証タグも含まれません。
こうした違いがあるため、ここで生成した暗号文はここでしか復号できず、これらの OpenSSL コマンドで生成した暗号文は対応する openssl enc -d コマンドでしか復号できません。