古典暗号 - Beaufort暗号とAutokey暗号

Vigenere暗号は非常に強力な暗号だった。その強力さと汎用さから、いくつかの派生暗号が知られている。ここでは、その中から2つ取り出して書いてみようと思う。

Autokey暗号

Autokey暗号は、Vigenere暗号にストリーム暗号の要素を加えた暗号と言える。以下に暗号化/復号処理を示す。

暗号化

最初に、鍵を一つ決める。これは長さに特に制限は無い。ここではDJAUTOとする。 平文をここではAUTOKEY CIPHER IS VIGENEREという文字列にする。この時、次のようにして暗号化処理が行われる。

  • まずは普通にキーの長さと同じだけ暗号化する。DJAUTOは6文字なので、AUTOKEまでを暗号化してDDTIDSとなる。
  • 次に、ここで暗号化した平文を鍵として再利用する。ここでは、AUTOKEを鍵として利用し、次のY CIPHEを暗号化する。暗号化された結果はB LIJASとなる。
  • 同様に全ての暗号文に対して少し前の平文を使い、暗号化する。最終的な暗号文はDDTIDSB LIJASU RS PBUHWELX QLYHYKとなる。

復号

復号の処理を以下のように行う。

  • 最初にキーで復号する。
  • 出てきた平文を使って次を復号する。
  • 繰り返していくと、平文が出てくる。

安全性

ブロック暗号を触った方なら、動作モードを指定したブロック暗号のようだと思われただろう。実際そのとおりで、この暗号は平文を暗号文として使いまわすことでカシスキー・テスト等の攻撃手法からVigenere暗号を守っている。 しかし、Vigenere暗号と同じく既知平文攻撃に対しては脆弱なままで、少し解読しにくくなるだけである。楽にそれなりの安全性を手に入れるにはその当時としては良い方法だったのだろう。

Beaufort暗号

Beaufort暗号はVigenere暗号と似て少し違う暗号だが、Vigenere暗号に変換することで同様の攻撃手法を使えてしまう暗号だ。

暗号化

Vigenere暗号を解説した際にも掲載したVigenere方陣を再度見てみて欲しい。Vigenere暗号では、横列で平文、縦列で暗号化鍵を探し、それらの交点にある文字を暗号文とした。Beaufort暗号では、横列から平文を探し、そのままその列を下に行って鍵を探す。そして、そこから左に行った左側の列にある文字が暗号文となる。

例として、CTFという鍵でCRYPTOという文字列を暗号化する。鍵は伸長されてCTFCTFとなる。方陣の横列からCを探し、そこから下に行ってCを探す。左端を見ると、Aとなっている。次に、Rを探し、Tまで降りて左端を見るとCという暗号文が得られる。これを繰り返すとACHNARという暗号文が得られる。

復号

復号に関しても見るところが変わるだけでVigenere暗号と実質的なところは変わらない。実際に上の文字列を復号してみると良いだろう。

Vigenere暗号との関連性

同じ方陣を利用しているためか、少し手を加えるだけでVigenere暗号に変換することが出来る。Vigenere暗号の時と同じように、少し対応表を作ってみよう。

鍵をAとすると、

  • 平文 : 暗号文
  • A : A
  • B : Z
  • C : Y
  • D : X ...

Vigenere暗号の時とは少し違い、微妙に暗号文がずれていることに気づくだろうか。鍵がBの場合も見てみよう。

  • 平文 : 暗号文
  • A : B
  • B : A
  • C : Z
  • D : Y ...

これらの結果から数式に落としこんでみよう。Vigenere暗号では単純に \(\vec{p} + \vec{k}\) とするだけだった。今回の場合を数値としてみてみると、平文をA, 鍵をAとして便宜上暗号化処理を+で表すと、鍵をA(つまり0)として0+0 = 0になっていて、鍵がBの時は0+1 = 1つまりBになっている。ここで、D(つまり3)を見てみると3+0 = X(つまり23)となる。C(つまり2)は2+0 = Y(つまり24)。これらの結果から、Beaufortの場合は引き算に近いのではないか?というように考えることが出来る。

鍵がA(=0)の時を引き算とすると次のようになる。

  • \(0 - 0 \equiv 0\mod 26\)
  • \(0 - 1 \equiv -1 \equiv 25 \mod 26\)
  • \(0 - 2 \equiv -2 \equiv 24 \mod 26\) ...

鍵がB(=1)の時も見ておこう。

  • \(1 - 0 \equiv 1\mod 26\)
  • \(1 - 1 \equiv 0\mod 26\)
  • \(1 - 2 \equiv -1 \equiv 25 \mod 26\) ...

この方向で良さそうだ。式として定式化すると、次のようになる。

暗号化関数は、平文を\(\vec{p}\)、暗号化鍵を\(\vec{k}\)とした時、

\( Enc(\vec{p}) := \vec{k} - \vec{p} \mod 26 \)

復号関数は、暗号文を\(\vec{c}\)、暗号化鍵を\(\vec{k}\)とした時、

\( Dec(\vec{c}) := \vec{k} - \vec{c} \mod 26 \)

定式化ができた。ここで、Vigenere暗号の暗号化/復号関数をもう一度書いておくと、

\( Enc(\vec{p}) := \vec{p} + \vec{k} \mod 26 \)

\( Dec(\vec{c}) := \vec{c} - \vec{k} \mod 26 \)

である。Beaufort暗号で作られた暗号文をVigenere暗号にするために、次のように変形をする。

\( \begin{align} \vec{c} = Enc(\vec{p}) &= \vec{k} - \vec{p} \mod 26\cr -\vec{c} &= -\vec{k} + \vec{p} \mod 26\cr -\vec{c} &= \vec{p} - \vec{k} \mod 26\cr \end{align} \)

暗号文と鍵にそれぞれ-1を乗じることで、Vigenere暗号と同一視出来るようになった。ちゃんと書き直すと、

\( ToVigenere(\vec{c}) := -\vec{c} \mod 26 \)

である。こうして作られたVigenere暗号文に対してはカシスキー・テスト等のVigenere暗号に対する攻撃をそのまま使用することが出来る。

Beaufort暗号は何故か日本語の記事が少なく、wikipediaでも定式化までは取り上げて居なかったため取り上げた。

リファレンス

公開鍵暗号 - RSA - 基礎

2018/10/22 全体的に問題があったので書き直した. 内容はほぼ変わっていない.

本記事では, 世界で最初に提案された公開鍵暗号であるRSA暗号の基礎事項について解説する. RSA暗号の動作原理について示した後, 簡単な攻撃手法の一覧を載せる.

公開鍵暗号

暗号理論, 特に現代暗号における暗号は「秘密鍵暗号(Secret-key Cipher)」, 「公開鍵暗号(Public-key Cipher)」の2種類に大分される. 秘密鍵暗号はよく知られている通り「秘密の鍵$k$を事前に共有しておき, その鍵を用いて暗号化・復号を行う暗号方式」である. これに対して公開鍵暗号は「暗号化に用いる鍵$k _ {enc}$, 復号に用いる鍵$k _ {dec}$が存在し, 暗号化・復号のそれぞれで異なる鍵を用いる暗号方式」と定義され, このうち$k _ {enc}$は一般に公開されることが多いことが「公開鍵」の所以である. 鍵が分かれているため, 復号することができる人は$k _ {dec}$を持つ人のみであることから, このようにすることで世界中の人々が暗号化した文書を$k _ {dec}$を持つ人に対して自由に送ることができるようになり, 事前に鍵を受け渡す手間を省くことができる. この$k _ {enc}$を公開鍵, $k _ {dec}$を秘密鍵と呼ぶ.

RSA暗号

RSA暗号[1]は世界で初めて提案された公開鍵暗号であり, 提案者であるRivest, Shamir, Adlemanそれぞれの名前をとって呼ばれている. この暗号の安全性は「大きい合成数素因数分解問題は難しい」という仮定に基づいている.

原理

RSA暗号における公開鍵, 秘密鍵を定義し, その原理について解説する.

まず最初に素数$p$, $q$を選ぶ. これは$p\ne q$でなければならない. また, 必ずランダム性があり, 偏りがないようにしなければならない. この$p$, $q$について$n = pq$とおく. $e$を$(p-1)(q-1)$と互いに素であるように選び, $ed\equiv 1\pmod{(p-1)(q-1)}$を満たすような$d$を計算する.

このとき, RSA暗号の公開鍵は$(n, e)$, 秘密鍵は$(n, d)$と定義される.

暗号化

平文を$m\in\mathbb{Z}$, $0\leq m\lt n$としたとき, RSAの暗号化関数は以下のように定義される:

$$ Enc(m) := m ^ e \mod n $$

復号

暗号文を$c\in\mathbb{Z}$, $0\leq c\lt n$としたとき, RSAの復号関数は以下のように定義される:

$$ Dec(c) := c ^ d \mod n $$

さて, 暗号が暗号として成立するためには「暗号化して復号したら元に戻る」ことが必要である. このことをチェックするために$Dec(Enc(m)) \equiv m\pmod n$を示す. このためには以下の定理が必要になる.

Thm. 1 (Euler).

$n$を正の整数, $x$を任意の整数としたとき, $x$と$n$が互いに素ならば$x ^ {\phi(n)} \equiv 1 \pmod n$. ただし$\phi(n)$は$n$と互いに素な$1$以上$n$未満の整数の個数を表す(Euler Totient関数).

(証明略)

例として, $p$を素数としたときに$p$と互いに素な数は$p-1$個存在するため$\phi(p) = p-1$である($1, 2, ..., p-1$). すると$p$と互いに素な整数$a$について$a ^ {p-1}\equiv 1\pmod p$であることがわかる. これは実はFermatの小定理として知られる定理であり, このEulerの定理はその拡張であるといえる.

では, $n = pq$と互いに素な数の個数を考えてみよう. $p, 2p, \ldots, (q-1)p$がまず$n$と互いに素ではない. $q$についても同様に$q, 2q, \ldots, (p-1)q$が互いに素ではない. $n$の素因数は$p$, $q$の2つだけなのでこれで互いに素ではない数は全て. よって$(p-1)+(q-1)$通りの数が$n$と互いに素ではないことがわかる. 0を除外するために1引いていることに注意し, 互いに素な数の個数を計算すると以下のように計算できる:

$$ \begin{aligned} \phi(n) &= n - ( (p-1) + (q-1) - 1)\newline &= n - (p+q) + 1\newline &= p(q - 1) - (q - 1)\newline &= (p-1)(q-1). \end{aligned} $$

このことから, RSA暗号が正しく復号できることは以下のように示される:

$$ \begin{aligned} Dec(Enc(m)) &\equiv (m ^ e) ^ d\newline &\equiv m ^ {ed}\newline &\equiv m ^ {1 + k(p-1)(q-1)} & (\mathrm{where}\ k\in\mathbb{Z})\newline &\equiv m ^ 1\cdot (m ^ {(p-1)(q-1)}) ^ k\newline &\equiv m ^ 1\cdot 1 ^ k\newline &\equiv m\cdot 1\newline &\equiv m\pmod {n}. \end{aligned} $$

ただし, $m ^ {(p-1)(q-1)}\equiv 1\pmod n$はEulerの定理を用いた. また, $ed\equiv 1\pmod {(p-1)(q-1)}$よりある$k\in\mathbb{Z}$が存在して$ed - k(p-1)(q-1) = 1$という事実を用いた.

$0\leq m\lt n$という制約があるので, $Dec(Enc(m)) = m $がこれでいえたことになる.

攻撃

単純な素因数分解

$p$, $q$のいずれかが判明したときに$d$を計算することができるようになるという事実から, まずは単純に素因数分解してしまえばよいのでは?という疑問が浮かぶ. 今実際に運用されているRSA暗号では少なくとも$2 ^ {1024}$通りの範囲を全探索するのに匹敵する計算量が必要になる程度の大きさの素数が用いられているためにあまり問題にはならないが, $p, q$の間に関連性があったり, 特殊な形の合成数に対して適用可能な素因数分解の手法(Pollard Rho法やFermat法等が挙げられる)を適用することで素因数分解できてしまう場合がある.

過去の事例として, DebianのOpenSSLの脆弱性により鍵生成された後の公開鍵$(n, e)$のパターンが高々32768通りと比較的少なく(= 秘密鍵が推定または総当りできてしまう)なってしまったことがある (CVE-2008-0166)[3]. また, たくさんRSA鍵を集めてたまたま同じ素数が使われているものをBirthday Paradoxに期待して探す攻撃手法も実際に効果が無いわけではないことが示されている[2].

Low Private-Exponent Attack

秘密鍵dが小さい時に$(n, e)$から$d$を計算することができる攻撃の総称. 有名なものにWienerが[9]で提案した $d < \frac{n ^ \frac{1}{4}}{3}$ のときに $e, n$ から $d$ を求められる攻撃や, Boneh-Durfeeによる $d < n^{0.292}$ のときに $e, n$ から $d$ を求められる攻撃[6]がある.

Common Modulus Attack

$m, n$が共通, $e$が異なるいくつかの$(e, n, Enc(m))$の組があるとき, mを計算することができる攻撃.

Common Private Exponent Attack

秘密鍵 $d$ が等しく, 公開鍵 $e, n$ が異なるような公開鍵が複数存在する時, 共通する $d$ を求めることが可能な攻撃. [11]

Hastad's broadcast Attack

$n$が異なり, $e$と平文が同じ複数の暗号文/公開鍵 $(n_1, e, c_1), (n_2, e, c_2), ..., (n_k, e, c_k)$ が十分な数あるとき, 元の平文を求めることができる攻撃. $c _ i = m ^ e \mod n _ i$とすると解 $x = m ^ e$ を持つ剰余連立方程式$x\equiv c_i\pmod{n_i}$を立てることができ, この解が中国人剰余定理によって求まることでmodのかかっていない$me$が計算できる. 後は$e$乗根を取ればよい.

このことから最低限必要な暗号文の数は 「$m ^ e < \prod _ i {n _ i}$ が成立する最小の$i$」である. $n_i$の大きさを考えると$e$個ほど集めればよい.

Franklin-Reiter Related Message Attack

ある平文$m_1$について既知の定数$a$, $b$があり$m_2 = am_1 + b$とする. このとき, その暗号文$c_1, c_2$があるとき, $(n, e, c_1, c_2)$から$m_1$を導出できる攻撃. $e=3, 5$の場合はWikipediaに載っているが, 実はこれはメッセージの数, 関数も一般化が可能である. 詳細は[7].

Coppersmith's short pad Attack

ある平文$ m $があり, $k = \lfloor\frac{n}{e^{2}}\rfloor$とする. 暗号化する平文$m_1, m_2$を$m_1 = 2^{k} m + r_1$, $m_2 = 2^{k} m + r_2$とし, それぞれの暗号文$c_1, c_2$があるとき, $n, e, c1, c2$から$ m $を導出できる攻撃.

Partial-key exposure Attack / High-bit known Attack / Low-bit known attack

$d, p, q$等の秘密鍵にあたる部分の一部が漏洩した時に全体を復元することができるという攻撃. 有名な所ではpの上位/下位ビットが十分な量($p ^ 0.5$程度)漏洩しているとき$e, n, pの一部$から$p$全体を復元できる High-bit known (下位ビットの場合はLow-bit known) Attackがある. $d$の一部の場合は特にPartial-key exposure Attackと呼ばれる.

LSB Leak Attack

暗号文に対して復号した値の偶奇が分かるとき, 二分探索によって元の平文を求めることが可能な攻撃.

参考文献

古典暗号 - Vigenere暗号とカシスキー・テスト

この記事は古典暗号の中でも複雑で解読しにくいとされている多表式換字式暗号であるVigenere暗号と、多くの場合に効果的な解読法であるカシスキー・テストを理解することを目標に書く。

Vigenere暗号

Vigenere暗号は頻度分析が発達し単一換字式暗号がある程度簡単に破られるようになってきた頃に発明された。名前は最終的な発明者であるBlaise de Vigenèreの名を取っている。(便宜上VigenèreではなくVigenereと書いているが、正しいのはVigenèreである。)

古典的な見方

この暗号は、多表式換字式暗号の形を取っている。そのため、同じ文字でも場所が違えば違う文字に暗号化される。

最初に、暗号鍵を決める。これはアルファベットであれば何でも良いが、安全性のためにはできるだけ長い方がよい。また、暗号鍵は平文の大きさに合わせて繰り返して使う。例えばCTFという暗号鍵を長さ7の平文に適用する場合、実際に使われる暗号鍵はCTFCTFCになる。

Vigenere暗号は、Vigenere方陣と呼ばれる以下の表を用いて暗号化される。 https://upload.wikimedia.org/wikipedia/commons/c/c7/Vigenere-square.png

この表は、最上段を平文、左段を暗号鍵、それ以外が暗号文として扱われる。

例として、VIGENERE CIPHER IS POLYGRAPHIC SUBSTITUTION CIPHERという文章をCTFという鍵で暗号化することを考える。

  • 1文字目は平文がV, 鍵がCなので 横列がV, 縦列がCの位置にあるXが暗号文
  • 2文字目は平文がI, 鍵がTなので 横列がI, 縦列がTの位置にあるBが暗号文 ...

というように暗号化していく。最終的な暗号文はXBLGGJTX HKIMGK NU ITNRLTTUJBH UNGUMNVNYKHS EBUJXWとなる。

最初に書いたように、この方法はある文字が幾つもの文字に入れ替わる可能性がある。そのため、非常に解読が難しい暗号となっている。 復号については暗号文と鍵から一意に平文が定まるため、単純に表を反対に見れば良い。

数学的な見方

数学的にVigenere暗号を考える。まず、Vigenere方陣に注目すると、1列目(暗号鍵がAの時)はそのまま、2列目(暗号鍵がBの時)はB, C, D, ...のように1つずれていることがわかる。シーザー暗号のように考えれば良いかも知れない(key = 1のシーザー暗号と同じ)。同様に3, 4, ...列目はk=4, 5, ...のシーザー暗号の配列と同じだ。

ベクトルを用いて考えてみる。暗号化鍵の配列をベクトル\(\vec{k}\)、平文の配列をベクトル\(\vec{p}\)とすると、次のように書くことができる。

\( Enc(\vec{p}) := \vec {p} + \vec{k} \mod 26 \)

実例を挙げてみる。平文がWEARECTFER、つまり数列にすると(22, 4, 0, 17, 4, 2, 19, 5, 4, 17)とし、暗号化鍵をESHIHOつまり(4, 18, 7, 8, 7, 14)を必要なだけ伸長したものとする。 計算すると次のようになる。

  • 鍵の長さは平文よりも短いので、伸長する。伸長後の鍵は(4, 18, 7, 8, 7, 14, 4, 18, 7, 8)となる。
  • \(Enc(\vec{p})\)を計算する。

\( \begin{align} \vec{p} &= (22, 4, 0, 17, 4, 2, 19, 5, 4, 17)\cr \vec{k} &= (4, 18, 7, 8, 7, 14, 4, 18, 7, 8)\cr \vec{p} + \vec{k} \mod 26 &= (0, 22, 7, 25, 11, 16, 23, 23, 11, 25) \end{align} \)

  • アルファベットに変換すると、AWHZLQXXLZとなる。これが暗号文である。 平文の配列をベクトル\(\vec{c}\)、暗号化鍵の配列をベクトル\(\vec{k}\)とした時に復号関数Decを次のように定義する。

\( Dec(\vec{c}) := \vec{c} - \vec{k} \mod 26 \)

これはEncの自明な逆関数となっている。実例は省略する。

カシスキー・テスト

カシスキー・テストとは、最初にチャールズ・バベッジが考案したVigenere暗号の効率的な解読法だ。バベッジが公開する前にカシスキーが公開したという歴史的背景から、カシスキー・テストと呼ばれている。 今回はある英文を暗号化した以下の文章を解読する。

OWBSEOLUSIGTPZHUPJDMTBIPEDKPFRUWGYSBPBYHIQTQENQMJRPIIHETISTKIBFZYTUBYFMINPPFATLQPVHELFXFZTMMPQLJAUTQFIOOLFEBWOFLGLMUPGFPMGXTXIOPORPIISEEBICIFAPYWTPFXLBUBYHKIQSIUPOZAUPFPESBIHETKPCVVXUTRHWEDWJOIEEOLXLWGCMWSGDJZPFVDPKPLTLAIWXNSSZVAXUPFPESBISEEJFNSNMGZVBTMELFXFZTMMPYIBZUSLBLDZVSCQEIEBIPMSEBJWTWHZHTIJOXPVPLLJINRSJVHESQCULRFVEESBTMAIPXMPJPZUSIFISELJAGTPMMEHMUPWTSMMONICMDLYTMPQXIMNTENAVCIMGHZMOOUZHFAUCSZJPELUPFXEOLUSIFISELTWNLOFGPFVTMMQEOISVSGKZAVFATHSPLNLOFZPZQTQOTXBVENSBBJEAJBIAMUKITRTQEPEOLPFXUPJDMTPPHCPCBCIUWCFMMLJEXIMBCOJAUZFFBICIFPVYHSMENYCQUDPPVHQMGBZNYCQUDAJLFLREBITVUGDFFJBTSMHPNLOFISZSGNPCMUTFLZJVHMIMWXELFZPZJBVPAIOQORSOMDFFJBITKIIMWESWVYHQCULHPWSTRUPFDMEMPQXIMBCOBVEXELMMZAFZNTHETFLRECQAISLFNOTQBXKPQORXPJSTRHNMZSEEBEISAPYXIMFLVUPUZHFAUCSZIMWPJNFFREMSELFPFLZFVTPZFZZNVFIUFVFBILXIITELFJSPEUPPQPJNFTRJBFGISGUSMOOPYIBZUSAJTMAISQTSFVBJHMMTFDXBJMTWIUZNSWMOLRUEJELZWVLREGPFAJTMPRUMSELFISVCPCBYHZWVCWPVTLREGPFVXQGPEOLZZYSAPYWXQWPWXQUSCPCZZYBZFESCZJYKJVUZXIMBCOUEPZJBTMWMWQORGSMBEYSMTXEMMBYHGMNLPFBPVIFXUSINIMTZFEJELZWVEAPWGPZFZZVMOLPQFJZEZJFDFCCLQOOSGIOTQBTBYHPNFGISGLTREWGNVFIUFVFBILXNWWPWBTPYKUPFRVPCOOAJTMNSNMUZCPCUZFFSFAXBTJGIZWVLVFBPEELMFGISGLTREWGQSPLUSEUQTESCMFLXFVBYHTBPCIJBBHEZITQSPLGZVZWVLRENPCXIMN

この方法は、暗号文のみから鍵を推定することを考えたものである。鍵の繰り返しがキーとなっているため、非常に長い(大体鍵の長さが1/2以上)場合には効力を発揮しない。

  • 最初に、間隔を開けて何度か繰り返されている文字列を探す。例で考えると、ELFという文字列が6回繰り返されていることがわかる。ここでは、この文字を使う。
  • 次に見つけた文字列同士の間隔を見る。ここではELFの間隔を数える。すると、次の結果が得られる。
1つ目から2つ目: 170
2つ目から3つ目: 360
3つ目から4つ目: 150
4つ目から5つ目: 30
5つ目から6つ目: 95
  • これが何を意味するのだろうか。これらは、ELFという文字列の元が同じ文字列だと仮定すると、同じ鍵で暗号化されているものだろうと考えられる。つまり、この間隔は鍵の長さの倍数だと考えられる。 これらの公約数を取ると、5という数値が出る。これは、鍵の長さが5であることを仮定できる材料となる。
  • 鍵の長さがわかれば簡単だ。というのも、Vigenere暗号の性質として鍵がn文字周期であるなら、n文字毎に同じ鍵が使われる事になる。更に、数学的な見方で書いた通り、一文字単位で暗号化処理を見るとシーザー暗号に他ならない。つまり、Vigenere暗号の解読問題がシーザー暗号の解読問題に変換され、結果的に26^鍵の長さという大きさまで鍵の候補の量を減らすことが出来た。
  • ここで、頻度分析を利用することを考える。文が英文であることは与えられているため、英文の頻度分析を用いてシーザー暗号の鍵を割り出すことができる。
  • 以上によって、かなりの割合でVigenere暗号を解読することができる。

カシスキー・テストは非常に強力で、鍵の長さの制限さえ通れば殆どの場合に適用できる。なお、今回の例では平文をGenesis 6 NIV - Wickedness in the World - When human - Bible Gatewayより引用させて頂いた。暗号化鍵は、このカシスキー・テストを利用して探してみて欲しい。

ツール/サイト

有名なだけあり、様々なツールが存在する。個人的におすすめの物を紹介しておく。

CrypTool : https://www.cryptool.org/en/

ver 1.xとver 2.xが存在するが、個人的には1.xのほうをよく使う。統合的な暗号化/復号/暗号解析ツールであり、Vigenere暗号については暗号化・復号・一定の解析/解読までが可能。

Vigenere Ciphers : http://rumkin.com/tools/cipher/vigenere.php

簡単な暗号化/復号に使えるサイト。このサイトには他にも暗号化/復号のできるページが存在するので一通り見ておくと良い。

Vigenere Solver - www.guballa.de : http://www.guballa.de/vigenere-solver

個人的に最強ではないだろうか、と思えるVigenere暗号の解読サイト。Autokey, Beaufort等のVigenere系列の他の暗号にも対応しており、精度もかなり良い。

The Black Chamber - Vigenère Cracking Tool : http://www.simonsingh.net/The_Black_Chamber/vigenere_cracking_tool.html

暗号解読の著者であるサイモン・シンによるカシスキー・テストの半自動化サイト。手でやる場合には非常に効率的、目視確認もできるので学習用にも良い。

リファレンス