6バイト
カテゴリ:暗号化
難易度:イージー
チャレンジ作者:KNOXDEV
チーム:OsirisProtocol(https://ctftime.org/team/151343/#.Ynh0zJJAj_s.link)。
チャレンジプロンプト
私の友人は私に旗を送ってくれましたが、それは暗号化されています!彼らが6回噛むと何かを叫ぶのを聞いた…しかし、彼らが何を意味するのか理解できない!旗を解読できますか?
暗号文:kwsbqhS} aYLH!WYg + kDIV0yp [k
最初のステップ
この課題は、間違いなくCTF中毒者のために公園を散歩することであり、既知の平文攻撃とXORの共通のテーマを利用する必要があります。初心者にとって、この課題は、どの暗号化が使用されたかを判断する方法という独特の障害を提示します。ヒント(そしておそらく少しの運)を利用して、6バイトがキーで使用される可能性が高いことを理解できます。暗号の基本的な知識があると、この課題を解決するのに役立ちます。ただし、キーに基づいて、この場合はXORの何らかの形式のストリーム暗号を使用することを推測できます。
XORとは
排他的論理和(XOR)(排他的論理和とも呼ばれます)は、暗号文を作成するためにキーとプレーンテキストの間、または暗号文とプレーンを生成するためにキーとキーの間にビット単位のxor演算子をバイト単位で適用する暗号形式です。文章。
XOR関数は、このチャレンジのロジックを理解するのに役立つ次のルールに従います。
A XOR A = 0 A XOR 0 = A
A XOR B = B XOR A(可換性)
(A XOR B)XOR C = A XOR(B XOR C)(連想性)
私たちのために定義しましょう:Ciphertext = PlainText XOR Key
XORの脆弱性
理論上、XORは次の場合に非常に安全です。
- 不明なランダムキーが使用されています
- テキストのどの部分も知られていない
平文XOR暗号文=キー(最後の証明を参照)
既知平文の適用
フラグの形式がsdctf{であることを思い出してください(これは6バイトであり、別のヒントとして機能するはずです)。
次に、Plaintext XOR CipherText=Keyを適用してフラグを見つけましょう。これが最初の値でどのように機能するかの例を次に示します。
平文:s(バイナリ:01110011)
暗号文:k(バイナリ:01101011)
01110011 XOR
01101011
— — — — — — —
00011000(16進数:18)
キーの最初の部分を取得しました。これと同じプロセスを次の5バイトに適用するか、よりハイテクなツールを使用することができます。
いくつかのきちんとしたツールで鍵を入手する
Cyberchefは、これまで使用したことがない場合は驚異的なツールです。「XORブルートフォース」を使用するレシピを設定しましょう。入力ボックスに、最初の文字(k)を入力します。XORブルートフォースでは、キーの長さが1に設定され、ベビーベッドがsの既知平文に設定されていることを確認します。レシピが返されます:
キー=18:s
キー= 38:S
フラグの形式が小文字であるため、18を選択します。次の5バイトでこのプロセスを繰り返して、キーを取得します。
キー=1813 10 16 17 13
暗号を解く
最後に、キーと暗号文を取得して平文を取得します。CyberChefを使用するには、XORをキー18 13 10 16 17 13で使用し、入力を暗号文kwsbqhS} aYLH!WYg +kDIV0yp[kとして使用します。
これにより、sdctf {KnOwN_PL1ANt3xT_A#acK}が得られ、問題が解決されました。
平文の証明XOR暗号文=キー
PlainTextXORキー=CipherTextを思い出してください
Plaintext=A Key=BおよびCipherText=Cとします。
したがって、A XOR B = C
両側のXORA(両側が等しいため、結果は同じです):A XOR(A XOR B)= A XOR C
連想プロパティの適用:(A XOR A)XOR B = A XOR C
A XOR A = 0:0 XOR B = AXORCを適用します
0 XORBを単純化します。B=AXOR C(これは、ビット単位の0 XOR 0が0であり、0 XOR 1が1であるため、0 XOR BがBであるためです)。
最後に、次の値を置き換えます。Key = PlaintextXORCipherText。