CTFにおけるCrypto入門とまとめの1つです。
古典暗号
- 古典暗号: 1960年代までの暗号の総称
- 古典暗号/換字式暗号: 文字を変換して暗号化
- 単一換字式暗号: 暗号化の前後でアルファベットが1対1で対応
- シーザー暗号, ROT13
- 文字の出現頻度を計算して解析していく
- quipquipというWebサービスで解析
- 多表換字式暗号: アルファベットの対応表を複数作成して、何らかのルールに基づいて使う表を変えて変換する
- ヴィジュネル暗号
- カシスキーテスト: 繰り返し出てくるtheのような単語を探して、鍵長を推測し、サイクルを特定したら、offset毎に文字の出現頻度を解析する
- 単一換字式暗号: 暗号化の前後でアルファベットが1対1で対応
- 古典暗号/転置式暗号: 文字の場所を入れ替えて暗号化
- レールフェンス暗号
- 平文をジグザグにならべて、横に書き下したもの
- シーザー暗号
- レールフェンス暗号
- CTFでは謎の文字列やバイト列が与えられて、暗号方式をguessして根性で解析してねと言う問題が出てくる。頻度解析などを真面目にやればいいのかもしれないのだが、知識ゲー/ガチャガチャゲーすぎて自分はあまり好きではない。推測成分が多いので、問題文や問題名にヒントが含まれていたりするので、それを元に推測したり実験したりしていく。ステガノグラフィーに似ているかもしれない。
頻度解析
- 英文だとeが多く登場しやすいみたいな頻度を解析することで復元する問題
- quipqiup https://quipqiup.com/ が使える
- 例えば特定の文字が特定の暗号文やハッシュになるみたいな状況なら適当にアルファベットに当てはめて出力してやって頻度解析フェーズはquipqiupにやられるという方針も取れる
暗号やエンコード色々
ROT13、シーザー暗号、モールス信号、ヴィジュネル暗号あたりが有名。
- よくわからない文字列について
- uuencode
- Vigenère-decipher: ヴィジュネル暗号, French Cipher
- Vigenere Cipher - Online Decoder, Encoder, Solver, Translator
- 鍵が必要
- 鍵を使うときはアルファベット以外は飛ばす
T3N4CI0USであればTNCIUSのようにしてから鍵を適用する
- https://cryptii.com/pipes/vigenere-cipher
- ここも解読に使える。VARIANTとして色々方式があるので色々試すこと
- 解読手順
- https://www.dcode.fr/vigenere-cipher で解くが、以下によって枝刈りできるかも
- Frequency Counterを見て使われてない文字があれば、PARAMETERSのALPHABETからその文字を消して探索範囲を絞れる
- DECRYPTION METHODのKNOWING A PLAINTEXT WORDでフラグの先頭など分かっている文字列があれば入れてみるといいかも
- https://www.dcode.fr/vigenere-cipher で解くが、以下によって枝刈りできるかも
- モールス信号 Morse code
- Morse Code Translator | Morse Decoder
- アメリカ版のモールス信号はちょっと違うらしい
- 置換式暗号
- rot13とかじゃなくて不規則的な文字置換
- 解析器
- UUEncode
- こんな見た目 → F9FQA9WLY8C5C-#,Q,V0Q,CDU.#,U-&)E-C(X-&9C9#8S9&0R-GT`
- Kryptos
- 謎の画像だったら、謎の暗号方式かもしれない。「そこにあるもの cryptograph」で検索するとそれっぽいのが出てくるかも
- Multi-tap Phone Cipher
999 / 666 / 88 / 222 / 2 / 66 / 777 / 33 / 2 / 3 / 6 / 999 / 7777 / 6 / 7777-> 携帯の英字打ち込みかも
- Machine Identification Code
- 紙の隅に印字してあるバーコード。プリンターが印字する電子透かし
- 黄色い点の集まり
- Decoding Identifying Printer Information
- dfd-tud/deda
- 解説
- ROT47
- ROT47だった例
be bg a_ bf bc a_ bf bc a_ bf b_ a_ bf bb a_ bb e` a_ ba ee a_ ba ee a_ bf bf a_ bf bf a_ bf bf a_ ba ed a_ bf bc a_ be bd a_ be ed a_ be b` a_ be ba a_ be eb a_ be bd a_ ba ed a_ be bb a_ be ee a_ be ec a_ ba ee a_ bf bb a_ be bd a_ be bb a_ bf bd a_ bf ba a_ be bh a_ bf bc a_ bf bh a_ ba ee a_ bf ba a_ be bd a_ bf bb a_ be bd a_ be b` a_ bf ba a_ be bb a_ be bg a_ ba ee a_ bf bc a_ bf ba a_ be b` a_ ba ec a_ bb ba a_ bb b_ a_ bb ba a_ bb bb a_ ba ec a_ bb ba a_ bb b_
- ROT47だった例
- Zodiac事件の340暗号文, Z340
- http://cryptiana.web.fc2.com/code/zodiac.htm#:~:text=%E3%82%BE%E3%83%87%E3%82%A3%E3%82%A2%E3%83%83%E3%82%AF%E3%81%AE%E7%AC%AC%EF%BC%91%E3%81%AE%E6%9A%97%E5%8F%B7%E6%96%87%20Z408&text=%E6%9A%97%E5%8F%B7%E3%81%AF%E3%83%9B%E3%83%A2%E3%83%95%E3%82%A9%E3%83%8B%E3%83%83%E3%82%AF%E6%9A%97%E5%8F%B7%EF%BC%88%E5%90%8C%E9%9F%B3,%E3%81%8C%E5%89%B2%E3%82%8A%E5%BD%93%E3%81%A6%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%EF%BC%8E
- doranchak/azdecrypt: azdecrypt is a fast and powerful hillclimbing classical cipher solver written in freebasic ソルバー
- dcodeにもある https://www.dcode.fr/zodiac-killer-cipher
- https://github.com/NicolaiKuertoes/TenableCTF2023/blob/main/Crypto/Zodiac.md
- Twin-Hex Cipher
- 例:
37n3vq6rp6k05ov33o5fy5b33sj3rq2sy4p56735853h9 - デコーダー Twin-Hex Cypher encoder and decoder from CalcResult Universal Calculators
- 例:
- 暗号ではないが
- NATOフォネティックコード:重要な文字・数字の組み合わせを正確に伝達するため、聞き間違いを防止する目的で作成されたコード。各言語に拡張されたものもある
- wheelbarrow cipher
60_ZMZ_GBWKNREM_KRA__LQM}WEPRGQL__Q_{RWW_M_KIAGPMNMRXDLM_FMWLDQ0BOIAMNPGみたいなやつ