SSH란? 공개 키 암호화란?
SSH란 단어는 개발하면서 자주 볼 수 있는 단어다. 내 컴퓨터에서 AWS에 연결할 때나 깃허브 레포를 클론받을 때도 필요하다.
모르고 살다가 이번 기회에 SSH가 뭔 뜻인지, SSH 작동 근간인 공개 키 암호화에 대해 포스팅한다.
위키백과의 SSH 설명은 아래와 같다.
https://en.wikipedia.org/wiki/Secure_Shell
SSH(Secure Shell Protocol)는 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜이다. 가장 주목할만한 응용 프로그램은 원격 로그인 및 커맨드 라인 실행이다. SSH 앱은 SSH 클라이언트 인스턴스를 SSH 서버와 연결하는 클라이언트-서버 아키텍처를 기반으로 한다. SSH는 3가지 주요 계층 구성요소로 구성된 계층화된 프로토콜 제품군으로 작동한다. 전송 계층은 서버 인증, 기밀성 및 무결성을 제공한다. 사용자 인증 프로토콜은 서버에 대한 사용자의 유효성을 검사한다. 연결 프로토콜은 암호화된 터널을 여러 논리적 통신 채널로 다중화한다...(중략)...SSH는 1995년 핀란드 컴퓨터 과학자 Tatu가 처음 설계했다. 프로토콜 사양은 SSH-1과 SSH-2라는 2가지 주요 버전을 구별한다. 가장 일반적으로 구현되는 소프트웨어 스택은 OpenBSD 개발자가 1999년에 오픈소스 소프트웨어로 출시한 OpenSSH다
SSH는 공개 키 암호화를 사용해서 원격 컴퓨터를 인증하고 필요한 경우 사용자 인증을 허용한다. SSH는 여러 방법론에서 사용될 수 있다. 가장 간단한 방법은 통신 채널의 양 끝에서 자동 생성된 public-private 키 쌍을 사용자가 수동 생성하는 경우, 기본적으로 키 쌍이 생성될 때 인증이 수행되고 암호 프롬프트 없이 자동으로 세션이 열릴 수 있다. 이 시나리오에서 public 키는 소유자가 비공개로 유지하는 일치하는 private 키의 소유자에 대한 접근을 허용해야 하는 모든 컴퓨터에 배치된다. 인증은 private 키를 기반으로 하지만 인증 중에는 키가 네트워크를 통해 전송되지 않는다. SSH는 public 키를 제공하는 동일한 사람이 일치하는 private 키도 소유하고 있는지 확인한다. SSH의 모든 버전에서 알 수 있는 public 키를 확인하는 게 중요하다. 즉 유효한 것으로 수락하기 전 public 키를 ID와 연결하는 것이다. 유효성 검사 없이 공격자의 public 키를 수락하면 권한이 없는 공격자를 유효한 사용자로 인증한다
https://ko.wikipedia.org/wiki/%EC%8B%9C%ED%81%90%EC%96%B4_%EC%85%B8
시큐어 셀(SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계됐으며 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신할 수 있는 기능을 제공한다. 기본적으로는 22번 포트를 사용한다. SSH는 암호화 기법을 사용하기 때문에 통신이 노출되더라도 이해할 수 없는 암호화된 문자로 보인다
SSH는 OSI 7계층 중 가장 높은 7계층인 응용 계층(Application layer)에 속한다. 이 계층에 위치한 프로토콜은 FTP, SFTP, SMTP, RTSP, DNS, 비트토렌트 등이 있다. 모두 한 번쯤은 들어본 이름이다.
그런데 공개 키 암호화라는 뜻모를 단어가 보인다. 이 단어를 알면 SSH 이해를 더 잘 할 수 있을 것 같으니 확인해 보는데 깊게 파고들진 않을 것이다.
https://en.wikipedia.org/wiki/Public-key_cryptography
공개키(public key) 암호화 또는 비대칭 암호화는 관련 키 쌍을 사용하는 암호화 시스템 분야다. 각 키 쌍은 공개 키(public key)와 해당 개인 키(private key)로 구성된다. 키 쌍은 단방향 함수라는 수학적 문제를 기반으로 하는 암호화 알고리즘으로 생성된다. 공개 키 암호화의 보안은 private key를 비밀로 유지하는 데 달려 있다. public key는 보안을 손상시키지 않고 공개적으로 배포할 수 있다. public key 암호화 시스템에선 public key를 가진 사람은 누구나 메시지를 암호화해서 암호문을 얻을 수 있지만 해당 private key를 아는 사람만이 암호문을 해독해서 원본 메시지를 얻을 수 있다. 예를 들어 저널리스트는 소스가 암호문으로 뉴스 조직에 비밀 메시지를 보낼 수 있도록 웹 사이트에 암호화 키 쌍의 public key를 게시할 수 있다. 해당 개인 키를 알고 있는 저널리스트만이 소스의 메시지를 얻기 위해 암호문을 해독할 수 있다. 저널리스트에게 가는 중에 이메일을 읽는 도청자는 암호문을 해독할 수 없다. 그러나 public key 암호화는 소스가 보낸 메시지를 보내는 데 사용한 컴퓨터, 메시지를 보낸 기기 또는 메시지 길이 같은 메타데이터를 숨기지 않는다. public key 암호화 자체는 메시지를 보낸 사람에 대해 수신자에게 아무것도 알려주지 않는다. private key로만 해독할 수 있는 암호문에 메시지 내용을 숨길 뿐이다
해당 public key를 가진 사람은 누구나 서명이 메시지와 일치하는지 여부를 확인할 수 있지만 private key를 모르는 위조자는 public key로 통과할 메시지 / 서명 쌍을 확인할 수 없다...(중략)...public key 알고리즘은 전자 통신 및 데이터 저장의 기밀성, 신뢰성, 부인 불가성을 보장하는 응용 프로그램 및 프로토콜을 포함해 현대 암호 시스템의 기본 보안 요소다. TLS, SSH, S/MIME 및 PGP 같은 수많은 인터넷 표준을 뒷받침한다. 일부 public key 알고리즘은 키 배포 및 보안을 제공하고, 일부는 디지털 서명을 제공하며 일부(RSA 등)는 둘 다 제공한다. 대칭 암호화와 비교할 때 비대칭 암호화는 좋은 대칭 암호화보다 다소 느리며 너무 느리다. 오늘날 암호 시스템(TLS)은 대칭 암호화, 비대칭 암호화를 모두 사용하며 종종 비대칭 암호화를 써서 대칭 암호화에 쓰이는 private key를 안전하게 교환한다
https://ko.wikipedia.org/wiki/%EA%B3%B5%EA%B0%9C_%ED%82%A4_%EC%95%94%ED%98%B8_%EB%B0%A9%EC%8B%9D
공개키 암호 방식은 암호 방식의 한 종류로 비밀키 암호 방식과 달리 암호화, 복호화에 이용하는 키가 다른 방식을 말한다. 공개키 암호를 구성하는 알고리즘은 대칭키 알고리즘 방식과 비교해서 비대칭 암호라고 부르기도 한다
공개키 암호 방식은 크게 2가지로 나눌 수 있다
- 공개키 암호 : 특정 비밀 키를 갖고 있는 사용자만 내용을 열어볼 수 있음
- 공개키 서명 : 특정 비밀 키로 만들었다는 걸 누구나 확인할 수 있음
공개키 암호 방식은 열쇠로 잠겨 있고 좁은 투입구가 있는 편지함에 비유할 수 있다. 이런 편지함은 위치(공개키)만 알면 투입구를 통해 누구나 편지를 넣을 수 있지만 열쇠(개인키)를 가진 사람만 편지함을 열어 내용을 확인할 수 있다. 공개키 서명은 인장으로 편지봉투를 봉하는 것에 비유할 수 있다. 이렇게 봉인한 편지는 누구나 열어볼 수는 있지만 인장 확인을 통해 인장을 가진 발신자가 이 편지를 보냈음을 증명할 수 있다
일반적으로 공개키 암호 방식은 비밀키 암호보다 계산이 복잡한 단점이 있기 때문에 효율을 위해 비밀키 암호(혹은 대칭 암호)와 같이 쓰인다. 메시지를 임의로 만들어진 비밀키를 이용해 암호화한 다음, 이 비밀키를 수신자의 공개키로 암호화해서 메시지와 함께 전송하는 것이다. 이렇게 하면 공개키 암호 기술로는 짧은 비밀키만을 암호화하고 보다 효율적인 비밀키 암호 기술로 전체 메시지를 암호화하기 때문에 양쪽의 장점을 취할 수 있다
공개키 암호화의 핵심은 개인키는 누군가가 혼자만 갖고 있는 키고 공개키는 누구나 가질 수 있는 키다. 그러나 모두가 공개키를 갖고 있다고 해도 개인키에 접근해서 암호화된 데이터를 복호화할 수 있는 건 특정 누군가만 갖고 있는 공개키다. 옛날 현관문의 열쇠랑 비슷해 보인다. 누구나 열쇠를 가질 순 있지만 집 문을 따고 들어가는 건 그 집에 사는 가족들만 가능하며 다른 사람들은 불가능하다.
SSH의 통신 절차는 아래와 같다.
- 송신자가 수신자의 공개키를 구한다
- 송신자는 수신자의 공개키로 평문을 암호화한다
- 송신자는 암호화된 메시지를 상대방에게 전달한다. 메시지는 암호화되어 있기 때문에 전달 중 유출되거나 도청되더라도 암호문으로부터 원문을 알아내기 어렵다
- 수신자는 자신의 비밀키로 암호화된 메시지를 해독해서 평문을 얻는다
이 공개키 암호화의 장단점은 아래와 같다.
장점
- 키를 공유하지 않아도 암호화를 통한 안전한 데이터 통신이 가능하다
- 키 관리, 분배가 용이하다
- 256비트의 암호키를 사용할 경우 복호화하는데 아주 오랜 시간이 걸린다
- 비밀키를 잘 간수한다면 키를 바꿀 경우가 적다
단점
- 수학적인 난제를 기반으로 설계되서 암호화, 복호화를 수행하는 연산이 복잡한 수학 연산 기반으로 구성되어 효율성, 속도가 대칭키 암호화 방식보다 느리다
이 정도의 장단점이 있는 암호화 방식이란 건 알겠다. 그래서 이 방식에 따르면 SSH는 비밀키는 호스트 컴퓨터같은 관리자 컴퓨터가 갖고 있고, 공개키는 그 컴퓨터에 접근을 시도하는 모든 컴퓨터들이 구할 수 있다. 그러나 관리자 컴퓨터가 가진 비밀키를 복호화해서 원문을 해독할 수 있는 건 특정 컴퓨터뿐이고 그 외의 컴퓨터에선 접근할 수 없다.
참고한 사이트)