Qtの応用 - AES

2021年1月29日 (金) 19:16時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == AESは、DESおよび3DESに代わって規格化された共通鍵暗号方式である。<br> ブロック長は128ビット、鍵長は128ビット・192…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

概要

AESは、DESおよび3DESに代わって規格化された共通鍵暗号方式である。
ブロック長は128ビット、鍵長は128ビット・192ビット・256ビットが選択できる。

AESのソースコードは、Brian Gladman氏のWebサイトで公開されている。
アセンブラで記述されたもの(高速)とC言語で記述されたものが公開されている。


ブロック暗号化モード

AESには、ブロック暗号化モードという機能がある。
最も単純なのがECBモードであり、データを16[byte]ごとに区切って暗号化する。
しかし、Birthday Attack等に弱いという欠点があるため、ECBモードは使用するべきではない。

  • CBC
    暗号文ブロック連鎖モード(Cipher Block Chaining)
  • OFB
    出力フィードバックモード(Oftput Feed Back)
  • CFB
    暗号フィードバックモード(Cipher Feed Back)
  • ECB
    暗号ブックモード(Electric Code Book)


この他にも、PCBCやCounter Method等の新しい暗号利用モードも考案されている。

ECBモード

ECBモードは、1ブロックずつ単純に処理する。
ただし、ECBモードはブロック単位処理の裏をかいた暗号文一致攻撃をに弱い欠点がある。

暗号ブロックが一致した場合は復号した平文は一致するため、重要な秘密が漏れる可能性が高いと考えられる。
特定の暗号ブロックに対応する平文ブロックが1度でも知られると、同一の値を持つ暗号ブロックは全て解読される。

実際には、暗号文全体のうち部分的な平文は状況的に推測できるということは少なくないため、長い平文を暗号化する場合は非推奨である。

また、ブロック単位の差し替え等の暗号文改竄攻撃にも弱いという問題がある。
改竄攻撃を成功させるために、鍵を入手したり平文を正確に把握する必要が無いため、注意が必要である。

AESを使用した商用ソフトウェアにおいて、ECBモードが使用されることはほぼ無い。

CBCモード

CBCモードは、前の平文ブロックを暗号化した結果を、次の平文にXOR演算によって重ね合わせ、その結果に対して暗号化処理を行う。
最初のブロックを暗号化する場合、前の暗号文の最後のブロックを利用するか、または外部から与えた初期ベクトルを使用する。

前の暗号化結果が次のブロックに連鎖されるので連鎖モードと呼ぶ。
同一の平文から同一の暗号文が生成される可能性は極めて低いため、同一の平文が続く場合も安心して使用できる。

CBCモードに対する暗号文一致攻撃は、以下のように考えられる。
暗号文ブロック に対応する平文が とする時、偶然にも、 であった場合、以下の攻撃が成立する。

それぞれの前の暗号文をCk_1、Cj_1とする時、以下が成立する。
 

また、CBCモードの手順から、以下が成立する。
 

すると、2つの平文の間に生じる差分は入手できてしまう。
しかし、このような攻撃が成功する確率は非常に稀であるといえる。

CBCモードの初期値は、攻撃者から見えても構わないことになっているが、毎回違う値を利用することが推奨されている。

CBCモードは、暗号化がランダムアクセスに適さないため、暗号化は先頭から順次行う必要がある。
また、復号がランダムアクセスに適しており、復号はランダムに選択した着目ブロックに対して操作できる。(1つ前の暗号文ブロックは必要である)