換字式暗号(弊研究室の某課題について考える24日目)
はじめに
この記事は弊研究室の某課題について考えるの24日目の記事になります
今日は換字式暗号についてです。シーザー暗号とかヴィジュネルとかですね
シーザー暗号
シーザー暗号はローマ皇帝、ガイウス・ユリウス・カエサル使用した暗号で、辞書順の文字列を-3文字ずらした暗号となります。下の図のようなことである
A
はD
になるといった感じになります
よくあるのはROT13という13文字シフトする暗号が有名です
シーザー暗号は鍵として何文字シフトするか(ROT13なら鍵は13)、それと辞書を必要とします。
普通の辞書はABCDEFGHIJKLMNOPQRSTUVWXYZ
ですが、ほかの文字を付け加えた辞書で暗号化することも可能です。
シーザー暗号のアルゴリズム
辞書をABCDEFGHIJKLMNOPQRSTUVWXYZ
としてA=0
~Z=26
とする
文字x
として鍵nでシーザー暗号すると、下のようになる
暗号化:C_n[x] = (x + n) mod 26
復号:P_n[x] = (x - n ) mod 26
ヴィジュネル暗号
ヴィジュネル暗号は下の画像に示すヴィジュネル方陣と任意の鍵を用いて暗号化と復号を行う換字式暗号です
画像の最上段が平文、一番左の列が鍵として交差する部分が暗号化された新たな文字となります。
たとえば平文がhelloworld
で鍵がkey
だった場合h
とk
が重なるr
が生み出される暗号となります。
平文が鍵の長さより長い場合は鍵を繰り返して暗号化を行います。
helloworld
keykeykeyk
こんな感じで対応して暗号化されます。
ヴィジュネル暗号は鍵が分からない&鍵の長さがわからないことで復号を困難としています。なのでCTFの問題的には鍵が求められるor鍵の周期がわかるといったことで解けるようになります。
SECCONのヴィジュネル
k: ???????????? p: SECCON{???????????????????????????????????} c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ k=key, p=plain, c=cipher, md5(p)=f528a6ab914c1ecf856a1d93103948fe |ABCDEFGHIJKLMNOPQRSTUVWXYZ{} -+---------------------------- A|ABCDEFGHIJKLMNOPQRSTUVWXYZ{} B|BCDEFGHIJKLMNOPQRSTUVWXYZ{}A C|CDEFGHIJKLMNOPQRSTUVWXYZ{}AB D|DEFGHIJKLMNOPQRSTUVWXYZ{}ABC E|EFGHIJKLMNOPQRSTUVWXYZ{}ABCD F|FGHIJKLMNOPQRSTUVWXYZ{}ABCDE G|GHIJKLMNOPQRSTUVWXYZ{}ABCDEF H|HIJKLMNOPQRSTUVWXYZ{}ABCDEFG I|IJKLMNOPQRSTUVWXYZ{}ABCDEFGH J|JKLMNOPQRSTUVWXYZ{}ABCDEFGHI K|KLMNOPQRSTUVWXYZ{}ABCDEFGHIJ L|LMNOPQRSTUVWXYZ{}ABCDEFGHIJK M|MNOPQRSTUVWXYZ{}ABCDEFGHIJKL N|NOPQRSTUVWXYZ{}ABCDEFGHIJKLM O|OPQRSTUVWXYZ{}ABCDEFGHIJKLMN P|PQRSTUVWXYZ{}ABCDEFGHIJKLMNO Q|QRSTUVWXYZ{}ABCDEFGHIJKLMNOP R|RSTUVWXYZ{}ABCDEFGHIJKLMNOPQ S|STUVWXYZ{}ABCDEFGHIJKLMNOPQR T|TUVWXYZ{}ABCDEFGHIJKLMNOPQRS U|UVWXYZ{}ABCDEFGHIJKLMNOPQRST V|VWXYZ{}ABCDEFGHIJKLMNOPQRSTU W|WXYZ{}ABCDEFGHIJKLMNOPQRSTUV X|XYZ{}ABCDEFGHIJKLMNOPQRSTUVW Y|YZ{}ABCDEFGHIJKLMNOPQRSTUVWX Z|Z{}ABCDEFGHIJKLMNOPQRSTUVWXY {|{}ABCDEFGHIJKLMNOPQRSTUVWXYZ }|}ABCDEFGHIJKLMNOPQRSTUVWXYZ{
練習問題としていい感じです
上杉暗号
下の図を見れば察するのではないでしょうか....
例えばうえすぎ
なら四三 五六 七五 六三
って感じになります