Season 1/워게임

[CryptoHack] MATHMATICS(Vectors)

작성자 - ikbak_2

먼저 격자를 정의하거나 암호학에서 격자가 어떻게 나타나는지에 대해 이야기하기 전에, 선형 대수의 기본 사항을 살펴보겠습니다. 다음 도전 과제들은 복습으로 간주되어야 하며, 만약 이것이 완전히 처음이라면 약간의 백그라운드 독서가 필요할 수 있습니다. 여전히 우리는 "수학적 암호학 입문" (Hoffstein, Pipher, Silverman) 및 격자 및 그 응용에 대한 이 훌륭한 소개를 추천합니다.

벡터 공간 V는 필드 F 위에서 정의된 집합으로, 두 개의 이항 연산자로 구성됩니다. 벡터 v ∈ V 및 스칼라 a ∈ F에 대해, 벡터 합은 두 개의 벡터를 가져와서 다른 벡터를 생성합니다: v + w = z, 여기서 v, w, z ∈ V 및 스칼라 곱은 벡터와 스칼라를 가져와서 다른 벡터를 생성합니다: a*v = w, 여기서 v, w ∈ V이고 a ∈ F입니다.

아마도 처음으로 벡터를 보게 되는 경우는 실수 위에 정의된 이차원 벡터 공간의 맥락일 것입니다. 우리는 여기서도 이것을 예로 사용할 것입니다!

실수 위의 이차원 벡터 공간을 고려해 봅시다. 벡터 v ∈ V는 숫자의 쌍으로 나타낼 수 있습니다: v = (a,b), 여기서 a, b ∈ R입니다. 벡터 합은 v + w = (a,b) + (c,d) = (a+c, b+d)로 작동하며, 스칼라 곱은 cv = c(a,b) = (ca, cb)로 작동합니다.

또한 내적(또는 점 곱)을 정의할 수 있습니다. 이는 두 벡터를 가져와 스칼라를 반환합니다. 형식적으로 우리는 v ∙ w = a라고 생각합니다. 여기서 v, w ∈ V이고 a ∈ F입니다. 이차원 예제에서 내적은 v ∙ w = (a,b) ∙ (c,d) = ac + bd로 작동합니다.

이제 플래그를 볼 시간입니다! 실수 위에서 정의된 세 차원 벡터 공간에서 v = (2,6,3), w = (1,0,0) 및 u = (7,7,2)로 주어졌을 때, 3*(2v - w) ∙ 2u를 계산하세요.
더보기
v = [2,6,3] w = [1,0,0] u = [7,7,2] def list_x(a,b): for i in range(3): b[i]=a*b[i] return b def list_m(a,b): for i in range(3): a[i]=a[i]-b[i] return a def scalar(a,b): c=0 for i in range(3): c += a[i]*b[i] return c result = scalar(list_x(3,list_m(list_x(2, v), w)), list_x(2, u)) print(result)

3 * (2v - w) ∙ 2u

여기서 v = (2,6,3), w = (1,0,0) 및 u = (7,7,2)이다.

먼저 식을 계산해 보면

2v = 2 * (2,6,3) = (4,12,6)
2v - w = (4,12,6) - (1,0,0) = (3,12,6)

그 다음에 내적을 계산합니다:

3*(3,12,6) ∙ 2u = 9*14+ 36*14 + 18*4 = 72 + 504 + 126 = 702

따라서 3*(2v - w) ∙ 2u의 결과, 즉 플래그 값은 702입니다.

이 글이 도움이 되었다면, 응원의 댓글 부탁드립니다.