WARGAME/cryptography

[CryptoHack] Round Keys

lucykorea414 2024. 1. 22. 16:32
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