728x90
Initial key addition 의 단계 -> AddRoundKey
현재 state 와 현재 round key를 XOR 연산 해준다!
- AddRoundKey는 각 라운드가 끝날때 마지막 단계에서 일어난다
- AES에서 가장 중요한 부분!! -> 왜냐면 키가 state에 서로 섞이는 단계라서
AES에서 키를 알면 복호화를 하기 정말 쉽지만 키를 모르면 정말 어려움.
근데 심지어, AES에서는 11개의 키를 통해 state와 섞이기 때문에 정말 어려움^^..
퀴즈)
add_round_key.py의 내용
state = [
[206, 243, 61, 34],
[171, 11, 93, 31],
[16, 200, 91, 108],
[150, 3, 194, 51],
]
round_key = [
[173, 129, 68, 82],
[223, 100, 38, 109],
[32, 189, 53, 8],
[253, 48, 187, 78],
]
def add_round_key(s, k):
# ???
print(add_round_key(state, round_key))
여기서 각 행렬에 해당하는 값들을 xor 시켜서 행렬을 만든뒤, 전 문제에서 나온 matrix2bytes() 함수를 이용해서 텍스트값을 구해보자!!
def add_round_key(s, k):
""" state matrix (s), round key matrix (k) """
result = []
# 각 행에 대한 반복
for i in range(len(s)):
row_result = []
# 각 열에 대한 반복
for j in range(len(s[0])):
# XOR 연산 후 결과를 현재 행렬에 추가
element_result = s[i][j] ^ k[i][j]
row_result.append(element_result)
# 현재 행의 결과를 전체 결과 리스트에 추가
result.append(row_result)
return result
처음에 이렇게 작성했는데
넘 긴것 같아서 이것저것 찾아보니깐
def add_round_key(s, k):
""" state matrix (s), round key matrix (k) """
result = [[s[i][j] ^ k[i][j] for j in range(len(s[0]))] for i in range(len(s))]
이렇게 짧게 한줄로 요약 가능..^^
이걸로 하고 matrix2bytes() 함수 가져와서 끌어다가 해보면~~~
728x90
'WARGAME > cryptography' 카테고리의 다른 글
[CryptoHack] Confusion through Substitution (1) | 2024.01.22 |
---|---|
[CryptoHack] Structure of AES (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 |