Backend/Network

SSH

petitCoding 2012. 4. 12. 11:53

SSH (Secure Socket Shell)

 

SSH는 터미널에 접속할 때 암호화 기능을 제공하여 보다 안전하게 데이터를 사용할 수 있도록 해주는 프로토콜이다.

보통 Xshell, putty 등을 이용해서 터미널에 접속하는데,  이런 툴들은 모두 SSH를 지원한다.

아래 그림은 패킷 덤프를 떴을때 나오는 SSH 패킷의 일부이다.

 

 

SSH는 TCP 위에서 동작하며, 기본 22번 포트를 사용한다. (물론 변경도 가능하다.)

패킷의 형식은 위에서 보면 알 수 있는데, 처음 4바이트는 패킷의 길이, 그리고 1바이트 패딩 길이, 그 뒤에 패이로드가 존재한다.

SSH에서는 기본적으로 데이터 암호화, 무결성 그리고 데이터 압축을 지원한다.

처음 SSH 핸드셰이크 할 때는 이러한 기본적인 정보에 대해서 주고받는데, 항목은 다음과 같다.

 

cookie
 송신자에 의해 랜덤으로 생성되는 값. 세션 ID 및 키 값을 추측할 수 없도록 하기 위해 사용한다.
 
kex_algorithms
 암호화에 사용할 알고리즘.  키 교환에 사용될 알고리즘이며 클라이언트-서버 모두가 이 알고리즘을 지원해야 한다.
 
server-host-key-algorithms
 서버 호스트 키를 위한 알고리즘 목록.  일단 서버가 이 목록을 보내면 클라이언트는 사용 가능한 알고리즘을 선택한다. 호스트 키가 여러 개고, 각각 다른 알고리즘이 사용될 수도 있다.
 
encryption_algorithms
 대칭 암호화 알고리즘의 리스트이다. 서버에서 목록을 보내면, 클라이언트에서 사용할 알고리즘을 리스트 제일 앞에 표시하여 응답한다. 만약 사용할 알고리즘이 없으면 연결이 종료된다.
 
mac_algorithms
 MAC 을 위한 알고리즘이다. 없을 수도 있다.
 
compression_algorithms
 데이터 압축 알고리즘이다. 사용되지 않을 수도 있다.

 

 

어떻게 보면 TLS와 흡사한것 같기도 하다~!

 

반응형

'Backend > Network' 카테고리의 다른 글

패킷 송 수신 처리  (0) 2012.04.12
IPv6 헤더 구조  (0) 2012.04.12
ICMP  (0) 2012.04.12
TLS 프로토콜 정리.  (0) 2012.04.12
OSI MODEL  (0) 2012.04.12