대칭키 암호화 방식
대칭키 암호화 방식은 암호화 알고리즘의 한 종류로, 암호화와 복호화에 같은 암호키를 쓰는 알고리즘을 의미합니다.
대칭키 암호에서는 데이터를 암호화하는 송신자와 데이터를 복호화를 하는 수신자가 같은 암호키를 공유해야 합니다. 이러한 점은 공개키 암호화 방식에서 공개키와 비밀키를 별도로 가지는 것과 구별됩니다.
대신, 대부분의 대칭키 암호화 방식은 공개키 암호화 방식과 비교하여 계산 속도가 빠르다는 장점을 가집니다.
A가 B에게 '안녕'이라는 데이터를 그냥 보내게 되면 중간에서 C가 데이터를 가로챌 수 있습니다.
일반적인 '안녕'이라는 데이터라면 상관없지만 비밀번호와 같은 민감한 정보가 전송될 때는 유출되어서는 안 됩니다.
유출되지 않기 위해서는 이 데이터를 암호화해서 전송해야 합니다.
만약 K 열쇠로 암호화해서 데이터를 전송한다면 C는 데이터를 열어볼 수 없지만, 목적지인 B 또한 열어보지 못합니다.
그래서 A와 B는 사전에 K 열쇠를 공유하고 있어야 하는데, 공유하기 위해서는 열쇠 또한 통신선으로 전송해야 합니다. 그럼 결국 C도 K 열쇠를 가질 수 있게 됩니다. 이렇게 데이터를 암호화 할 때 K 열쇠로 암호화하고 풀 때도 K 열쇠로 데이터를 풀 수 있는 암호화 방식을 대칭키 방식 이라고 합니다. 즉 암호화할 때와 복호화할 때 같은 키를 사용하는 것입니다.
대칭키 방식 단점 : 열쇠 교환 또한 통신이기 때문에 열쇠 교환이 어렵습니다.
대칭키 방식을 보완하기 위해 나온 암호화 방식이 RSA 방식입니다.
공개키 암호화 방식 (RSA)
공개키 암호화 방식은 대칭키 암호화 방식과 달리 암호화와 복호화에 이용하는 키가 다른 방식을 말합니다.
이 방식은 키 2개를 사용합니다. A 열쇠로 암호화하면 B 열쇠로 복호화할 수 있고,B 열쇠로 암호화 하면 A열쇠로 복호화할 수 있습니다.
이를 공개키 기반 암호화 방식이라고 합니다. 그 대표적인 알고리즘을 RSA라고 합니다.
A와 B는 데이터를 주고 받기 위해 각자의 공개키, 비밀키를 하나씩 만듭니다.
공개키의 특징은 누구나 알 수 있는 키이고, 비밀키는 본인만 알고 있는 키입니다. 공개키는 네이버 포털 사이트에 누구나 볼 수 있게 공개해도 되는 키입니다.
A가 데이터를 B에게 전송하려고 할 때 데이터를 A의 공개키로 암호화하면 A의 비밀키로만 복호화 할 수 있기 때문에 B가 데이터를 읽을 수 없습니다.
반대로 A의 비밀키로 암호화하면 C도 A의 공개키를 알 수 있기 때문에 복호화 할 수 있어서 A의 비밀키로 암호화 하는것도 안 됩니다.
이때는 B의 공개키로 암호화하여 B가 가진 비밀키로만 풀어볼 수 있게 해주어야 합니다.
즉, 데이터를 암호화 하려면 본인이 아닌 상대방의 공개키로 암호화해야합니다.
B의 공개키로 비밀번호를 잘 암호화하고 전송하려는데, C가 중간에 물리적인 길을 차단하고 데이터를 훔칠 수 있습니다. C는 B의 비밀키가 없어서 데이터를 열어볼 수는 없지만, A가 전송한 데이터를 폐기해버리고 다른 비밀번호를 넣어 B의 공개키로 암호화한 후에 B에게로 전송할 수도 있습니다.
B는 C가 보낸 데이터를 받게 되고 잘못된 비밀번호를 전송했다고 A에게 비밀번호를 다시 보내라고 얘기할 것이고 A는 이유를 알 수 없습니다.
그래서 데이터를 암호화하는 것도 중요하지만 누가 보낸 데이터인지 확인하는 것도 중요합니다. 이것도 RSA 방식으로 해결할 수 있습니다.
B의 공개키로 암호화한 데이터를 A의 비밀키로 한 번 더 암호화하여 데이터를 전송합니다.
B가 데이터를 받으면 어떻게 해야 할까요?
첫째로 데이터를 A의 공개키로 풀어봅니다. 풀리면 A가 보낸것을 확신할 수 있습니다. 이것을 전자서명이라고 합니다.
둘째로 A의 공개키로 풀어진 데이터를 B의 비밀키로 풀어서 비밀번호를 확인합니다. B의 비밀키는 B만 가지고 있는 것이기 때문에 B만 열 수 있습니다.
위 2가지 과정을 거치면 데이터 전송을 안전하게 할 수 있습니다. 즉 송신자는 데이터를 암호화한 뒤 전자서명하여 전송하고, 수신자는 데이터 전자서명을 확인한 뒤, 데이터를 복호화하여 확인하는 것입니다.
이렇게 서로 어떻게 데이터를 변조해서 보내고, 복호화해서 풀지에 대한 약속을 정해야 하는데 이것을 프로토콜이라고 합니다.
프로토콜
프로토콜은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고받는 양식과 규칙의 체계를 말합니다.
데이터 송신 방법
1. 데이터를 수신자의 공개키로 암호화합니다. (암호화)
2. 암호화한 데이터를 송신자의 비밀키로 한 번 더 암호화합니다. (전자서명)
3. 전송합니다.
데이터 수신 방법
1. 데이터를 송신자의 공개키로 복호화합니다. (서명검증)
2. 1번이 열리면 수신자의 비밀키로 복호화합니다. (복호화)
RSA 개념이 필요한 이유
AWS의 서울 region에서 컴퓨터 1대를 임대하여 사용할 건데, 이 컴퓨터에 들어가기 위해 방화벽에 열려있는 22번 포트로 접속해야 합니다.
외부에서 접속이 완료가 되어야 통신할 수 있는데 접속하려고 할 때 아무에게나 열어주면 안 됩니다.
EC2 컴퓨터의 폴더 내부를 확인해보면(ls-al).ssh 폴더가 하나 있습니다.
이 폴더에 들어가 보면(cd.ssh -> ls-al) authorized_keys 파일이 있습니다.
EC2 컴퓨터 내부에 .ssh 폴더 안에 authorized_key라는 파일 내부에 클라이언트의 공개키가 있는 것입니다.
그러면 우리는 컴퓨터에 접속할 때 클라이언트의 비밀키(private key)를 가지고 접속해야 합니다.
비밀키를 가지고 접속하면 22번 포트를 통과하여 클라이언트가 가져온 비밀키로 전자 서명 방식을 통해 인증하는 것입니다.
인증이 완료되고 나면 클라이언트와 EC2 컴퓨터 양쪽에 세션이 생성됩니다.
세션이 만들어지고 나면 자유로운 통신이 가능하게 됩니다.
'AWS' 카테고리의 다른 글
리눅스 명렁어 step 2 (0) | 2024.10.31 |
---|---|
리눅스 명렁어 step 1 (1) | 2024.10.29 |
EC2 서버 방화벽 (2) | 2024.10.27 |
네트워크 기본기 - 패킷의 여행 (0) | 2024.10.27 |
EC2 서버에 접속하기 (0) | 2024.10.24 |