더북(TheBook)

공개키를 이용한 사용자 인증

SSH 패스워드 인증 과정에서 사용자 이름과 패스워드가 함께 전송되는 사실은 ㅜ여전히 불안합니다. 앞서 SSH 통신 과정에서 악의적인 사용자가 자료를 가로채더라도 암호화되어 있기 때문에 쉽게 복원하기는 어렵다고 설명했습니다. 하지만, 악의적인 목적으로 수단과 방법을 가리지 않는다면 언젠가 자료를 복원해낼지도 모릅니다. 예를 들어 무작위로 생성한 패스워드를 대입해보는 무차별 공격은 어떨까요? SSH 서버의 패스워드가 예측하기 쉬운 단순한 패스워드라면 이런 공격에 뚫릴 가능성이 높습니다. 이처럼 사용자 이름과 패스워드가 노출될 가능성이 있는 이상 안전을장담하기는 어렵습니다.

SSH는 네트워크 전송 과정에 패스워드가 노출되는 위험을 막기 위해 패스워드 대신 공개키(public key)와 개인키(private key)라는 한 쌍의 키 조합으로 원격 접속 여부를 결정하는 사용자 인증 기능을 제공합니다.

공개키는 외부에 알려지는 키로 접속 대상 서버에 존재해야 합니다. 개인키는 접속하려는 클라이언트에 존재해야 하며 함부로 유출되어서는 안 됩니다. 개인키에 대한 보안 유지가 공개키 사용자 인증 시스템의 핵심입니다.

공개키와 개인키 조합은 유일하며 두 키가 결합했을 때 사용자 인증을 통과합니다. 만일 네트워크로 전송되는 자료를 가로챘다고 해도 자료를 복원하기 위한 공개키와 개인키가 모두 존재하지 않으면 무용지물입니다. 최악의 경우 개인키를 도난당하더라도 개인키를 활성화시키는 패스구문을 알지 못하면 사용자 인증을 통과할 수 없습니다.

Tip

패스구문(passphrase)은 로그인에 사용하는 패스워드(password)가 아니라 공개키, 개인키를 생성할 때 입력하는 또 다른 형태의 비밀번호입니다. 개인키를 활성화할 때 패스구문을 입력하도록 설정할 수 있습니다.

그림 6-6의 공개키와 개인키를 이용한 사용자 인증 과정을 한 단계씩 살펴봅시다.

그림 6-6 SSH 공개키 개인키 인증

1. 사용자가 ssh로 사용자 이름을 입력해서 sshd에 접속 요청합니다. 이 과정에서 ssh는 sshd에 공개키를 요구합니다.

2. sshd는 요구한 공개키를 찾고 검색 결과를 ssh에 알리며 개인키를 요구합니다.

3. 응답을 받은 ssh는 공개키에 해당하는 개인키를 찾습니다. 만일 개인키를 활성화하기 위해 패스구문(passphrase)이 필요하면 사용자에게 요구합니다.

4. 사용자가 패스구문을 입력하면 ssh는 sshd에 개인키를 찾았다고 응답합니다.

5. sshd가 ssh의 접속을 승인합니다.

인증 과정에서 패스워드나 개인키 자체를 전송하지는 않기 때문에 공개키 인증이 패스워드 인증보다 안전하다는 사실을 알 수 있습니다. 접속할 서버에 공개키를 전송해야 하고 설정 과정이 까다롭기는 하지만, 보안 유지가 필요한 시스템에서는 패스워드 인증 대신 공개키 인증을 사용하는 편이 바람직합니다. 접속 대상 시스템이 다수일 때도 공개키 인증이 유용합니다. 각 시스템마다 사용자 이름과 패스워드를 일일이 기억하는 대신 개인키 패스구문 하나만 기억해두면 안전하게 접속이 가능하기 때문입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.