ToolActToolAct

AES暗号化・復号化ツール

6つのモードと5つのパディングオプションを備えたプロフェッショナルAES

暗号化設定

入力内容
文字数: 0
バイト数: 0
変換結果
文字数: 0
バイト数: 0

AES暗号化とは?

AES(Advanced Encryption Standard)は現在世界中で最も広く使用されている対称暗号化アルゴリズムで、NSAによって最高機密情報の保護に承認されています。AESはベルギーの暗号学者Joan DaemenとVincent Rijmenが設計したRijndael暗号から発展し、2001年にNISTによって正式に発行され、安全性が低下したDESアルゴリズムの代替となりました。 AESは固定ブロックサイズ128ビット(16バイト)のブロック暗号化を使用し、128、192、256ビットの3つのキー長をサポートし、AES-128、AES-192、AES-256の3つのセキュリティレベルに対応します。キーが長くなるほどセキュリティは高くなりますが、暗号化・復号化の速度はわずかに低下します。対称暗号化アルゴリズムとして、AESは暗号化と復号化に同じキーを使用するため、非対称暗号化アルゴリズムよりはるかに効率的です。 AESの応用範囲は非常に広く、ネットワークセキュリティではTLS/SSLプロトコルがWeb閲覧とメール転送を保護するためにAESを使用し、ストレージセキュリティではBitLocker、FileVaultなどのディスク暗号化ツールがユーザーデータの暗号化にAESを採用し、データベースセキュリティでは多くのシステムがAES列レベル暗号化をサポートし、IoTではデバイス間の安全な通信に広く使用されています。このツールはAESの全6つの暗号化モード(ECB、CBC、CFB、OFB、CTR、GCM)と5つのパディング方式をサポートし、さまざまな暗号化ニーズに対応します。

使い方

使い方

  1. 暗号化モードを選択(暗号化と完全性検証にはGCMを推奨)
  2. パディング方式を選択(GCM/CFB/OFB/CTRモードは自動的にパディングなし)
  3. 鍵長を選択(最高セキュリティは256ビット、最高性能は128ビット)
  4. 鍵を入力するか「ランダム鍵生成」をクリックして自動生成
  5. IVが必要なモードでは、初期化ベクトルを入力または生成してください
  6. 左パネルに平文(暗号化時)または暗号文(復号時)を入力してください
  7. 結果は右パネルに自動表示されます
  8. 「コピー」で結果をコピー、「入替」で入出力を入れ替え

暗号化モード

  • GCMGalois/Counterモード(推奨)。暗号化と認証を同時に提供し、パディング不要で並列処理に対応。ネットワーク通信やTLSに最適
  • CBCブロック連鎖モード。各平文ブロックを前の暗号文ブロックとXORしてから暗号化する古典的モード。パディングとIVが必要で並列処理には非対応
  • CFB暗号フィードバックモード。ブロック暗号をストリーム暗号に変換する方式で、パディング不要。ストリーミングデータやリアルタイム暗号化に適する
  • OFB出力フィードバックモード。CFBと似ているがエラーが伝播しないため、ノイズの多い通信チャネルに適する。パディング不要
  • CTRカウンターモード。増加するカウンターからキーストリームを生成し、パディング不要。完全な並列暗号化に対応し、優れた性能を発揮
  • ECB電子コードブックモード(非推奨)。同じ平文は同じ暗号文になり、データパターンが漏れる。単一データブロックの暗号化にのみ適する

パディング方式

  • PKCS7PKCS#7パディング(最も一般的で推奨)。Nバイトの不足を値Nのバイトで自動補完し、復号時にあいまいさなく正確に除去可能
  • ZeroPaddingゼロパディング。0x00バイトで埋める方式。シンプルだが、データ末尾が0x00の場合はあいまいさが生じる可能性あり
  • NoPaddingパディングなし。データ長が16バイトの正確な倍数である必要があり、ストリームモードや長さ既知のデータに適する
  • ISO7859ISO/IEC 7816-4パディング。先頭バイトが0x80で残りは0x00。スマートカードや金融業界で広く使用される
  • ANSIX923ANSI X.923パディング。パディング部はすべて0x00、末尾バイトがパディング長を示す。金融データ交換で一般的に使用

使い方のヒント

  • 鍵は暗号学的に安全な乱数で生成し、推測しやすい文字列は避けてください
  • 暗号化ごとに異なるランダムなIVを使用し、IVの再利用は絶対に避けてください
  • GCMモードは12バイト(96ビット)のIVを推奨し、最適な性能とセキュリティを実現します
  • CTRとGCMモードは並列処理に対応し、大量データの高速暗号化が可能
  • 鍵とIVは16進数、テキスト、Base64形式で入力できます
  • 16進数での鍵長:128ビット = 32文字、192ビット = 48文字、256ビット = 64文字

利用シーン

AES連携の仕様を正確に再現する他のシステムがAES-256-CBCとPKCS#7、16進数キー、Base64 IV、Base64暗号文の組み合わせを指定している場合に、このページを使えばテスト用のコードを書かずにその仕様に合わせられます。キー、IV、入力、出力形式をそれぞれ個別に設定でき、すべての演算(SubBytes、ShiftRows、MixColumns、AddRoundKey)はaes-js実装によりブラウザ内で完結するため、暗号文がネットワークを経由せず、キーがタブの外に出ることはありません。
モードとパディングを比較してから選択するECB、CBC、CFB、OFB、CTR、GCMを切り替え、パディングが適用されるモードではPKCS#7、ZeroPadding、NoPadding、ISO/IEC 7816-4、ANSI X.923を試すことができます。ストリーム系モード(CFB、OFB、CTR)がパディング不要な理由やECBがパターンを漏洩する理由を実際に確認でき、CBCに必要な16バイトIVとGCM推奨の12バイトIVを同じ平文で比較検証できます。
ドキュメント用の安全なサンプル資料を作成する現在の表示形式でランダムなキーとIVを生成し、無害な平文を暗号化した結果を16進数やBase64でコピーすれば、READMEのサンプル、APIチケット、クロス言語テストベクトルに利用できます。キーと平文はブラウザタブ内に留まるため、本番に近いデータをリモートのエンコーダーに送らずにリアルなサンプルを作成できます。
他のライブラリとの出力差異を診断するNodeのcrypto、Pythonのpycryptodome、Javaのjavax.cryptoで生成した暗号文をこのページで復号できない場合、モードとパディングを仕様に合わせて切り替え、IV長、キー長、入力エンコーディングが一致するか確認してからアプリケーションコードを修正します。よくある原因として、AES-CBCのPKCS#7とZeroPaddingの混同、AES-GCMで受信側がIV+暗号文の後に16バイトの認証タグを付加することを期待しているケースなどがあります。
GCM認証タグの扱いを実演するGCMで暗号化し、ページが暗号文の末尾に付加する16バイトの認証タグを取得して、タグの切り詰めや並べ替えで受信側が暗号文を拒否することを確認できます。タグの扱いミスは例外ではなくサイレントな復号失敗として表面化することが多いため、ここでAEADの動作をテストしておくと、連携先への反映前に問題を発見できます。

仕組み

AES(Advanced Encryption Standard)は、1997年に始まった15候補による5年間の公開コンペティションを経て、2001年11月にNISTからFIPS 197として発行された。優勝はベルギーの暗号学者Joan DaemenとVincent Rijmenが設計したRijndaelで、Twofish、Serpent、RC6、Marsを破った。AESはDES(FIPS 46、2005年に廃止)に代わり、現在世界で最も広く導入された対称ブロック暗号である:TLS 1.2/1.3、IPsec、BitLocker、FileVault、OpenSSLのデフォルト`aes-256-gcm`、Linuxカーネルのdm-crypt、AppleのCryptoKit、AndroidのKeystoreに搭載されている。NSAは2003年にAES-256をTOP SECRET(Suite A)で承認し、AESは米国の最高機密レベルに承認された初の公開暗号となった。ブロックサイズは128ビット(16バイト)で固定、鍵サイズは128、192、256ビットで、それぞれ10、12、14ラウンドに対応する。 各ラウンド(最終ラウンドを除く)では4x4バイト状態に4つの演算を適用する。SubBytesは16x16の固定S-Box(0x63 = 01100011が6行3列に位置、S-BoxはGF(2^8)での乗法逆元にアフィン変換を加えて代数構造を破壊して構成される)を適用し、ShiftRowsは行0を0バイト、行1を1バイト、行2を2バイト、行3を3バイト回転させ、MixColumnsはGF(2^8)上の固定巡回MDS行列(多項式0x03 * xの行列形式)で各列を乗算し、AddRoundKeyでラウンド副鍵とXORする。最終ラウンドではMixColumnsをスキップする。ラウンド鍵はRijndael鍵スケジュールから生成され、128ビットずつの11/13/15個のラウンド鍵をRotWord(1バイト左回転)、SubWord(S-Box適用)、GF(2^8)上のRcon[i] = [0x01, 0x02, 0x04, ..., 0x80, 0x1b, 0x36] *2^(i-1)とのXORで生成する。ページの`aes-js`ライブラリは4ステップすべてを純粋JavaScriptで実行し、OpenSSLのlibcryptoとバイト互換性がある。 5つのブロックモードを提供している。ECBは16バイトブロックごとに独立して暗号化し、同一平文ブロックは同一暗号文ブロックを生成して構造を漏洩する(有名なECBペンギン画像はピクセルパターンが暗号化後も残る)。CBCは暗号化前に各平文ブロックを前の暗号文ブロックとXORし、最初のブロックはIVとXORする。CTRは増加するカウンター(nonce || counter、128ビットブロックの64ビットずつの2半分)を暗号化してキーストリームを生成し平文とXORすることでAESをストリーム暗号に変え、ランダムアクセスと並列暗号化をサポートする。GCMはCTRにGHASH(GF(2^128)のユニバーサルハッシュ認証子)を加え、暗号文の後に16バイトの認証タグを付加する。GCMはTLS 1.3(RFC 8446)とほとんどのモダンAPI(Node `crypto.createCipheriv('aes-256-gcm', ...)`)のデフォルトAEADである。CFBとOFBは互換性のために残された古いストリーム暗号モードである。 IVの落とし穴は本番環境で最も頻発するバグだ。GCMで96ビット(12バイト)IVを使用するのはNIST推奨構成(RFC 5288、NIST SP 800-38D §5.2.1.1)で、12バイトIVはカウンターとして扱われ、GHASHはJ0 = IV || 0x00000001に対して計算される。CTRモードで同一鍵のIVを再利用すると平文のXORが漏洩する(C1 XOR C2 = P1 XOR P2 — 1回の選択平文攻撃で両メッセージを復元可能)。GCMでのIV再利用はさらに深刻で、攻撃者が認証副鍵Hを復元し任意のメッセージのタグを偽造できる(Joux 2006の攻撃、NISTがランダム96ビットIVに厳格な一意性を義務化した理由)。ページはGCM用に`crypto.getRandomValues(new Uint8Array(12))`で12バイトIVを、CBC/CFB/OFB用に16バイトIVを生成し、ランダム鍵ボタンも同じCSPRNGを使用して暗号化ごとに新しい素材で開始する。 本ツールは AES の暗号化・復号をすべてブラウザ内で aes-js(純粋 JavaScript の AES 実装)により実行します。Web Crypto / SubtleCrypto へのフォールバック経路はなく、ペイロードのサイズに関わらず全演算が aes-js を通ります。

  • AESはFIPS 197(2001年)で、NISTの公開コンペティション(15候補)を経て選定された。RijndaelがTwofish、Serpent、RC6、Marsを破った。ブロックサイズは常に128ビット、鍵サイズ128/192/256ビットでそれぞれ10/12/14ラウンド。本ページはaes-jsのAES_128、AES_192、AES_256コンストラクタで全3サイズに対応する。
  • 4ステップのラウンド関数:SubBytes(GF(2^8)逆元+アフィン変換の256バイトS-Box)、ShiftRows(行を0/1/2/3バイトシフト)、MixColumns(GF(2^8)上の0x03多項式によるMDS行列乗算)、AddRoundKey(ラウンド鍵とのXOR)。最終ラウンドではMixColumnsをスキップ。同一アルゴリズム・同一鍵=同一暗号文 — AESは決定論的である。
  • ECBは同一平文ブロックが同一暗号文ブロックを生成するため安全でない(有名な「ECBペンギン」画像は輪郭が残る)。CBCは安全な古典モード、CTRは並列性を追加、GCMは認証機能を備えTLS 1.3のデフォルト(RFC 8446)。CFBとOFBはレガシー互換性のために維持されているストリーム暗号モードである。
  • PKCS#7パディング:1バイト不足の場合→0x0fの15バイト+0x10の1バイト、2バイト不足の場合→0x0eの14バイト+0x0fの2バイト、という具合に進む。最後のバイトの値がパディング長を示すため、パディング除去はあいまいさがない。ストリームモード(CTR/CFB/OFB/GCM)はパディングを完全にスキップする。ZeroPaddingはデータ末尾が0x00の場合にあいまいになるため使用すべきでない。
  • GCMはAEAD:暗号文に加えてGHASH(GF(2^128)上でH = AES_K(0^128)を使用)で計算された16バイトの認証タグを付加する。AAD(追加認証データ)はヘッダーを暗号化せずにカバーする。96ビットIV(RFC 5288)はカウンターとして扱われ、128ビットIVはGHASHでJ0を導出する — 同じセキュリティでわずかに遅い。
  • IVの再利用は壊滅的だ。CTRのIV再利用はP1 XOR P2を漏洩する(ワンタイムパッドの二重使用)。GCMのIV再利用(Joux 2006)では攻撃者がHを復元しタグを偽造できる。ページは`crypto.getRandomValues`(CSPRNG)でIVを生成し、セッション内で再利用せず、IVを暗号文の先頭に付加して復号側が帯域外状態なしに復元できるようにする。
  • AES 鍵生成:本ツールの「ランダム鍵生成」ボタンはブラウザの `crypto.getRandomValues`(CSPRNG)を使用します。AES ラウンド計算は aes-js(純粋 JavaScript 実装)を経由し、同一の鍵・IV・パディング設定で OpenSSL libcrypto とバイト単位で一致します。
  • サイドチャネルの現実:純粋JSのAESは定数時間ではない(S-Box配列へのインデックスアクセスでタイミングが漏洩する)。Web CryptoのAESはネイティブコードで定数時間だ。高リスクワークロード(HSM、サーバー側KDF)ではネイティブパスを優先すべきだが、ブラウザ内学習ツールとしては入力はすでにページのメモリにあるためaes-jsで十分だ。移行パス:ハッシュはSHA-1 → SHA-256、暗号はDES → AES、モードはECB → GCM。

使用例

AES-128-CBC 暗号化

平文:   Hello, World!
鍵:     0123456789abcdef0123456789abcdef (32 hex = 128 bit)
IV:     fedcba9876543210fedcba9876543210 (32 hex = 128 bit)
モード: CBC / PKCS#7 / 128-bit

ツールは出力パネルに暗号文 (Base64 と Hex) を表示します。
「コピー」で値をコピー、「入れ替え」で復号して元に戻せます。
PKCS#7 パディングは 3 バイト (0x03 0x03 0x03) を追加し、
パディング後の平文がちょうど 1 つの AES ブロックに収まります。

FIPS: FIPS 197 が AES を、NIST SP 800-38A が CBC モードを定義

AES-256-GCM 認証付き暗号化

平文:   sensitive data payload
鍵:     6f8a3b2c1d9e7f5a4b8c0d2e1f3a5b7c9d1e3f5a7b9c1d3e5f7a9b1c3d5e7f9a (64 hex = 256 bit)
IV:     1a2b3c4d5e6f708192a3b4c5 (24 hex = 12 バイト、GCM 推奨長)
モード: GCM / NoPadding / 256-bit / AAD なし

出力形式: IV (12B) || 暗号文 || AuthTag (16B)

FIPS: NIST SP 800-38D が GCM モードを定義。96-bit IV はカウンタとして扱われる

AES-128-ECB (FIPS 197 Appendix B のテストベクタ)

鍵:           2b7e151628aed2a6abf7158809cf4f3c (128 bit)
平文:         3243f6a8885a308d313198a2e0370734
暗号文 (Hex): 3925841d02dc09fbdc118597196a0b32

モード: ECB / 128-bit

注: ECB は 16 バイトブロックを独立に暗号化します。
同じ平文ブロックは常に同じ暗号文ブロックになります。
FIPS: FIPS 197 Appendix B がこの正規テストベクタを提供

AES 各モードのセキュリティ比較

ECB:  IV なし、決定的、パターンが漏れる - 本番環境では絶対に使わない
CBC:  ランダム IV、復号のみ並列化可、完全性のため HMAC が必要
CTR:  カウンタ IV、暗号化/復号とも並列化可、MAC が必要
GCM:  ランダム IV、並列化可、認証タグを内蔵

新規システムでは AES-256-GCM を推奨:
- 256-bit 鍵は量子攻撃 (Grover のアルゴリズム) に耐性あり
- GCM は 1 つの操作で機密性と完全性の両方を提供
- TLS 1.3 は AES-GCM のような AEAD 暗号を必須化

NIST: NIST SP 800-38A/D がこれらのモードを規定

よくある質問

AESとは何ですか?対応している鍵長は?

AES(Advanced Encryption Standard、FIPS 197)は、現代のHTTPS、Wi-Fi WPA2、ディスク暗号化のほとんどを支える対称鍵暗号です。本ページでは128ビット、192ビット、256ビットの鍵に対応しています。AES-128は高速で、ほぼすべての用途で十分な安全性があります。AES-256は、将来の量子暗号解析に対する長期的な耐性が必要な場合にのみ選択してください。

ECB、CBC、CFB、OFB、CTR、GCMのうち、どのモードを使うべきですか?

ECBは単一ブロックのテストベクター以外では安全ではありません(パターンが漏洩します)。CBCとCTRは機密性のみを提供するため、別途MACが必要です。GCMは現代の標準であり、暗号化と同時に暗号文を認証します。HTTPSでも採用されている方式です。レガシーシステムとの互換性が必要な場合を除き、GCMを選んでください。

どのパディングを使えばよいですか?

PKCS#7(PKCS#5とも呼ばれます)は、ECBおよびCBCモードの標準的なパディングです。CTR、CFB、OFB、GCMはストリーム型のモードでパディングが不要なため、本ページでは「NoPadding」が強制されます。復号時に「bad padding」エラーが発生する場合、最も多い原因は両端で鍵、IV、パディング設定が一致していないことです。

なぜ同じテキストを暗号化するたびに異なる暗号文になるのですか?

ECB以外のモードでは、暗号化ごとにランダムであるべきIV(初期化ベクトル)を使用します。同じ平文 + 同じ鍵 + 異なるIV → 異なる暗号文、となります。IVは秘匿する必要はないので暗号文の先頭に付加して構いません。ただし、CTRやGCMモードで同じ鍵に対してIVを再利用すると致命的で、暗号化が破綻します。

AESは耐量子安全ですか?

十分な規模の量子コンピュータ上でGroverのアルゴリズムを使用すると、AES-128の実効的な安全性は約64ビットまで低下し、AES-256は128ビットまで低下します。したがって、数十年にわたり秘匿が必要なデータには、保守的にAES-256を選ぶのが妥当です。対称鍵暗号であるAESは、RSAやECCに比べて量子計算の影響を受けにくいです。

暗号化はブラウザ内で行われますか?

はい。本ページは aes-js(純粋 JavaScript の AES 実装)をブラウザ内でローカル実行します。平文、鍵、IV がデバイス外に送信されることはありません。ブラウザのネットワークタブで確認できます。

鍵を安全に共有するにはどうすればよいですか?

本ツールを含め、本番環境の実鍵をWebページに貼り付けることは絶対に避けてください。本ツールは学習補助およびテストベクターの検証手段としてご利用ください。実際の鍵交換には、非対称方式(RSA-OAEP、ECDH/X25519)、ソルト付きのPBKDF2/Argon2によるパスワード派生鍵、あるいはマネージドKMSを使用してください。「チャットで鍵を送る」ような方法は禁物です。