SSH(Secure Shell)
- 네트워크 상에서 암호화된 안전한 커뮤니케이션을 제공하는 프로토콜
- 주로 원격으로 서버를 관리할 때 사용되며, 데이터의 안전성과 보안성을 보장
- 원격 서버 관리, 안전한 파일 전송, 보안 터널링 등 다양한 상황에서 필수적인 도구
- 항상 최신 버전을 유지하고, 강력한 비밀번호 또는 공개 키 인증을 사용하는 등의 보안 사항을 유의
- 공개키를 사용하여 안전하게 세션 키를 교환하고, 이 세션 키를 사용하여 데이터를 암호화하고 복호화하는 방식을 사용
- 공개키 암호화의 보안성과 대칭키 암호화의 효율성을 결합한 방법
- 하이브리드 암호화
- 공개키와 세션키
- 공개키는 공개적으로 공유되어 데이터를 암호화하고 복호화
- 세션키는 특정 세션 동안의 통신을 보호하는 데 사용
- 공개키 (public key)
- 공개키 암호화는 두 가지 키, 즉 공개키와 비밀키(또는 개인키)를 사용
- 이 때, 클라이언트와 서버는 서로 다른 keypair를 이용하는데, 이를 비대칭 키 방식이라 함
- 공개키와 비밀키를 keypair라 부름
- 이 두 키는 수학적으로 연관되어 있지만, 하나의 키로 다른 키를 도출하는 것은 계산적으로 불가능
- 공개키는 모두에게 공개되며, 데이터를 암호화하거나 디지털 서명을 검증하는 데 사용
- 반면, 비밀키는 소유자만이 알고 있으며, 암호화된 데이터를 복호화하거나 디지털 서명을 생성하는 데 사용
- ssh에서 클라이언트와 서버는 서로의 공개키를 주고 받아, 보낼 인증을 암호화 함
- 서로의 공개키로 암호화된 메시지를 자신의 비밀키로 복호화해 서로를 인증
- 세션키 (session key)
- 세션키는 특정 세션 또는 일정 기간 동안의 통신에서만 사용되는 암호화 키
- 세션키는 대칭키 암호화에서 사용되며, 동일한 키를 사용하여 데이터를 암호화하고 복호화
- SSH 같은 프로토콜에서는, 클라이언트와 서버가 처음 연결을 설정할 때 Diffie-Hellman 키 교환 알고리즘을 사용하여 세션 키를 생성하고 공유
- 이 세션키는 그 세션 동안의 모든 통신을 암호화하고 복호화하는 데 사용
- 특징
- 보안성
- 모든 통신을 암호화하여, 중간에 데이터를 가로채는 것을 막음
- 서버와 클라이언트 간의 인증을 위해 비밀번호 또는 공개 키 인증 방식을 사용
- 편의성
- 어디서든 원격으로 서버에 접속 가능
- 서버 관리를 훨씬 유연하고 편리하게 만듬
- 다양한 기능
- 단순한 원격 접속 뿐만 아니라, 파일 전송(SCP, SFTP), 포트 포워딩, 터널링 등 다양한 기능을 제공
- 널리 사용되는 표준
- 리눅스, 유닉스, 맥 OS, 윈도우 등 다양한 운영 체제에서 널리 사용되는 표준 프로토콜
- 과정
- 클라이언트-서버 구조를 사용하여 네트워크 상에서 안전한 커뮤니케이션을 제공
- 세션 시작
- 클라이언트가 SSH 서버에 연결 요청
- 이때 클라이언트는 서버의 공개 키를 받음
- 암호화
- 클라이언트는 받은 공개 키를 사용해 일련의 암호화 과정을 거침
- 이 과정에서 생성된 암호화된 데이터(세션 키)는 서버의 공개 키로 암호화되어 서버에게 전송
- 이 세션 키는 이후의 커뮤니케이션에서 암호화 및 복호화에 사용
- 사용하는 암호화 알고리즘은 클라이언트와 서버가 지원하는 알고리즘 중에서 협상을 통해 결정
- 인증
- 서버는 자신의 비밀 키를 사용해 암호화된 세션 키를 복호화
- 이후 클라이언트는 사용자명과 비밀번호 또는 공개 키를 사용해 인증 절차를 거침
- 비밀번호 기반 인증
- 사용자 이름과 비밀번호를 사용
- 공개 키 기반 인증
- 사용자의 비밀 키와 서버에 저장된 해당 공개 키를 사용
- 암호화된 커뮤니케이션
- 인증이 성공하면, 클라이언트와 서버는 세션 키를 사용해 모든 데이터를 암호화하고 복호화
- 암호화된 메시지가 중간에서 조작되지 않았는지 확인
- SSH는 HMAC (Hash-based Message Authentication Code)을 사용
- HMAC은 공유 비밀 키와 해시 함수를 사용하여 메시지 인증 코드를 생성하고, 이를 메시지에 첨부
- 수신자는 동일한 비밀 키와 해시 함수를 사용하여 코드를 생성하고, 이를 수신한 코드와 비교하여 메시지의 무결성을 검증
'42 > Born2BeRoot' 카테고리의 다른 글
SUDO [Born2BeRoot] (2) | 2023.12.12 |
---|---|
UFW [Born2BeRoot] (6) | 2023.12.11 |
aptitude, apt [Born2BeRoot] (0) | 2023.12.11 |
SELinux, AppArmor [Born2BeRoot] (2) | 2023.12.11 |
VM [ Born2BeRoot ] (0) | 2023.12.09 |