6주차 - 암호 보고서

Bae YuSeon·2022년 11월 10일
0

E-COPS

목록 보기
7/9
post-thumbnail

정규 세션 복습

  • 대칭키 암호
    암복호화에 사용하는 키가 동일한 방식으로 각 사용자 pair 마다 키를 교환해야 하는 문제가 있다.

  • 공개키 암호 (비대칭키 암호)

  1. 각 사용자 pair 마다 키를 secure하게 공유해야 한다는 대칭키 시스템의 한계를 보안하기 위해 생긴 암호로 암복호화에 사용하는 키가 서로 다르다.
  2. 송신자의 공개키로 암호화한 메시지는 송신자의 사설키로만 복호화가 가능하다. (정보의 기밀성의 보장)
  3. 송신자의 사설키로 암호화한 메시지는 송신자의 공개키로만 복호화가 가능하다. (부인 방지 기능)

CryptoHack Challenge 풀이

CryptoHack 사이트

INTRODUCTION

  1. Finding Flags Finding Flags

    flag : crypto{y0ur_f1rst_fl4g}

  2. Great Snakes Great Snakes
    첨부된 파일을 실행시키면 플래그가 출력된다.

    flag : crypto{z3n_0f_pyth0n}

  3. Network Attacks Network Attacks
    첨부된 파일을 열어서 보면

#!/usr/bin/env python3

import telnetlib
import json

HOST = "socket.cryptohack.org"
PORT = 11112

tn = telnetlib.Telnet(HOST, PORT)


def readline():
    return tn.read_until(b"\n")

def json_recv():
    line = readline()
    return json.loads(line.decode())

def json_send(hsh):
    request = json.dumps(hsh).encode()
    tn.write(request)


print(readline())
print(readline())
print(readline())
print(readline())


request = {
    "buy": "clothes"
}

json_send(request)

response = json_recv()

print(response)

이 코드에서 "buy": "clothes"를 "buy": "flag"로 바꾸어 실행 시키면 flag가 출력된다.

request = {
    "buy": "flag"
}

flag : crypto{sh0pp1ng_f0r_fl4g5}

GENERAL

Encoding


  1. ASCII ASCII
    Python에서 chr()함수는 ASCII 서수를 문자로 변환하는 데 사용할 수 있다는 힌트를 통해 코드를 짜고 실행시키면 flag가 출력된다.
array = [99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 110, 116, 52, 98, 108, 51, 125]

flag = ""

for i in range(len(array)):
    flag += chr(array[i])

print(flag)

flag : crypto{ASCII_pr1nt4bl3}

  1. Hex Hex Python에서 bytes.fromhex()함수를 사용하여 16진수를 바이트로 변환할 수 있다는 힌트를 통해 코드를 짜고 실행시키면 flag가 출력된다.
hax_string = bytes.fromhex('63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d')

print(hax_string)

flag : crypto{You_will_be_working_with_hex_strings_a_lot}

  1. Base64 Base64 Python에서 base64를 import하고 hex를 먼저 decoding하라는 힌트를 통해 코드를 짜고 실행시키면 flag가 출력된다.
import base64

hex_string = bytes.fromhex('72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf')

print(base64.b64encode(hex_string).decode())

flag : crypto/Base+64+Encoding+is+Web+Safe/

  1. Bytes and Big Integers Bytes and Big Integers long_to_bytes()라는 함수를 사용해서 변환하면 flag를 얻을 수 있다.
    (PyCryptodome을 먼저 설치해야 한다.)

    flag : crypto{3nc0d1n6_4ll_7h3_w4y_d0wn}

  2. Encoding Challenge Encoding Challenge 해결하기 힘들어서 구글링을 했다. Pwntools의 기초와, json 문법에 대해서 알아야 한다고 한다.

    flag : crypto{3nc0d3_d3c0d3_3nc0d3}

XOR


  1. XOR Starter XOR Starter label을 13과 xor하면 flag가 출력된다.
data = "label"
flag = ''

for i in data:
    flag += chr(ord(i) ^ 13)

print('crypto{{{}}}'.format(flag))

flag : crypto{aloha}

  1. XOR Properties XOR Properties
from pwn import xor

k1=bytes.fromhex('a6c8b6733c9b22de7bc0253266a3867df55acde8635e19c73313')
k2_3=bytes.fromhex('c1545756687e7573db23aa1c3452a098b71a7fbf0fddddde5fc1')
flag=bytes.fromhex('04ee9855208a2cd59091d04767ae47963170d1660df7f56f5faf')

print(xor(k1,k2_3,flag))  

flag : crypto{x0r_i5_ass0c1at1v3}

  1. Favourite byte Favourite byte 첫 글자가 c임을 이용해서 xor되는 바이트를 알아낸다.
input_str = bytes.fromhex('73626960647f6b206821204f21254f7d694f7624662065622127234f726927756d')

key = input_str[0] ^ ord('c')
print(''.join(chr(c ^ key) for c in input_str))

flag : crypto{0x10_15_my_f4v0ur173_by7e}

  1. You either know, XOR you don't
    flag의 앞 글자가 crypto{ 인 것을 이용하라는 힌트가 있다.

    flag : crypto{1f_y0u_Kn0w_En0uGH_y0u_Kn0w_1t_4ll}

  2. Lemur XOR 두 이미지를 xor 해주는 대신에 추가나 빼기를 해주면 flag가 나온다.

flag : crypto{X0Rly_n0t!}

SYMMETRIC CIPHERS

HOW AES WORKS


  1. Keyed Permutations 일대일 대응의 수학 용어는 무엇입니까?

    flag : crypto{bijection}

  2. Resisting Bruteforce AES에 대한 최고의 단일 키 공격의 이름은 무엇입니까?

    flag : crypto{biclique}

  3. Structure of AES
def matrix2bytes(matrix):
    """ Converts a 4x4 matrix into a 16-byte array.  """
    return bytes(sum(matrix, []))

matrix = [
    [99, 114, 121, 112],
    [116, 111, 123, 105],
    [110, 109, 97, 116],
    [114, 105, 120, 125],
]

print(matrix2bytes(matrix))

flag : crypto{inmatrix}

SYMMETRIC STARTER


  1. Modes of Operation Starter encrypt_flag를 해독하고 hex to bytes를 실행하면 flag를 얻을 수 있다.

    flag : crypto{bl0ckc1ph3r5_4r3_f457!}

  2. Passwords as Keys words를 다운받아서 가능한 키들을 모두 decrypt했을 때 앞글자가 cr로 시작하는 것으로 필터링하면 flag가 출력된다.

    flag : crypto{k3y5rn07__p455w0rdz?}

0개의 댓글

관련 채용 정보