WARGAME/cryptography

[CryptoHack] Structure of AES

lucykorea414 2024. 1. 22. 14:56
728x90

AES 암호화 과정 설명

https://www.youtube.com/watch?v=gP4PqVGudtg

 

 

 

AES 암호화 과정 요약

1. Key Expansion

     128비트 키에서 11개의 128비트 라운드키가 파생된다. 

2. Initial key addition

     AddRoundKey - 첫번째 라운드 키는 바로 state(plaintext의 블록)와 XOR 연산된다.

3. Round - 9개의 라운드와 마지막 10번째 최종 라운드를 포함해 총 10번 반복된다.

     a) SubBytes - state의 각 바이트는 S-box에 따라 다른 바이트로 대체된다.

     b) ShiftRows - state 행렬의 마지막 3행은 1~3열만큼 전치된다.

     c) MixColums - state의 각 열에 대해 행렬 곱셈이 수행되어 각 열의 네 바이트가 결합된다. (최종 라운드에서는 이 단계 생략)

     d) AddRoundKey - 현재 라운드키의 바이트와 state의 바이트가 XOR 연산된다.

 

 

 

 

 

 

 

 


퀴즈)

 

 

matix.py의 내용

def bytes2matrix(text):
    """ Converts a 16-byte array into a 4x4 matrix.  """
    # plain text -> state matrix
    return [list(text[i:i+4]) for i in range(0, len(text), 4)]

def matrix2bytes(matrix):
    """ Converts a 4x4 matrix into a 16-byte array.  """
    # state matrix -> bytes
    # ???? #

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

print(matrix2bytes(matrix))

 

여기서 matrix2bytes에 대한 부분의 코드를 작성해야한당!!

 

flat_matrix = [val for col in matrix for val in col]
return bytes(flat_matrix)

 

이렇게 작성하면 행렬에 대한 각 열에 대한 각 값을 하나씩 가져와서 나열할 수 있음!!

- for col in matrix : 행렬에 대한 각 열

- for val in col: 그 열에 대한 값

 

이때 얘를 bytes() 를 사용해서 byte form으로 나타낼 수 있음!!

 

그럼 답은~

728x90

'WARGAME > cryptography' 카테고리의 다른 글

[CryptoHack] Confusion through Substitution  (1) 2024.01.22
[CryptoHack] Round Keys  (0) 2024.01.22
[CryptoHack] Resisting Bruteforce  (0) 2024.01.22
[CryptoHack] Keyed Permutations  (0) 2024.01.22
[CryptoHack] Modular Inverting  (0) 2024.01.16