컴네보 2장 연습 문제
1. SpeacialForces PDF 문제
1. 2개의 키 Cryptographic과 Network Security를 이용하여 다음 메시지를 암호화 하라
- 1차 암호화 : cryptographic
- 2차 암호화 : network security
정답은 아래와 같습니다
ISRNG BUTLF RRAFR LIDLP FTIYO NVSEE TBEHI HTETA
EYHAT TUCME HRGTA IOENT TUSRU IEADR FOETO LHMET
NTEDS IFWRO HUTEL EITDS
1차 암호화에서는 입력 받은 키를 순서대로 적은 후 알파벳 순서대로 숫자를 부여합니다.
입력 받은 메시지는 순차적으로 입력해서 각 칸을 모두 채웁니다
알파벳 순서대로 각 줄을 정렬 한 후 2차 암호화를 시작합니다
1차 때와 동일한 방식으로 각 칸을 모두 채운 후, 알파벳 순으로 세로 한 줄 씩 출력합니다
2. 암호문을 복호화하고 그 과정을 보여라
두 행렬은 역순으로 사용됩니다. 위의 표를 역순으로 읽으면 됩니다
먼저, 암호문이 두 번째 행렬의 열에 배치되며, 두 번째 기억 단어에 의해 지시된 순서를 고려합니다.
그런 다음, 두 번째 행렬의 내용을 왼쪽에서 오른쪽으로, 위에서 아래로 읽고 첫 번째 행렬의 열에 배치하며, 첫 번째 기억 단어에 의해 지시된 순서를 고려합니다.
그런 다음 평문을 왼쪽에서 오른쪽으로, 위에서 아래로 읽습니다.
3. 이 기술을 사용하는 것이 적절한 때에 대해 언급하고 장점이 무엇인지 말해보라
비록 이 방법이 약한 방법이지만, 시간에 민감한 정보와 즉시 좋은 암호 분석에 접근할 수 없는 적(예: 전술적 사용)과 함께 사용할 수 있습니다. 게다가 종이와 연필 이상을 필요로 하지 않으며, 쉽게 기억할 수 있습니다.
3. 대칭 블록 암호 알고리즘 TEA 문제를 풀이하라
1. 상수열을 사용하는데 이것의 중요성과 장점에 대해 말하여라
- 상수 수열을 사용하면 암호화 알고리즘의 안정성이 향상됩니다.
- 이는 무작위성을 높이고 공격자가 평문과 암호문 사이의 패턴을 찾기 어렵게 만듭니다.
2. TEA 처리 과정을 블록 다이어그램이나 흐름도를 이용해서 설명하라
위의 그림은 일반적인 TEA 처리 블록 다이어그램입니다.
알고리즘의 작동을 단계별로 설명하겠습니다.
- 입력 평문을 32비트의 두 부분 (L0, R0)으로 나눕니다.
- 주어진 키를 32비트의 네 부분 (K0, K1, K2, K3)으로 나눕니다.
- 라운드 i와 i+1에서 Li, Ri를 업데이트합니다.
- 라운드를 반복하여 암호화를 수행합니다.
- 최종 라운드 후에 완성된 암호문 (L_final, R_final)을 얻습니다.
3. 만약 오직 한 쌍의 라운드만 사용한다면, 암호문은 64비트 블록 L2, R2로 구성 된다. 이 경우 복호화 알고리즘을 방정식으로 나타내라
TEA 알고리즘의 복호화가 가능한 이유는 암호화와 복호화 과정이 거의 동일한 구조를 갖고 있기 때문입니다.
암호화와 복호화는 기본적으로 동일한 라운드 함수를 사용하며, 복호화 과정에서는 암호화 과정에서 사용된 서브키와 델타 값이 역순으로 적용됩니다.
(아래 식의 +는 modulo 합을 나타냅니다)
암호화 방정식을 살펴보겠습니다:
- L2 = L0 + [(R0 << 4) + K0] ⊕ [R0 + δ1] ⊕ [(R0 >> 5) + K1]
- R2 = R0 + [(L2 << 4) + K2] ⊕ [L2 + δ2] ⊕ [(L2 >> 5) + K3]
복호화 방정식 - R0 = R2 + [(L2 << 4) + K2] ⊕ [L2 + δ2] ⊕ [(L2 >> 5) + K3]
- L0 = L2 + [(R0 << 4) + K0] ⊕ [R0 + δ1] ⊕ [(R0 >> 5) + K1]
4. 위의 문제 (b)에서 사용한 설명을 이용해 문제 C를 풀어라
복호화 프로세스를 단계별로 설명할 수 있습니다.
- 암호문을 32비트의 두 부분 (L2, R2)으로 나눕니다.
- 주어진 키를 32비트의 네 부분 (K0, K1, K2, K3)으로 나눕니다.
- 암호화와 동일한 방식으로 Li, Ri를 업데이트하지만, 역순으로 적용합니다.
- 라운드를 반복하여 복호화를 수행합니다.
- 최종 라운드 후에 완성된 평문 (L0, R0)을 얻습니다.
4. 페이스텔 복호화가 페이스텔 암호화의 복호화임을 보여라
페이스텔 암호화 알고리즘은 블록 암호화 방식 중 하나로, 입력된 평문을 두 부분으로 나눈 후 여러 라운드를 거쳐 암호화하는 과정입니다.
각 라운드에서 암호화 된 데이터의 한쪽 절반이 그대로 유지되고, 다른 절반이 키와 함께 변환 함수를 거칩니다. 이를 반복하여 암호화를 완료하게 됩니다.
복호화 과정에서는 암호화와 동일한 알고리즘이 사용되지만, 키의 순서가 반대로 적용됩니다.
이를 통해 복호화 과정의 각 라운드에서 암호화 과정의 해당 라운드와 동일한 중간 값을 얻습니다.
복호화 과정을 자세히 설명하면 아래와 같습니다.
- 암호화 과정에서, 각 라운드의 입력값은 (LEi, REi)로 표기하겠습니다. 이때, LEi는 왼쪽 절반의 값이고, REi는 오른쪽 절반의 값입니다.
- 암호화 과정이 진행되면서, REi는 변환 함수와 키를 거쳐 LEi+1로 업데이트되고, LEi는 그대로 REi+1로 업데이트됩니다.
- 복호화 과정에서 입력값을 (LDi, RDi)로 표기하겠습니다. 이때, 복호화의 첫 라운드 입력값은 암호화의 마지막 라운드 출력값의 32비트 swap입니다.
- 복호화 과정에서, 암호화 과정의 역순으로 키가 적용되며, REi의 값이 변환 함수와 키를 거쳐 LEi로 업데이트되고, LEi는 그대로 RDi+1로 업데이트됩니다.
- 이렇게 하면 복호화 과정의 각 라운드에서 암호화 과정의 해당 라운드와 동일한 중간 값을 얻게 됩니다.
- 복호화 과정이 완료되면, 원래의 평문을 얻을 수 있음을 확인할 수 있습니다.
요약하자면, 페이스텔 암호화 알고리즘의 핵심 원리는 두 부분으로 나눈 평문에 대해 여러 라운드를 거쳐 암호화하는 것입니다.
각 라운드에서는 한쪽 절반의 데이터만이 변환 함수와 키를 거치게 되며, 이를 통해 안전한 암호화를 제공합니다.
복호화 과정은 암호화와 동일한 알고리즘을 사용하되, 키의 순서를 반대로 적용함으로써 원래 평문을 복원합니다.
이를 통해 페이스텔 암호화 알고리즘이 양방향으로 동작하며, 암호화된 데이터를 원래 평문으로 되돌릴 수 있음을 보여줍니다.
5. 한 번의 오라클 쿼리를 이용해서 M을 결정할 수 있는가?
m 결정이 가능합니다.
일반적인 페이스텔 암호에서는 암호화와 복호화 프로세스가 거의 동일한 구조를 가지고 있지만, 키 스케줄은 역순으로 적용됩니다.
이 경우, 각 라운드에서 사용되는 서브키가 다르므로 암호화 후 복호화를 거치면 원래의 평문이 나옵니다.
그러나 이 문제에서 제시된 미러 구조 키 스케줄링은 암호화의 라운드 1~8과 복호화의 라운드 9~16이 같은 키 값을 사용하도록 설계되어 있습니다. 즉, 암호화와 복호화 과정에서 사용되는 키가 동일하게 됩니다.
이렇게 되면 암호화와 복호화 프로세스가 동일한 프로세스를 따르게 되며, 암호화를 두 번 수행하면 원래의 평문이 반환되는 결과를 얻게 됩니다.
조금 더 보충 설명을 하겠습니다.
오라클 쿼리는 블랙 박스입니다 즉 입력 값에 대한 결과 값만이 확인 할 수 있습니다.
일반적인 페이스텔 암호의 경우 암호화에 사용되는 서브키가 모두 다르기 때문에, 서브키를 모르는 상황에서 문제에서 요구하는 조건을 만족 할 수 없습니다.
하지만, 위와 같이 서브키(라운드 키)가 미러 구조를 가지게 되면, 복호화 역시, 암호화가 동일한 서브키를 가짐이 자명함으로 암호문 C를 주었을 때 m을 받을 수 있음이 자명합니다
7. 비트스트림을 중복되지 않은 비트 쌍인지 조사하라
1. 원래 수열에서 각각의 상이 발생할 확률은 어떻게 되는가?
원래 수열에서 각각의 쌍이 발생할 확률을 살펴보겠습니다.
각 비트는 독립적이고 동일한 확률로 발생한다고 가정했으므로, 각 쌍이 발생할 확률은 다음과 같습니다.
00 쌍이 발생할 확률: (0.5 - a) * (0.5 - a)
01 쌍이 발생할 확률: (0.5 - a) * (0.5 + a)
10 쌍이 발생할 확률: (0.5 + a) * (0.5 - a)
11 쌍이 발생할 확률: (0.5 + a) * (0.5 + a)
여기서 a는 0보다 크고 0.5보다 작은 어떤 값입니다.
이렇게 하면 원래 수열에서 각각의 쌍이 발생할 확률을 알 수 있습니다.
2. 수정된 수열에서 0과 1이 발생할 확률은 어떻게 되는가?
수정된 수열에서 0과 1이 발생할 확률을 알아보겠습니다. 수정된 수열에서 0과 1이 발생하려면 원래 수열에서 다음 쌍들이 발생해야 합니다.
수정된 수열에서 0이 발생하려면 원래 수열에서 01 쌍이 발생해야 합니다.
수정된 수열에서 1이 발생하려면 원래 수열에서 10 쌍이 발생해야 합니다.
위에서 계산한 원래 수열에서 쌍들이 발생할 확률을 사용하여 수정된 수열에서 0과 1이 발생할 확률을 구할 수 있습니다.
수정된 수열에서 0이 발생할 확률: (0.5 - a) * (0.5 + a)
수정된 수열에서 1이 발생할 확률: (0.5 + a) * (0.5 - a)
수정된 수열에서 0과 1의 발생 확률은 원래 수열의 확률과 같습니다.
이렇게 되면 수정된 수열에서 0과 1이 동일한 확률로 발생하게 됩니다.
3. X개의 출력 비트를 생성하기 위해 입력 되는 비트 수는 몇 개가 되어야 하는가?
먼저 특정 쌍이 00이거나 11인 경우 해당 쌍이 버려질 확률을 구해야 합니다.
각각의 경우에 대한 확률을 더하면 해당 쌍이 버려질 확률을 구할 수 있습니다.
- 00 쌍이 발생할 확률: (0.5 - a)^2
- 11 쌍이 발생할 확률: (0.5 + a)^2
따라서 00이거나 11인 쌍이 버려질 확률은 두 확률을 더한 값이 됩니다.
- 버려질 확률 = (0.5 - a)^2 + (0.5 + a)^2
- 정리 된 버려질 확률 = 0.5 + 2a^2
x개의 출력 비트를 생성하기 위해 필요한 입력 비트 수의 기대값은 x / (0.25 - a^2)입니다.
이 때 분모는 버려지지 않는 쌍(즉, 01과 10)의 확률을 의미합니다.
앞서 구한 버려질 확률은 0.5 + 2a^2였습니다. 따라서 버려지지 않는 쌍의 확률은 1 - (0.5 + 2a^2)입니다.
- 버려지지 않는 쌍의 확률 = 1 - (0.5 + 2a^2) = 0.5 - 2a^2
이제 이 확률을 사용하여 x개의 출력 비트를 생성하기 위한 기대되는 입력 비트 수를 계산할 수 있습니다. - 기대되는 입력 비트 수 = x / (0.5 - 2a^2)
이 식을 사용하면, x개의 출력 비트를 생성하기 위해 필요한 기대되는 입력 비트 수를 구할 수 있습니다.
4. 위의 문제 2번에서 사용한 설명을 이용해서 문제 3번을 풀어라
주어진 조건은 1의 확률이 0.5 + a, 0의 확률이 0.5 - a로 주어졌습니다.
이 경우, 01과 10 쌍이 발생할 확률이 동일하게 됩니다.
이 알고리즘이 00과 11 쌍을 제거하고, 01 쌍을 0으로, 10 쌍을 1로 대체하므로, 이러한 과정을 거치고 나면 결과적으로 1과 0이 교대로 나오는 완전히 예측 가능한 수열이 생성되게 됩니다.
즉 알고리즘 00과 11 쌍을 제거하고, 01 쌍을 0으로, 10쌍을 1로 대체하므로 결과적으로 완전 예측가능하다
12. ECB 모드에서 전송된 암호문 블록에 오류가 발생한다면 단지 해당되는 평문 블록에만 영향을 준다. 그러나 CBC 모드에서는 이 오류가 환산된다 질문에 답하라
a. 이 문제에서, 전송된 C1의 오류는 P1과 P2에 영향을 미칩니다. 그러나, P2 이후의 블록에는 영향을 미치지 않습니다. CBC 모드에서 오류가 발생하면 바로 다음 블록까지만 전파되며, 이후 블록들은 영향을 받지 않습니다. 예를 들어, C1이 손상된 경우 출력 블록인 P3는 입력 블록인 C2와 C3에만 의존합니다.
b. CBC 모드에서 평문 블록 P1에 오류가 발생하면, 이 오류는 암호문 블록 C1에 영향을 미칩니다. 그리고 C1은 다음 암호문 블록 C2의 계산에 입력되므로, C2도 영향을 받습니다. 이러한 효과는 모든 암호문 블록에 영향을 미칠 수 있습니다. 그러나 수신기에서 복호화 알고리즘이 작동할 때, 오류가 있는 블록을 제외하고 올바른 평문을 복원할 수 있습니다. 이를 복호화 과정의 수식으로 증명할 수 있습니다. 따라서, 오류는 실질적으로 오류가 발생한 블록과 바로 다음 블록에만 영향을 미칩니다.
13. CBC 모드를 이용한 전송에서다수의 평문 ;블록에 병렬로 암호화 절차를 수행 할 수 있는가? 복호화의 경우는 어떠한가?
CBC 모드에서는 복호화 작업을 병렬로 수행할 수 있지만, 암호화 작업은 병렬로 수행할 수 없습니다.
암호화의 경우, 각 평문 블록은 이전 암호문 블록과 XOR 연산을 수행한 후 암호화됩니다. 이전 암호문 블록은 이전 평문 블록의 암호화 결과에 따라 달라지므로, 암호화 작업은 순차적으로 진행해야 합니다.
그러나 복호화의 경우, 각 암호문 블록이 복호화되면 이전 암호문 블록과 XOR 연산을 수행하여 평문을 얻습니다. 이 작업은 암호문 블록이 이미 주어져 있으므로, 복호화 작업은 병렬로 진행할 수 있습니다.
레퍼런스
'Computer Science > Security' 카테고리의 다른 글
페이로드-공격 에이전트-좀비, 봇 (0) | 2023.05.28 |
---|---|
SSH의 포트포워딩 (0) | 2023.05.04 |
공개키 기반구조(PKIX) (1) | 2023.04.19 |
비대칭 암호를 이용한 키 분배 (0) | 2023.04.19 |
컴퓨터 네트워크 보안 4장 연습 문제 (0) | 2023.04.18 |