SSH의 실제 역할
Splync는 HTTPS를 사용하여 스마트폰과 서버 간 경로를 보호하지만, 사용자 데이터의 안전을 위해 서버 자체를 보호해야 합니다. 앱 개발자와 시스템 관리자에게는 서버에 들어가 업데이트를 관리하고 배포할 수 있는 안전한 방법이 필요합니다. 여기서 SSH(보안 셸)가 등장합니다. SSH는 승인된 사용자가 신뢰할 수 없는 네트워크를 통해서도 원격 컴퓨터에 안전하게 로그인할 수 있도록 하는 프로토콜입니다. 사용자 이름과 비밀번호를 평문으로 전송하던 Telnet과 같은 구식의 안전하지 않은 방법을 대체합니다.
‘키’의 개념
SSH는 일반적인 비밀번호에 의존하지 않고, 암호화된 키를 사용합니다. 이는 공개 키와 개인 키가 서로 맞물리는 한 쌍으로, 자물쇠와 열쇠의 관계와 같습니다. 공개 키는 서버에, 개인 키는 사용자에게 있습니다. 연결 시 서버는 개인 키를 가지고 있음을 증명하도록 요구하지만, 절대 그 키를 드러내지 않습니다. 이는 도청자가 당신을 사칭하는 것을 거의 불가능하게 만듭니다. 일반 비밀번호는 추측, 유출, 재사용될 수 있지만, SSH 키는 긴 랜덤 암호 문자열로 거의 추측할 수 없습니다. 누군가가 연결을 감지하더라도, 그들이 볼 수 있는 것은 암호화된 소음뿐입니다. 그리고 SSH 키는 네트워크를 통해 전송되지 않기 때문에 전송 중에 도난당할 일이 없습니다.
SSH 키는 어떻게 생겼을까
SSH 키를 본 적이 없다면 추상적으로 들릴 수 있지만, 사실은 인코딩된 긴 텍스트 덩어리에 불과합니다. 공개 키는 보통 몇백 자이며, 개인 키는 천 자가 넘을 수 있습니다. 둘 다 텍스트 파일로 저장되지만, 내용은 무작위 소음처럼 보이며, 문자, 숫자, 기호의 혼합입니다. 공개 키는 공유해도 안전하며, 서버에 잠금을 거는 것과 같습니다. 반면 개인 키는 고유한 디지털 신원으로 절대 공유되지 않아야 합니다. 개인 키는 컴퓨터에 로컬로 저장되고, 사용자가 주장하는 본인임을 증명하는 데만 사용됩니다. 이 과정에서 키 자체를 드러낼 필요는 없습니다.
공개 키와 개인 키
공개 키는 집에 걸어 두는 자물쇠와 같습니다. 길가에서도 누구든지 볼 수 있지만, 자물쇠를 보는 것만으로는 열 수 있는 방법을 알 수 없습니다. 즉, 누구나 볼 수 있지만, 올바른 열쇠만이 잠금을 해제할 수 있습니다. 반면, 개인 키는 그 잠금을 여는 열쇠이며, 항상 안전하게 보관되어야 합니다. 만약 누군가가 당신의 개인 키를 손에 넣게 되면, 마치 당신인 것처럼 집에 들어갈 수 있습니다. 그래서 항상 비밀로 유지되어야 합니다.
SSH 메커니즘
각 공개 키와 개인 키는 유일무이한 일대일 쌍을 형성합니다. 이들은 수학적 과정을 통해 함께 생성되어, 해당하는 공개 키에만 해당 개인 키가 맞습니다. 이들을 맞춤 제작된 자물쇠와 열쇠로 생각할 수 있습니다. 같은 알고리즘(RSA 또는 Ed25519)을 사용하여 또 다른 쌍을 생성하더라도 내부의 숫자는 완전히 다를 것입니다. 이 둘을 연결하는 수학은 일방향으로, 개인 키에서 공개 키로는 쉽게 도출할 수 있지만, 공개 키에서 개인 키를 찾아내는 것은 실질적으로 불가능합니다. 그래서 각 SSH 키 쌍은 고유하고 안전합니다.
SSH가 신원을 증명하는 방법
SSH를 통해 서버에 로그인할 때, 개인 키는 절대 컴퓨터를 떠나지 않습니다. 대신 서버는 일회성 퍼즐과 같은 무작위 도전을 보냅니다. 이 퍼즐은 오직 개인 키로만 풀 수 있습니다. 컴퓨터는 그 도전을 수학적으로 서명하여, 서버가 공개 키로 확인할 수 있는 짧은 답변을 생성합니다. 답변이 맞으면, 서버는 당신이 올바른 개인 키를 가지고 있음을 알게 됩니다. 이는 비밀을 드러내지 않고 신원을 증명할 수 있는 현대 암호학의 마법입니다. SSH 인증은 개인 키가 공개 키를 도출할 모든 정보를 포함하고 있지만, 그 반대는 거의 불가능하기 때문에 작동합니다.
개발자들이 SSH를 사용하는 방법
개발자들이 코드를 배포하거나 데이터베이스를 업데이트하고 서비스를 다시 시작할 때마다 SSH를 통해 원격 서버에 연결합니다. 인증 후, 안전한 명령어 라인 연결을 통해 서버에 접근하게 됩니다. 여기서부터 파일을 관리하고, 서비스를 재시작하거나 로그를 검사할 수 있으며, 모든 과정은 끝까지 암호화됩니다. Splync의 경우, SSH는 클라우드 서버를 안전하게 관리하는 방법입니다. 업데이트 배포, 로그 확인, 데이터 백업 등 모든 관리 작업은 암호화된 키로 보호된 SSH 연결을 통해 이루어집니다. 올바른 개인 키 없이는 누구도 서버에 접근할 수 없습니다. 누군가가 IP 주소를 알더라도, 그 키 없이는 문이 열리지 않습니다.
다음으로: 서버 내부의 암호화
SSH는 서버 출입구를 보호하며, HTTPS는 전송 중 데이터를 보호합니다. 그러나 데이터가 데이터베이스에 도달하면 어떻게 안전하게 보호할까요? 해싱과 암호화가 필요한 마지막 방어선입니다.