ファイルを暗号化した時、AES暗号を使用したのですがECB、CBC、XTSなど複数あり、暗号化の方法など違いが分かっていなかったので、調査しました。
目次
- 暗号利用モード
- AES暗号
- ECB
- CBC
- CTR
- XTS
- まとめ
- 参考にしたサイト
1. 暗号利用モード
暗号利用モードとは、ブロック暗号1を利用してブロック長よりもメカニズムのことです。
暗号利用モードには、秘匿用のモードと、データの秘匿性、完全性および認証制を同時に提供する認証用のモードがあります。
2. AES暗号
AESはAdvanced Encryption Standardの略で、高いセキュリティ性と高速性を備えた暗号化アルゴリズムとして広く知られています。
AES暗号化は共通鍵暗号方式の一種で、同じ鍵を使用して暗号化と復号を行います。
鍵の長さを128ビット、192ビット、256ビットの3種類から選択することができます。長いほうが解読される可能性は低くなるというメリットはありますが、その分暗号化と復号の処理にかかる時間が増えるというデメリットもあります。
今回使用したECB、CBC、CTR、XTSについて暗号化の方法などの違いを調べました。
1. ECB
ECBはElectronic Codebookの略で、もっとも単純な暗号利用モードです。
128ビットのデータブロックごとに同じ暗号化キーを使用して暗号化します。
プレーンテキストと呼ばれる暗号化されていない同じブロックのデータが同じ方法で暗号化されるため、データパターンを隠せず、セキュリティ上の脆弱性があります。
画像引用元: wikipedia
https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%88%A9%E7%94%A8%E3%83%A2%E3%83%BC%E3%83%89
2. CBC
CBCはCipher Block Chainingの略で、最も広く用いられている暗号利用モードです。
ECBの弱点を解決するため、プレーンテキストの各ブロックは前の暗号文とのXORを取ってから暗号化されます。
各々の暗号文ブロックはそれ以前のすべての平文ブロックに依存することとなり、メッセージごとのユニーク性を確保するため、最初のブロックの暗号化には初期化ベクトル2が用いられます。
暗号化の流れ
画像引用元: wikipedia
https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%88%A9%E7%94%A8%E3%83%A2%E3%83%BC%E3%83%89
3. CTR
CTRはブロック暗号を同期型のストリーム暗号3として扱う暗号モードです。
「カウンター」と呼ばれる値を暗号化することで鍵ストリームブロックを生成します。
カウンターは単調増加であり値の重複がなければどのような関数でも用いることができます。1ずつ増加するものがもっとも単純でありもっとも一般的です。
暗号化の流れ
画像引用元: Kingston
https://www.kingston.com/jp/blog/data-security/xts-encryption
4. XTS
XTSは最新のブロック暗号モードで、IronKey ドライブで使用されています。
2つの独立したAESキーを使うため、2重暗号化と近い状態になります。
各ブロックが独立していてチェーニングを使用しないため、保存された暗号文が壊れたとき復元不可能になるデータはそのブロックのみに制限されます。
画像引用元: Kingston
https://www.kingston.com/jp/blog/data-security/xts-encryption
まとめ
AES暗号化は複数ありますが、ECBは解読されやすいため使わないほうがよく、CBC/CTRはECBの欠点を解消していて広く使用されていることがわかりました。
最新のブロック暗号モードはXTSで、CBC/CTRよりも強力な暗号化モードです。
今回調べた以外にも暗号利用モードは種類があるので、必要に応じて使いこなせるようになりたいと思いました。
参考にしたサイト
https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%88%A9%E7%94%A8%E3%83%A2%E3%83%BC%E3%83%89
https://study-sec.com/aes/#1-1_AES
https://www.kingston.com/jp/blog/data-security/xts-encryption