SSH v2의 레이어드 아키텍처
SSH v2는 RFC 4251에서 정의된 3개의 독립적 계층으로 구성됩니다. 전송 계층(Transport Layer)은 서버 인증, 기밀성, 무결성을 제공하며 TCP/IP 위에서 동작합니다. 패킷 길이는 최소 16바이트이며, 최대 페이로드는 32,768바이트입니다. 인증 계층(User Authentication Layer)은 클라이언트 사용자 인증을 담당하며, 공개키·비밀번호·호스트 기반 인증 등 여러 방식을 지원합니다. 연결 계층(Connection Protocol)은 암호화된 터널을 여러 논리 채널로 다중화하여 셸, 포트 포워딩, X11 전송 등을 구현합니다.
바이너리 패킷 프로토콜 및 암호화
RFC 4253에 따르면 각 패킷은 packet_length·padding_length·payload·random padding·MAC으로 구성됩니다. 페이로드가 압축되면 packet_length와 MAC은 압축된 페이로드를 기반으로 계산됩니다. 최소 4바이트 이상의 랜덤 패딩이 필수이며, 전체 길이는 블록 크기(또는 8바이트)의 배수여야 합니다. 암호화는 packet_length부터 random padding까지 수행되고, MAC은 암호화되지 않은 상태로 전송됩니다. 필수 암호화 알고리즘은 3DES-CBC이며, AES, Blowfish 등이 권장됩니다.
키 교환와 재교환 메커니즘
클라이언트와 서버는 SSH_MSG_KEXINIT 메시지로 지원하는 알고리즘을 협상합니다. Diffie-Hellman 기반 키 교환(diffie-hellman-group1-sha1, diffie-hellman-group14-sha1)이 필수이며, 교환해시 H로부터 초기 벡터·암호화키·무결성키를 유도합니다. 세션 ID는 첫 키 교환의 해시값으로 고정되며, 재교환 후에도 변하지 않습니다. RFC 4251에서는 1GB 데이터 전송 또는 1시간 경과 후 키 재교환을 권장합니다.