2025. 2. 4. 13:25ㆍNetwork 공부
네트워크 상에서 안전하게 통신하기 위해 설계된 프로토콜로, 원격 접속 및 파일 전송 등의 작업을 수행할 때 데이터의 기밀성, 무결성, 인증을 보장한다. SSH가 이러한 보안을 제공하기 위해 내부적으로 사용하는 주요 기술은 비대칭(Asymmetric) 암호화, 대칭(Symmetric) 암호화, 그리고 해시(Hash) 함수이다.
Telnet is an older protocol that provides unencrypted communication over a network
Telnet 방식의 보안적 취약점을 보안하기 위해 등장한 프로토콜
SSH 는 크게 Handshake 와 Data transmission 단계로 나뉜다
1) Handshake
- Protocol version exchnage
- Key exchange : 비대칭 키 사용
- 서버 인증 : Public and Private key
- Session Key 생성 : Key exchnage 과정을 통해 생성된 Shared Secret(비밀값)을 바탕으로 대칭 키(세션 키) 생성
- 암호화 알고리즘 협상 (AES, HMAC 등)
을 하는 과정을 HandShake 단계라고 한다.
2) 데이터 전송 단계
- 대칭 암호화
실제 데이터 전송은 생성된 세션 키를 이용한 대칭 암호화를 통해 이루어집니다. 대칭 암호화는 계산 비용이 낮아 빠른 암호화/복호화가 가능하다
- 무결성 검증
각 패킷에는 해시값 또는 MAC(Message Authentication Code)이 포함되어 전송 중 데이터 변조 여부를 확인할 수 있다.
위의 과정을 하는 단계
보안 키 교환 과정
주로 Diffie - Hellman (DH) 키 교환 알고리즘을 기반으로 이루어진다.
Diffie - Hellman (DH)
- 공개 매개 변수 설정
양측(클라이언트와 서버)은 미리 정의된 큰 소수 p와 생성자 g를 사용합니다. 이 값들은 보통 프로토콜 사양에 포함되어 있거나 협상을 통해 결정된다.
- 각자 비밀 값 선택 및 공개 값 계산
클라이언트: 임의의 비밀 정수 a를 선택한 후, 공개 값 A = g^a mod p를 계산하여 서버에 전송합니다.
서버: 임의의 비밀 정수 b를 선택한 후, 공개 값 B = g^b mod p를 계산하여 클라이언트에 전송합니다.
- 공유 비밀 값(Shared Secret) 계산
클라이언트: 서버로부터 받은 B 값을 사용하여 s = B^a mod p를 계산합니다.
서버: 클라이언트로부터 받은 A 값을 사용하여 s = A^b mod p를 계산합니다.
두 계산 모두 동일한 결과를 도출하게 되며, 이 결과가 공유 비밀(Shared Secret) 이 됩니다.
- 세션 키 생성
Shared Secret 값과 추가적인 과정에서 교환된 데이터(ex: 초기 랜덤 값 등)을 결합하여 해시 함수를 적용하고 이를 통해 세션 키가 생성된다. 이 세션 키는 이후 대칭 암호화에 사용된다.
Hash Function (해시 함수)
https://idery-123.tistory.com/34
Hash Function
데이터 무결성을보장하고 인증을 강화하기 위해 사용되는 암호화 함수 임의의 길이를 가진 입력 데이터를 고정된 길이의 값(해시 값, 해시 다이제스트)으로 변환하는 함수. 이 과정은 단방향(on
idery-123.tistory.com
비대칭 (Asymmetric) 암호화 방식
Public Key & Private Key 를 이용하는 암호화 방식
SSH 에서는
- 서버 인증
서버는 자신의 공개키를 클라이언트에게 제공하여, 클라이언트가 서버의 신원을 확인할 수 있도록 한다. 클라이언트는 이전에 저장해둔 서버의 공개키와 비교하거나, 신뢰할 수 있는 인증 체계를 통해 검증다.
- 키 교환 초기 단계
Diffie-Hellman 키 교환 알고리즘과 함께 비대칭 암호화를 사용하여 중간자 공격을 방지한다.
예를 들어, 서버는 자신의 비밀 개인키로 서명한 데이터를 클라이언트에 전송하고, 클라이언트는 서버의 공개키로 이를 검증한다.
- 인증 방식
공개키 기반 인증의 경우, 클라이언트는 자신의 개인키를 사용하여 메시지에 서명하고, 서버는 클라이언트가 미리 등록한 공개키를 이용해 서명의 유효성을 확인다
으로 주로 사용이 되며, 비대칭 암호화는 암호화, 복호화 계산에서 시간과 비용이 많이 사용된다는 단점이 있기 때문에, 실제 데이터 통신에서는 주로 대칭 암호화 방식이 사용된다.
대칭(Symmetric) 암호화 방식
암호화와 복호화에서 동일한 키를 사용하는 방법이다. SSHP 에서 실제 데이터를 전송 할때에는 빠른 속도와 효율적인 데이터 처리를 위해서 대칭 암호화 방식을 사용한다.
SSH 에서 사용되는 대칭 암호화 알고리즘
- AES (Advanced Encryption Standard )
보안성과 성능이 뛰어나 가장 많이 사용되는 대칭 암호 알고리즘이다.
- ChaCha20
모바일 기기나 성능이 제한된 환경에서 빠르고 안전한 암호화를 제공하기 위해서 사용됨
- 세션 키
데이터 전송 시 암호화 알고리즘에 사용되며, 각 SSH 세션마다 새롭게 생성되어 재사용되지 않는다.
전체 과정 요약
1. 프로토콜 버전 교환
2. 키 교환 및 서버 인증
Diffie-Hellman 알고리즘을 통해 안전하게 공유 비밀(세션 키의 기초)을 생성합니다.
서버는 자신의 비대칭 키(공개키)로 서명하여 신원을 증명합니다.
3. 세션 키 생성
공유 비밀과 추가 데이터를 결합하여 대칭 암호화에 사용할 세션 키를 만듭니다.
4. 암호화 알고리즘 협상
클라이언트와 서버가 대칭 암호화, MAC, 압축 등 사용할 알고리즘을 협상합니다.
5. 데이터 전송
협상된 대칭 암호화 방식을 통해 안전하게 데이터가 암호화되어 전송됩니다.
각 패킷에는 데이터 무결성을 보장하기 위한 MAC가 포함되어 변조 여부를 확인할 수 있습니다.
<출처>
'Network 공부' 카테고리의 다른 글
ACL (Access Control List) (0) | 2025.02.05 |
---|---|
Static Request vs Dynamic Request (1) | 2025.02.04 |
Hash Function (0) | 2025.02.04 |
Proxy Server (0) | 2025.02.04 |
WordPress / Web Server / PHP (0) | 2025.01.31 |