
개념 설명
Round Keys(라운드 키)
지금은 KeyExpansion(키 확장)단계에 대한 자세한 내용은 건너뛰겠다. 요점은 16byte 키를 가져와서 초기 키에서 파생된 "라운드 키"라고 하는 11개의 4x4행렬을 생성하는 것이다. 이러한 "라운드 키 round key"를 통해 AES는 우리가 제공한 단일 키에서 추가 마일리지를 얻을 수 있다. (추가적인 이점이 있다는 듯)
다음 단계인 초기 키 추가 단계(initial key addition)에는 단일(하나의) AddRoundKey단계가 있다. AddRoundKey단계는 간단하다. 현재 상태 배열(state)과 라운드 키를 XOR한다.
AddRoundKey는 각 라운드의 마지막 부분에서도 발생한다. AddRoundKey는 단순한 순열이라기보다는 "키 순열(Keyed Permutation)"으로 만드는 것이다. AES에서 키가 상태 배열에 혼합되는 유일한 부분이지만 발생하는 순열을 결정하는데 중요하다.
이전 문제에서 본 것처럼, XOR은 키를 알고 있으면 쉽게 복호화 할 수 있는 작업이지만, 모르고 있으면 복호화하기 어렵다.
이제 일련의 치환, 전치암호와 함께 11개의 서로 다른 키로 XOR된 평문을 복구하려고 한다고 상상해보자. 그것이 AES가 하는 일이다.
그리고 우리는 다음 몇 문제에서 뒤섞임(jumbling)이 얼마나 효과적인지 보게 될 것이다.
add_round_key 함수를 완료한 다음, matrix2bytes함수를 사용하여 다음 플래그를 획득하라.
문제 풀이
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):
for i in range(4):
for j in range (4):
s[i][j] ^= k[i][j]
return s;
def matrix2bytes(matrix):
res = ''
for i in range(4):
for j in range(4):
res += chr(matrix[i][j])
return res
print(matrix2bytes(add_round_key(state, round_key)))
상태 배열과 round key를 xor하고 해당 행렬을 문자열로 변환한다.


개념 설명
Round Keys(라운드 키)
지금은 KeyExpansion(키 확장)단계에 대한 자세한 내용은 건너뛰겠다. 요점은 16byte 키를 가져와서 초기 키에서 파생된 "라운드 키"라고 하는 11개의 4x4행렬을 생성하는 것이다. 이러한 "라운드 키 round key"를 통해 AES는 우리가 제공한 단일 키에서 추가 마일리지를 얻을 수 있다. (추가적인 이점이 있다는 듯)
다음 단계인 초기 키 추가 단계(initial key addition)에는 단일(하나의) AddRoundKey단계가 있다. AddRoundKey단계는 간단하다. 현재 상태 배열(state)과 라운드 키를 XOR한다.
AddRoundKey는 각 라운드의 마지막 부분에서도 발생한다. AddRoundKey는 단순한 순열이라기보다는 "키 순열(Keyed Permutation)"으로 만드는 것이다. AES에서 키가 상태 배열에 혼합되는 유일한 부분이지만 발생하는 순열을 결정하는데 중요하다.
이전 문제에서 본 것처럼, XOR은 키를 알고 있으면 쉽게 복호화 할 수 있는 작업이지만, 모르고 있으면 복호화하기 어렵다.
이제 일련의 치환, 전치암호와 함께 11개의 서로 다른 키로 XOR된 평문을 복구하려고 한다고 상상해보자. 그것이 AES가 하는 일이다.
그리고 우리는 다음 몇 문제에서 뒤섞임(jumbling)이 얼마나 효과적인지 보게 될 것이다.
add_round_key 함수를 완료한 다음, matrix2bytes함수를 사용하여 다음 플래그를 획득하라.
문제 풀이
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):
for i in range(4):
for j in range (4):
s[i][j] ^= k[i][j]
return s;
def matrix2bytes(matrix):
res = ''
for i in range(4):
for j in range(4):
res += chr(matrix[i][j])
return res
print(matrix2bytes(add_round_key(state, round_key)))
상태 배열과 round key를 xor하고 해당 행렬을 문자열로 변환한다.
