보안 셸(SSH)은 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜입니다. 널리 사용되는 전송 계층 프로토콜(TSP)인 SSH는 클라이언트와 서버 간의 연결을 보호하는 데 사용됩니다. SSH는 기본적으로 기존 Telnet과 버클리 rlogin, rsh, rexec 프로토콜과 같은 보안되지 않은 원격 셸 프로토콜을 대체하기 위해 설계되었습니다. 이러한 프로토콜은 비밀번호와 같은 중요한 정보를 일반 텍스트 형식으로 전송하며, 패킷 분석이나 심층 패킷 검사와 같은 방법을 사용하여 가로채거나 유출될 위험이 있습니다. SSH가 사용하는 암호화는 인터넷과 같은 보안되지 않은 네트워크에서 데이터의 기밀성과 무결성을 보장합니다.

SSH는 어떻게 작동하나요?
SSH 프로토콜은 인증을 위해 클라이언트-서버 모델을 사용합니다. 데이터 암호화 그들 사이에 전송됨.
세션에 대한 암호화 협상
- 버전 교환: 클라이언트가 TCP 연결을 설정하면 서버는 지원하는 프로토콜 버전으로 응답합니다. 클라이언트가 허용하는 프로토콜 버전 중 하나와 일치하면 연결이 계속됩니다.
- 키 교환 초기화: 키 교환을 시작하기 위해 양측은 서로에게 SSH_MSG_KEX_INIT 메시지를 전송합니다. 메시지에는 각자 선호하는 암호화 기본 요소 목록이 함께 전송됩니다. 이러한 기본 요소는 키 교환 및 대량 데이터 암호화를 수행하는 데 사용되는 기본 구성 요소입니다. 다음 표(표 1)는 암호화 기본 요소의 몇 가지 예를 보여줍니다.

- 디피-헬만 초기화: 키 교환은 클라이언트가 임시 키 쌍(개인 키와 관련 공개 키)을 생성하고 공개 키를 서버로 보내는 것으로 시작됩니다. SSH_MSG_KEX_ECDH_INIT 메시지(그림 2). 서버는 클라이언트가 로그인을 시도하는 계정의 authorized_keys 파일에서 키 ID를 확인합니다. 엄격한 키 검사가 활성화되어 있고 키가 올바르지 않은 경우, 서버는 연결을 거부하여 알 수 없는 클라이언트와의 연결을 차단합니다. 생성된 키 쌍은 키 교환 중에만 사용되고 이후 폐기됩니다. 따라서 공격자가 암호화된 트래픽을 수동적으로 기록하는 동안 개인 키를 훔치는 것은 매우 어렵습니다. 이러한 특성을 전방 비밀성(forward secrecy)이라고 합니다.

- 디피-헬만 답변: 수신 시 SSH_MSG_KEX_ECDH_INIT 메시지에 따라 서버는 자체 임시 키 쌍을 생성합니다. 공유 비밀 키 K는 서버가 자체 키 쌍과 클라이언트의 공개 키를 사용하여 생성합니다. 공유 비밀 키 생성이 성공적으로 완료되면 교환 해시 H가 생성됩니다(그림 3). 이 교환 해시는 서버가 서명하여 서명 HS를 생성합니다(그림 4).

교환 해시와 서명은 여러 가지 목적으로 사용됩니다.
• 교환 해시와 그 서명의 서명 또는 검증 루프를 통해 클라이언트는 서버가 호스트 개인 키의 소유권을 가지고 있는지 확인할 수 있습니다. 소유권이 있다면 클라이언트는 올바른 서버에 연결된 것입니다.
• 교환 해시에 입력하는 대신 교환 해시에 서명하면 핸드셰이크가 더 빠르게 이루어집니다.

교환 해시는 해시를 취하여 생성됩니다. SHA256, SHA384 or SHA512(키 교환 알고리즘에 따라) 다음 필드:
• 매직스 M
• 서버 호스트 공개 키(또는 인증서) HPub
• 클라이언트 공개 키 A
• 서버 공개 키 B
• 공유 비밀 K
Magics는 클라이언트 버전, 서버 버전, 클라이언트로 구성됩니다. SSH_MSG_KEXINIT 메시지와 서버 SSH_MSG_KEXINIT 메시지. 이 정보를 가지고 SSH_MSG_KEX_ECDH_답장 메시지는 서버에서 다음을 통해 구성될 수 있습니다.
• 서버 B의 임시 공개 키,
• 서버 HPub의 호스트 공개 키,
• 그리고 거래소 해시 HS에 대한 서명입니다.
후 SSH_MSG_KEX_ECDH_답장 클라이언트가 이를 수신하면 클라이언트는 비밀 K와 교환 해시 H를 계산할 수 있습니다.
클라이언트는 호스트 공개 키(또는 인증서)를 추출합니다. SSH_MSG_KEX_ECDH_답장 그리고 교환 해시 HS의 서명을 검증하여 호스트 개인 키의 소유권을 증명합니다.
방지하기 위해 중간자 공격(MITM) 공격의 경우, 서명이 검증된 후, 검색된 호스트 공개 키(또는 인증서)를 신뢰할 수 있는 호스트의 로컬 데이터베이스와 대조하여 확인합니다. 이 키(또는 인증서)가 신뢰할 수 없는 경우 연결이 종료됩니다.
아래와 같은 메시지(그림 5)를 본 적이 있다면, 제시된 키가 알려진 호스트의 로컬 데이터베이스에 없다는 의미입니다.

서버에 대한 사용자 액세스 인증
다음 단계는 사용자 인증 및 접근 권한 결정입니다. 다양한 인증 메커니즘이 있지만, 어떤 메커니즘을 사용할지는 서버의 구성 목적에 따라 달라집니다.
가장 간단한 방법은 비밀번호 인증이지만, 복잡성과 자동화된 비밀번호 해독 스크립트로 인해 권장하지는 않습니다.
가장 널리 사용되고 권장되는 대안은 SSH 키 쌍을 사용하는 것입니다. SSH 키 쌍은 비대칭 키입니다. 공개 키는 데이터 암호화 개인 키로만 복호화할 수 있습니다. 공개 키는 자유롭게 공유할 수 있는데, 개인 키는 암호화할 수 있지만 공개 키에서 개인 키를 추출할 방법이 없기 때문입니다.
제품 개요
SSH는 합의된 암호화 기본 형식을 통해 설정된 원격 서버 구성 및 대칭 키 쌍을 통한 사용자 인증을 위한 보안된 암호화 채널을 제공합니다.
다음 다이어그램은 비밀번호 인증 메커니즘을 사용하여 보안 채널을 설정하는 SSH 핸드셰이크의 다양한 단계를 보여줍니다.




