| 단계 | 역할 | 진행 내용 | RFC | 사용 프로토콜/암호화 예시 |
| 1. TCP 연결 | 기본 통신 채널 수립 | - 클라이언트가 서버(기본 22/tcp)에 연결 - TCP 3-way handshake 완료 후 통신 가능 상태 |
RFC 4251 (Overview) | TCP/IP (전송 계층) |
| 2. 프로토콜 버전 교환 | SSH 버전 호환성 확인 | - 클라이언트/서버가 지원하는 SSH 버전 교환 - 일반적으로 SSH-2.0 사용 |
RFC 4253 (Transport Layer Protocol) | SSH-2.0-OpenSSH_8.7 |
| 3. 알고리즘 협상 (KEXINIT) | 암호화 매개변수 합의 | - 지원 가능한 암호 알고리즘 목록 교환 - 키 교환(KEX), 대칭 암호, MAC, 압축 방식 합의 |
RFC 4253 | - KEX: diffie-hellman-group14-sha256, ecdh-sha2-nistp256 - 암호: aes256-gcm@openssh.com, chacha20-poly1305@openssh.com - MAC: hmac-sha2-256, hmac-sha2-512 |
| 4. 키 교환 (Key Exchange) | 세션 키 생성 | - Diffie-Hellman, ECDH 등으로 shared secret 생성 - 서버 호스트키를 이용해 위변조 방지 |
RFC 4253 | - DH, ECDH, Curve25519-sha256 |
| 5. 서버 인증 | 서버 신뢰성 보장 | - 서버는 자신의 호스트키로 서명 - 클라이언트는 known_hosts와 비교하여 신뢰 여부 확인 |
RFC 4252 (Authentication) RFC 4253 |
- RSA, Ed25519, ECDSA 공개키 기반 호스트키 |
| 6. 세션 암호화 시작 | 암호화 채널 활성화 | - 협상된 세션 키로 데이터 암호화 개시 - 이후 모든 통신은 암호화 + 무결성 보장 |
RFC 4253 | - AES-256-CTR, AES-128-GCM, Chacha20-Poly1305 |
| 7. 사용자 인증 | 클라이언트 사용자 검증 | - 서버가 클라이언트 사용자 인증 요구 - 방법: 비밀번호, 공개키, Kerberos, GSSAPI |
RFC 4252 | - 공개키 인증: rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519 - 비밀번호 인증: 단순 문자열 비교(보안 취약) |
| 8. 세션 요청 및 채널 생성 | 실제 서비스 연결 | - "ssh-connection" 서비스 요청 - 채널 생성 (예: shell, exec, port-forward, SFTP) |
RFC 4254 (Connection Protocol) | - 터미널 요청 (pty) - exec 요청 (명령 실행) - subsystem 요청 (SFTP 등) |
| 9. 터미널/세션 활성화 | 최종 사용자 동작 | - 사용자가 입력한 명령이 암호화되어 서버에 전달 - 서버 응답 또한 암호화되어 클라이언트로 전송 |
RFC 4254 | - Bash/Zsh shell, SCP, SFTP |
보안 이야기