컴퓨터 사이언스 (Computer Science)
컴퓨터를 다루기 위한 기초적인 배경 지식 4. 신뢰성 있는 통신 with CIA
A와 B가 통신을 할 때, A의 메시지를 B가 받았다는 것을 어떻게 확인할 수 있을까요?
다음 예시를 통해 메시지의 신뢰성을 확인하는 방법을 살펴보겠습니다.

- 청군 A가 청군 B에게 10시에 홍군 T를 공격하자는 메시지(요청)를 a 병사를 시켜 보냅니다.
- 청군 B는 메시지를 받으면, A에게 10시에 공격한다는 내용을 확인했다는 메시지(응답)를 b 병사를 시켜 보냅니다.
- 청군 A는 메시지를 받으면, 메시지를 받았다는 확인 메시지(응답)를 c 병사를 시켜 보냅니다.
이와 같은 과정을 3-way handshake라고 합니다. TCP 통신에서 사용하는 방식이며, 메시지의 신뢰성을 보장하기 위한 방법 중 하나입니다.
하지만 홍군 T가 a, b, c 병사를 중간에 찾아내서 죽이고, 다른 메시지를 A와 B측에 보낸다면, A와 B는 서로가 보낸 내용이 맞는지 확인할 수 없을 것입니다. 3-way handshake는 가장 간단한 메시지 인증 방법이지만, 중간의 도청자에 의해 메시지의 보안이 가장 쉽게 깨지기도 합니다.
메시지가 보안이 확보되었다는 것을 확인하기 위한 보안의 3요소가 존재합니다.
- Confidentiality : 기밀성, 메시지가 암호화되어 평문이 노출되지 않아야 합니다.
- Integrity : 무결성, 메시지가 다른 도청자에 의해 훼손되지 않아야 합니다.
- Availability : 가용성, 수신자가 메시지를 해독하여 평문을 읽을 수 있어야 합니다.

이를 줄여서 CIA라고 하며, CIA를 해결하기 위한 여러 방법이 존재합니다.

- 대칭 키 암호화 : A와 B가 같은 키(대칭 키)를 가지고 있고, 평문을 같은 키로 암호화 / 복호화합니다. T가 데이터를 도청 및 위조할 수 없어(키는 A와 B만 소지) 기밀성은 유지되나, 사전에 A와 B가 키를 공유해야 하므로 양 측에 키가 동시에 존재하지 않을 경우 가용성이 깨지게 됩니다. 이를 키 교환의 오류라고 합니다.

- 공개 키 암호화 : A와 B는 각각 남에게 공개하는 공개 키와, 자신만이 가지고 있고 절대 공개하지 않는 개인 키의 한 쌍을 지닙니다. 평문을 서로가 가진 공개 키의 조합을 약수로 가지는 특정한 값으로 암호화하여, 수신 측은 자신의 개인 키로 복호화를 진행할 수 있습니다. 이의 경우 데이터의 기밀성과 가용성은 유지되나, T가 데이터를 위조하여 B에게 전달할 수 있으므로 무결성이 깨지게 됩니다.

- RSA : 공개 키 암호화에서 무결성을 보완하기 위한 방법으로 고안된 암호화 방식입니다. 공개 키 암호화와 동일하게 A와 B는 각각 공개 키와 개인 키의 한 쌍을 가지게 됩니다. 하지만 A가 메시지를 전송할 때 수신 측, 즉 B의 공개 키로 1차 암호화를 진행하고, 자신의 개인 키로 2차 암호화를 진행합니다. A의 공개 키는 공유되어 있으므로 메시지를 받은 B 측은 송신 측, 즉 A의 공개 키로 1차 복호화를 진행하고, 암호문이 나오게 되면 자신의 개인 키로 2차 복호화를 진행합니다.
- C : T가 도청 및 변조를 통해 평문을 변경하거나 새로 만들 수 없으므로 기밀성이 유지됩니다.
- I : A의 개인 키로 암호화하였기에 A의 개인 키가 유출되지 않았다는 가정 하에 A 말고는 암호화를 할 수 없으므로 이는 A가 암호화를 진행하였다는 반증인 부인 방지에 해당하므로 무결성이 유지됩니다.
- A : B는 A의 공개 키와 B의 개인 키로 암호문을 해독할 수 있으므로 가용성이 유지됩니다.

이 RSA 방법을 통해 청군은 100%의 확률로 홍군을 이길 수 있습니다.
- 청군 A는 10시에 홍군을 공격하자는 메시지를 B의 공개키로 1차 암호화하고, A의 개인 키로 2차 암호화하여 B에게 전송합니다.
- 청군 B는 A에게 받은 암호문을 A의 공개키로 1차 복호화를 진행합니다. 복호화 후 암호문이 나온다면 이는 A에게 받은 메시지가 맞으므로 무결성이 유지되고, 암호문이 나오지 않는다면 무결성이 손해된 것이므로 재전송을 요청할 수 있습니다.
- 이때, 홍군 T는 A의 메시지를 도청해도 평문을 해독할 수 없으며(B의 개인 키를 알지 못함), 메시지를 변조해서 B에게 전송하여도 A의 공개 키로 복호화할 수 없으므로(A의 개인 키로 암호화가 불가능하고, A의 공개 키로 B의 공개 키로 암호화된 메시지를 해독할 수 없음) 기밀성이 유지됩니다.
- 청군 B는 무결성을 확인한 후 B의 개인 키로 2차 복호화를 진행합니다. 무결성이 유지되었으므로 평문을 해독할 수 있고, 이로 인해 가용성이 유지됩니다.
RSA에서 사용한 무결성 보완 방법은 전자 서명, 즉 부인 방지의 원리입니다. 이는 은행에서 이체를 진행할 때에도 확인할 수 있습니다.

A가 A 계좌에서 B 계좌로 500원을 이체해달라는 평문을 은행에 전송합니다. 메시지를 암호화할 필요는 없으므로 은행 측의 공개 키로 암호화를 진행하지 않지만, 은행 측에서는 이 메시지를 A가 보낸 것이 맞는지에 대한 확인이 필요합니다.
이때 A는 자신이 요청했다는 것을 인증하기 위해 평문에 A의 개인 키로 암호화를 진행합니다. 이는 기밀성 유지의 목적이 아닌 자신이 요청한 메시지를 인증하기 위한 서명이며, 이를 전자 서명 또는 부인 방지라고 합니다. 우리가 은행 업무를 볼 때 사용하는 공인인증서가 이를 위한 것입니다.
은행은 A가 보낸 메시지를 확인하면 A 계좌에서 500원을 차감하고, B 계좌에 500원을 추가합니다.
이 때, 갑자기 시스템이 마비되어 A 계좌에서 500원이 차감되었는데 B 계좌에 500원이 들어가지 않았다면 어떻게 해야 할까요? 바로 이체에 대한 점검을 진행하고, 막힌 부분부터 다시 이체를 진행해야 할 것입니다. 이때, 이체의 전체 과정을 트랜잭션(Transaction)이라고 합니다. 트랜잭션은 일을 진행하는 최소 단위를 뜻하며, 어떤 일이 끝마치기까지의 과정을 포함합니다.
내용 정리
- 보안의 3요소에는 C(Confidentiality, 기밀성), I(Integrity, 무결성), A(Availability, 가용성)이 있다.
- RSA 암호화는 공개 키 암호화에 무결성을 보장한 방법으로, 수신 측의 공개키로 1차 암호화를 진행하고 자신의 개인 키로 2차 암호화를 진행하여 기밀성, 무결성, 가용성을 동시에 만족할 수 있는 암호화 알고리즘이다.
- 트랜잭션은 일의 최소 단위이며, 일을 제대로 완료하기 위한 과정을 포함한다.
Share article