2011-06-23 128 views
0

これはヴィジュネル暗号テキストVigenere暗号 - (手で)復号

EORLL TQFDI HOEZF CHBQN IFGGQ MBVXM SIMGK NCCSV 
WSXYD VTLQS BVBMJ YRTXO JCNXH THWOD FTDCC RMHEH 
SNXVY FLSXT ICNXM GUMET HMTUR PENSU TZHMV LODGN 
MINKA DTLOG HEVNI DXQUG AZGRM YDEXR TUYRM LYXNZ 
ZGJ 

で一致指数は6のシフト(6)を得た:私はこれが正しいと知っている(私はオンラインのJavaアプレットを使用キー「QUARTZ」を使用して全体を解読する)。

しかし、この質問では、キーの最初と最後の2文字だけが「Q」と「TZ」と言われています。

これまでのところ、私はthis素晴らしいアプレットを使用して暗号文をスライスに分割しました。したがって、最初のスライスは0、k、2k、3k、4kです。 2番目は1、k + 1、2k + 1、3k + 1です。等である。

KeyPos=0: EQEQQSCXQJJHDEYIUTSVMTVUMTYJ 
KeyPos=1: OFZNMICYSYCWCHFCMUULILNGYUX 
KeyPos=2: RDFIBMSDBRNOCSLNERTONOIADYN 
KeyPos=3: LICFVGVVVTXDRNSXTPZDKGDZERZ 
KeyPos=4: LHHGXKWTBXHFMXXMHEHGAHXGXMZ 
KeyPos=5: TOBGMNSLMOTTHVTGMNMNDEQRRLG 

私の考えでは、最も頻繁に手紙が私にどのように「U」「A」と「R.」を見つけるためにとして、いくつかの手がかりを与えることを期待して、各ブロックにおける最高周波数の手紙を計算しましたしかし、これらのブロックの中で最も頻度の高い文字は以下のとおりです。QCNVHM、またはQUNVHMを生み出す

KeyPos=0: Q,4 T,3 E,3, J,3 
KeyPos=1: C,4 U,3 Y,3 
KeyPos=2: N,4 O,3 R,3 D,3 B,2 
KeyPos=3: V,4 D,3 Z,3 
KeyPos=4: H,6 X,6 M,3 G,3 
KeyPos=5: M,4 T,4 N,3 G,3 

は、(寛大)どちらもというQUARTZに接近しています。この問題を解決することができるonline appletsがあるので、ブロックから適切な頻度カウントを得るにはテキストを短くしてはいけません。

私は間違った方法で接近しているはずです。私はあなたの誰かが、私が間違っている場所について手がかりを与えることができるかもしれないと考えていました。

p.s.これはデジタル暗号クラスのためのものです。

+2

これはプログラミングの質問ではありません。手で行う方法を知りたい場合は – Raoul

+0

そうですね。暗号の構築には基本が必要なので、そういう意味では大丈夫かもしれないと思った。私は同意するので、あなたのコメントに投票します。 :/ – eggonlegs

+0

...ハァッ。私は暗号SEのサイトがあったと誓っていたかもしれませんが、私は今それを見つけることができません。 – Chowlett

答えて

1

興味深い質問...

私は、元の暗号文をクラッキング用のプログラムソリューションを持っていないが、私は少し心のパワーと、いくつかの有用なJavaScriptでそれを解決することができました。

私はthis pageとあなたが入力した情報を使用して始めました。鍵の長さが6であり、ヒットが初期化される暗号文を提供します。ここでのアプローチは、プレーンテキストまたはキーの未知数がハイフンのまま残されているという点で優れています。

あなたの知り合いだけを追加してQ---TZを追加し、 '更新平文'をクリックします。この時点で私たちは知っています:

o --- sua --- opo --- oca --- nha --- enc --- rom --- dth --- ama --- int --- - ept ---私たちの--- mun --- tio --- ewi --- eus --- --- ond --- loc --- onf ---今--- hed ---オフ--- ere --- nsw --- esd --- tmi --- ght

ここで私は少しの脳の力を加えました。あなたは平文のビットを認識し始めます。 the,nowおよびoffが出現する。最後に、ghtがあります。これにより、私は以前の手紙が母音である可能性が高いと思いました。例えば、lightまたはthoughtです。対応するハイフンをuに置き換え、updateキーワードをクリックすると、どのような文字がその組み合わせを生成したのかを調べることができます。一致する文字はFであることが判明しました。私は結果を見るために平文を更新したと思う。彼らは有望に見えませんでした。だから私は、をもたらした代わりにiを試してみました:

O - usua - ROPO - ロカ - onha - eenc - ウエディング - edth - EAMA - EINT - CEPT - gour- -mmun - atio - wewi - beus - gthe - cond - yloc - ionf - mnow - thed - poff - 単純な - insw - nesd - atmi - ight

今どこかに行っています。開始時に私はusualかもしれない何かを見て、さらにint--ceptを見て最後の近くにw--nesd--atmi--ightを見ます。 Voila。 wednesdayの文字を入力してキーワードを更新すると、QUARTZが返されました。

...だから、このアプローチをコードに移植する方法は?まだそれを行う最善の方法については不明です。キーに既知の文字を使用し、部分的に暗号文を解読し、残りの部分を強制的に強制する考えは魅力的です。しかし、辞書便利ずに、私は最高のブルート強制方法がどうなるかわからないんだけど...

が(多分)継続する...

+0

ありがとう、それはそれを働かせる良い方法です(平文が英語であり、2回スクランブルされていなければ)。教科書の方法は、Kasiskiの攻撃または頻度分析のいずれかであるが、私はスライスの一致の指標をどのように計算するのか分からなかった。 – eggonlegs

1

アルゴリズムは、単に最も頻繁に考えていませんアルファベット全体の頻度パターンです。技術的には、可能なシフトごとにindex of coincidenceを計算し、最大のシフトを考慮します。