古典暗号について
はじめに
PQCなどの暗号方式の勉強をしたくなったため,暗号の歴史的な部分やその性質について復習したいな~というモチベーションでしばらくやります.個人的な学習の備忘録です.
1. カエサル暗号
概要
カエサル暗号はアルファベットを一定数だけずらす暗号です.たとえば鍵を3とすると,
A -> D
B -> E
C -> F
...
X -> A
Y -> B
Z -> C
と平文と暗号文のアルファベットが対応するようになります.
つまり一例として,Helloを暗号化すると,KHOORとなります.
カエサル暗号では鍵はアルファベットを何文字ずらすかであり,これを用いて平文を暗号化しています.
問題点
この暗号の弱点として高々25通りの鍵を試せば絶対に破ることができるため総当たり攻撃に非常に弱いことがあります.CyberChefのROT13 Brute Forceなどを用いれば我々でも容易に解読が可能です.
数式で考える
数式でこの暗号を表すことを考えると暗号文$C$,平文$P$,鍵$K$とすると, $$ C \equiv P + K \pmod{26} $$ と表せます.
2. アフィン暗号
概要
カエサル暗号を少し一般化したもの.
カエサル暗号は, $$ C \equiv P + K \pmod{26} $$ と表されましたが,アフィン暗号では$a,b$を鍵として, $$ C \equiv aP + b \pmod{26} $$ と表します.
ただし,暗号として機能するために異なる$P$について異なる$C$に変換する必要があります.そのため26と互いに素な$a$が必要になります.また,復号するためには$a$の逆元が必要であり, $$ P = a^{-1}(C - b) \pmod{26} $$ ができることが必要になる.
問題点
今回の暗号についても鍵の数が少なく総当たりが可能である.$a$が12通り,$b$が26通りとなるため, $$ 12 \times 26 = 312通り $$ しか鍵候補が存在しない.
余談
アフィンと聞くとアフィン変換のほうが頭に先に出てきますよね.アフィン変換は, $$ \mathbf{y} = A\mathbf{x} + \mathbf{b} $$ 表されますけども,この式の形の類似性から名前が来ているのでしょうか…(とはいえよく見る線形変換の形ですが)
アフィン変換はよくCGとか画像編集とかで聞く機会が多い気がします.アニメーションとかでも見ますね.
3. 単一換字式暗号
概要
平文の文字に対して、暗号文の文字が常に同じ文字に変換されるような暗号のことを指します.つまりカエサル暗号やアフィン暗号はこれの一種であり,それらを一般化した概念です.
鍵としてはその文字同士の対応表となり,その鍵空間の大きさとしては$26!$となります.
問題点
アルファベットが一対一対応で変換されるためその文章の構造は保持され,文字の出現頻度などは変化しません.英語においては文字の出現頻度には偏りが存在し,それを分析することで平文がばれてしまう可能性があります.
4. ヴィジュネル暗号
概要
これは,複数のカエサル暗号を切り替えて使う方式です.鍵を単語にします.
$鍵 = 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 でも場所によって別の文字に暗号化されます.
問題点
この暗号方式の弱点は鍵を繰り返すことです. たとえば鍵が$KEY$の場合は,
KEYKEYKEY...
と繰り返されるため,同じ平文パターンで同じ鍵の位置になると全く同じ暗号文のパターンになる.たとえば暗号文の中に同じ3文字が何度も出てきたとすると,その出現間隔を調べ,距離の最大公約数をとると鍵の長さを推測できる.
例えば,ABCの出現間隔が12と18だったとすると鍵長としては$gcd(12,18)=6$と推測することが可能である.
鍵長がわかれば後はそのそれぞれごとのカエサル暗号と等しくなり,頻度分析を行うことで解くことが可能になってしまう.
5. まとめ
| 暗号 | 改善した点 | 破られる理由 |
|---|---|---|
| カエサル暗号 | 文字をずらす | 鍵が少なすぎる |
| アフィン暗号 | 数式を少し複雑化 | それでも鍵が少ない |
| 単一換字式暗号 | 鍵空間を巨大化 | 言語の頻度が残る |
| ヴィジュネル暗号 | 文字ごとに変換を変える | 鍵の繰り返しが漏れる |