SSH(Secure Shell Protocol)
SSH란?
Secure Shell Protocol 즉 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜이다.
SSH는 개발 혹은 운영 중에 필수적으로 접하게 된다.
대표적으로 github 이용시 giuthub 코드를 푸쉬 혹은 clone 할때 사용.
사용하는 이유?
SSH 를 사용하는 이유는 민감한 정보를 주고 받는 다면 정보를 직접 네트워크를 통해 넘기기 때문에 해당 정보를 열어볼 수 있어 보안에 상당히 취약.
하지만 SSH 사용시 보안적으로 훨씬 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 보다 보안적인 면에서 뛰어나기 떄문에 "보안"의 목적을 위해 사용한다.
SSH 대칭키방식과 비대칭키 방식 모두를 사용하여 인증 및 암호화를 진행
대칭키 방식 - 동일한 키 값으로 암호화와 복호화를 진행하는 방식
비대칭키 방식- 암호화에 사용되는 키와 복호화에 사용되는 키가 서로 다른 방식
기본적으로 SSH는 한쌍의 key를 통해 접속하려는 컴퓨터와 인증과정을 거친다.
public key - 공개키, 공개되어도 비교적 안전한 키, 공개키를 통한 암호화는 가능하지만, 복화화는 불가.
pirvate key - 비공개키, 외부에 노출이되어서는 안되는 키, 시스템 내부에 저장되어 있고, 암호화된 메시지를 복호화 할 있도록 돕는 역할.
서버 인증
- 클라이언트 난수 생성 , 난수에 대한 해시를 생생하여 저장
- 클라이언트 생성한 난수 값을 public key를 통해 암호화하여 데이터를 전송
- 서버 측에서는 암호화된 데이터를 private key를 통해 복호화 한 후 난수값을 확인
- 복호화된 난수값을 통해 해시를 생성 후, 다시 클라이언트 전송
- 클라이언트에서는 전송 받은 해시와 젖아하고 있는 해시를 비교 정상적인 서버인지 확인
클라이언트 인증
- 서버 난수 생성, 해시 생성하여 저장
- 서버 생성한 난수 값을 public key를 통해 암호화하여 데이터를 전송
- 클라이언트에서는 암호화된 데이터를 private key를 통해 복호화 한 후 난수값을 확인
- 복호화된 난수값을 통해 해시를 생성, 해시 값을 서버로 전송
- 서버는 자신이 가지고 있는 해시와 전송받은 해시를 비교하여 사용자 체크
서버, 클라이언트의 인증이 모두 끝나면 , 비대칭 키를 통해 서로 대칭키(세션 키)를 교환하게 된다.
이 후 통신 되는 모든 데이터는 세션키를 통해서 암호화가 이루어지고 접속 해제시 세션키는 폐기
HTTPS와 SSH를 비교해 보자면, 데이터를 암호화 한다는 점은 공통적인 부분.
HTTPS는 브라우저를 통해, 브라우저에서의 통신을 위해 이루어지는 프로토콜이라 한다면,
SSH는 더 깊이 OS까지의 통신 및 접근을 가능.