SSH 키 패스프레이즈는 파일을 지킬 뿐 경로를 지키지 않는다
패스프레이즈는 개인 키 파일을 암호화합니다. 그것은 신원을 폐기하지도, 경로를 안전하게 만들지도 않습니다. 별도 보관, 에이전트 수명, 무인 사용이 핵심입니다.
오래된 노트북의 백업 드라이브에는 여전히 개인 SSH 키가 들어 있고, 누군가 VPN이 그것을 보호하는지 묻는다. 보호하지 않으며, 보호한 적도 없다. VPN은 두 네트워크 사이의 경로를 보호하고, 패스프레이즈는 파일을 보호하며, 에이전트는 실행 중인 세션을 보호한다. 서로 다른 세 가지 메커니즘, 서로 다른 세 가지 실패 방식이며, 훔친 사본은 처음 두 가지에만 관심이 있다.
패스프레이즈는 파일에 속한다
SSH 키 패스프레이즈는 저장 상태의 개인 키 자료를 암호화한다. 서버로 보내는 계정 비밀번호도 아니고, VPN에 접속할 때 쓰는 자격 증명도 아니다. 이 둘을 혼동하면 노출 자체를 다루지 않는 변경으로 이어진다.
OpenSSH의 ssh-keygen 설명서는 패스프레이즈 처리를 다루며, 이미 있는 키에 새 패스프레이즈를 설정하는 -p 스위치도 포함한다.
기존 키라면 명령 형태는 단순하며, 파일을 다시 쓴다:
ssh-keygen -p -f ~/.ssh/id_ed25519
이것은 검사가 아니라 쓰기이므로 키 소유자가 승인한 유지보수 및 복구 절차를 따르라. 개인 파일을 공개하지 말고 공유 명령줄에 실제 패스프레이즈를 두지 말라. 패스프레이즈를 바꿔도 이전에 만들어진 사본은 다시 암호화되지 않는다. 이전 사본의 위치를 티켓에 남겨 소유자가 폐기 여부를 결정하게 하라.
사본은 노트북과 터널보다 오래 살아남는다
키 파일이 복사된 뒤에는 노트북의 현재 VPN 연결이 그 파일에 대해 아무것도 말해 주지 않는다. 중요한 것은 파일 자체가 얼마나 잘 보호되는가이며, 어떤 서버가 아직 해당 공개 키를 신뢰하는가이다.
현재 파일의 패스프레이즈를 바꿔도 사본은 건드리지 않으며, 서버의 authorized_keys에서 같은 공개 키가 제거되지도 않는다. 폐기와 재암호화는 별개의 작업이다.
그러므로 유출된 개인 키는 네트워크 사건이 아니라 신원 사건으로 다루라. 승인된 키는 그것을 소유한 서버와 등록 절차를 통해 제거하거나 교체하라. VPN을 멈추는 것은 한 시점의 한 경로를 제한할 뿐이며, 폐기가 아니다.
잠금 해제는 비밀을 에이전트로 옮긴다
에이전트는 이후 인증을 위해 복호화된 신원을 보관하므로, 사용자는 접속할 때마다 패스프레이즈를 다시 입력하지 않는다. 이는 나름의 보안 경계를 가진 편의 기능이다.
ssh-agent는 -t 옵션으로 신원이 로드된 채 유지되는 시간을 제한할 수 있고, 신원별 설정이 그 한도를 넘어설 수 있다. VPN 연결이 끊기면 로드된 모든 키를 잊는다고 가정하지 말고, 실제로 실행하는 에이전트에 맞는 정책을 고르라.
키가 잠금 해제된 뒤 침해된 프로세스는 암호화된 파일이 도난당한 것과 다른 문제다. 에이전트를 다른 호스트로 전달하면 키 파일을 복사하지 않고 인증 능력을 위임하므로, 승인된 필요가 있을 때만 활성화하라.
변경 전후에 에이전트가 현재 무엇을 보관하는지 나열하라:
ssh-add -l
무인 작업에는 자체 계획이 필요하다
예약된 작업은 프롬프트에 답할 수 없다. 승인된 머신 자격 증명 방식이 필요하며, 잠금 해제 비밀을 키와 같은 디렉터리에 두고 같은 계정이 읽을 수 있게 해도 두 번째 경계가 생기지 않는다.
지원되는 비밀 전달이나 하드웨어 기반 운영을 서비스 소유자와 함께 검토하고, 갱신과 실패, 복구까지 포함하라. 키보드 앞에 사람이 있기를 바라는 것은 아무도 지켜보지 않는 호스트와 비교해 실패의 모습을 바꾼다.
서버의 호스트 신원 확인과 계정 제한도 유지하라. VPN 경로는 사설 경로를 줄 뿐, 도달하는 모든 SSH 리스너가 의도한 호스트임을 증명하지는 않는다. 리스너와 호스트 키 지문을 키 자체와 같은 목록에 기록하라.
경계를 각각 따로 검증하라
각 경계를 그 경계의 질문으로 시험하라. 패스프레이즈 없이 파일이 열리는가? 연결이 끊긴 뒤에도 에이전트가 신원을 보관하는가? 서버가 아직 공개 키를 받아들이는가?
두 명령이 첫 번째와 세 번째 질문에 답한다:
ssh-keygen -y -f ~/.ssh/id_ed25519
ssh -v [email protected]
파일 보호, 허용된 키 사용, 서버 측 제거를 세 개의 별도 항목으로 기록하라. 터널과 패스프레이즈와 에이전트는 각각 관계의 다른 부분을 지키며, 그중 네트워크에 관한 것은 하나뿐이다.