古典暗号について

Tags: Crypto, Introductory

はじめに

PQCなどの暗号方式の勉強をしたくなったため,暗号の歴史的な部分やその性質について復習したいな~というモチベーションでしばらくやります.個人的な学習の備忘録です.

1. カエサル暗号

概要

カエサル暗号はアルファベットを一定数だけずらす暗号です.たとえば鍵を3とすると,

A -> D
B -> E
C -> F
...
X -> A
Y -> B
Z -> C

と平文と暗号文のアルファベットが対応するようになります.

つまり一例として,Helloを暗号化すると,KHOORとなります.

カエサル暗号では鍵はアルファベットを何文字ずらすかであり,これを用いて平文を暗号化しています.

問題点

この暗号の弱点として高々25通りの鍵を試せば絶対に破ることができるため総当たり攻撃に非常に弱いことがあります.CyberChefのROT13 Brute Forceなどを用いれば我々でも容易に解読が可能です.

数式で考える

数式でこの暗号を表すことを考えると暗号文CC,平文PP,鍵KKとすると,

CP+K(mod26)C \equiv P + K \pmod{26}

と表せます.

2. アフィン暗号

概要

カエサル暗号を少し一般化したもの.

カエサル暗号は,

CP+K(mod26)C \equiv P + K \pmod{26}

と表されましたが,アフィン暗号ではa,ba,bを鍵として,

CaP+b(mod26)C \equiv aP + b \pmod{26}

と表します.

ただし,暗号として機能するために異なるPPについて異なるCCに変換する必要があります.そのため26と互いに素なaaが必要になります.また,復号するためにはaaの逆元が必要であり,

P=a1(Cb)(mod26)P = a^{-1}(C - b) \pmod{26}

ができることが必要になる.

問題点

今回の暗号についても鍵の数が少なく総当たりが可能である.aaが12通り,bbが26通りとなるため,

12×26=312通り12 \times 26 = 312通り

しか鍵候補が存在しない.

余談

アフィンと聞くとアフィン変換のほうが頭に先に出てきますよね.アフィン変換は,

y=Ax+b\mathbf{y} = A\mathbf{x} + \mathbf{b}

表されますけども,この式の形の類似性から名前が来ているのでしょうか…(とはいえよく見る線形変換の形ですが)

アフィン変換はよくCGとか画像編集とかで聞く機会が多い気がします.アニメーションとかでも見ますね.

3. 単一換字式暗号

概要

平文の文字に対して、暗号文の文字が常に同じ文字に変換されるような暗号のことを指します.つまりカエサル暗号やアフィン暗号はこれの一種であり,それらを一般化した概念です.

鍵としてはその文字同士の対応表となり,その鍵空間の大きさとしては26!26!となります.

問題点

アルファベットが一対一対応で変換されるためその文章の構造は保持され,文字の出現頻度などは変化しません.英語においては文字の出現頻度には偏りが存在し,それを分析することで平文がばれてしまう可能性があります.

4. ヴィジュネル暗号

概要

これは,複数のカエサル暗号を切り替えて使う方式です.鍵を単語にします.

=KEY鍵 = KEY

文字を数字にすると、

K = 10
E = 4
Y = 24

平文が,

ATTACKATDAWN

なら,鍵を繰り返します.

平文: A T T A C K A T D A W N
鍵 : K E Y K E Y K E Y K E Y

それぞれの位置で違うずらし方をします.

A + K
T + E
T + Y
A + K

これにより,同じ A でも場所によって別の文字に暗号化されます.

問題点

この暗号方式の弱点は鍵を繰り返すことです. たとえば鍵がKEYKEYの場合は,

KEYKEYKEY...

と繰り返されるため,同じ平文パターンで同じ鍵の位置になると全く同じ暗号文のパターンになる.たとえば暗号文の中に同じ3文字が何度も出てきたとすると,その出現間隔を調べ,距離の最大公約数をとると鍵の長さを推測できる. 例えば,ABCの出現間隔が12と18だったとすると鍵長としてはgcd(12,18)=6gcd(12,18)=6と推測することが可能である.

鍵長がわかれば後はそのそれぞれごとのカエサル暗号と等しくなり,頻度分析を行うことで解くことが可能になってしまう.

5. まとめ

暗号改善した点破られる理由
カエサル暗号文字をずらす鍵が少なすぎる
アフィン暗号数式を少し複雑化それでも鍵が少ない
単一換字式暗号鍵空間を巨大化言語の頻度が残る
ヴィジュネル暗号文字ごとに変換を変える鍵の繰り返しが漏れる