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 |