DIGITAL CRYPTOGRAPHY PUZZLE 05【Cypher編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
問題文
1001011110110101
Round 1 key: YS
Round 2 key: BX
問題文では、暗号化の対象である平文と、各ラウンドで用いる鍵(2文字)が与えられています。
BES(Basic Encryption Standard)の暗号化の仕様が書かれているので、この手順に従い暗号化します。
ヒント
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
The order of operations is important when decrypting.
解答への道
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
1:"Arrange text and key into 4×4 blocks."
テキストと鍵を並び替えて、それぞれ4×4のブロックにします。
1001 0111 1011 0101 ←テキスト(平文)
↓ブロック化
1001
0111
1011
0101
YS
↓ASCII文字から16進数値に変換
0x59 0x53
↓バイト列に変換
0101 1001 0101 0011
↓ブロック化
0101
1001
0101
0011
スペースの有効活用のために並べる
1001 0101
0111 1001
1011 0101
0101 0011
2:"Swap columns 1/2 and 3/4 of each block."
各ブロックにおいて1列目と2列目、3列目と4列目を入れ替えます。
1234 1234
---- ----
1001 0101
0111 1001
1011 0101
0101 0011
↓列の入れ替え
2143 2143
---- ----
0110 1010
1011 0110
0111 1010
1010 0011
3:"Substitute (XOR) text block using key block."
鍵ブロックを使って、テキストブロックをXORします。
※各行でXOR演算します。
0110 XOR 1010 -> 1100
1011 XOR 0110 -> 1101
0111 XOR 1010 -> 1101
1010 XOR 0011 -> 1001
4:"Shift rows of text block +0,+1,+2,+3."
テキストブロックの各行を右方向へシフトします。
ただし、シフトするビット数は、1行目が0、2行目が1、…になります。
1100 -(0bit right shift)-> 1100
1101 -(1bit right shift)-> 1110
1101 -(2bit right shift)-> 0111
1001 -(3bit right shift)-> 0011
以上で1ラウンドが終了になります。
得られた値は1100 1110 0111 0011になります。
5:引き続いて、次のラウンド処理を実行します。
テキストは前段のラウンドで得られた結果、鍵はラウンド2用の"BX"を用います。
アルゴリズムについては変わりません。
1. ブロック化
1100 1110 0111 0011 ←ラウンド1の結果
↓ブロック化
1100
1110
0111
0011
BX
↓ASCII文字から16進数値に変換
0x42 0x58
↓バイト列に変換
0100 0010 0101 1000
↓ブロック化
0100
0010
0101
1000
スペースの有効活用のために並べる
1234 1234
---- ----
1100 0100
1110 0010
0111 0101
0011 1000
2. 列の入れ替え
2143 2143
---- ----
1100 1000
1101 0001
1011 1010
0011 0100
3. XOR演算する
1100 XOR 1000 -> 0100
1101 XOR 0001 -> 1100
1011 XOR 1010 -> 0001
0011 XOR 0100 -> 0111
4. 右シフトする
0100 -(0bit right shift)-> 0100
1100 -(1bit right shift)-> 0110
0001 -(2bit right shift)-> 0100
0111 -(3bit right shift)-> 1110
5. 出力テキスト
0100 0110 0100 1110
↓
0x46 0x4E
↓
FN
最終的に得られた文字列は"FN"です。
今回は単純な変換問題でした。
解答
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
↓↓下にスクロール↓↓
おわりに
以上で本ルームはすべてクリアしたことになります。