blog.stackframe.dev

FIDO 키를 사용하는 ssh 인증키 생성하기

Solo key를 사고 내가 접근하는 거의 모든 시스템에 이 키를 통해 인증을 거치지 않으면 사용하지 못하도록 구성하였다. 노트북 부팅부터 시작하여 구글 로그인까지 거의 모든 인증과정에 키가 필요하게 했다.

Solo USB-A FIDO2 인증키

이런 노력 덕분에 누군가가 내 비밀번호를 사용하여 구글 로그인을 시도했던걸 막은 적도 있었다.

SSH에는 비대칭키 기반으로 사용자 인증을 할 수 있는 기능이 있다. 비밀키는 사용자 기기에 넣고 공개키는 외부 시스템에 미리 올려둬서 이를 통해 인증을 진행한다. 이 기능을 사용하면 비밀번호가 네트워크 상으로 전송되지 않고 비밀번호를 입력하지 않아도 되니 매우 편리하다. Github 같은 곳에서도 레포지토리에 접근할 때 비밀번호 대신 SSH 키를 사용하도록 적극 권장하고 있다.

다만 편리성이 높아지는 대신 위험성도 높아진다. 대표적으로 키가 들어있는 노트북을 훔치면 바로 서버에 접근이 가능할 수 있다. SSH 키를 생성할 때 비밀번호를 추가할 지 물어보긴 하지만 대부분 귀찮아서 비워놓을 것이다. SSH 키를 만들면서 비밀번호를 넣어버리면 사용자 입장에서는 그냥 비밀번호 치고 연결하는 것과 다를게 없기도 하고. 물리적 이외라도 바이러스나 실수로 충분히 비밀키가 누출될 수 있기 때문에 마치 보안카드를 사진찍어서 폰에 가지고 다니는 만큼 위험할 수 있다.

그래서 나는 FIDO 인증키를 사용하는 SSH 키를 생성하려 한다. FIDO는 하드웨어에서 키를 생성하고 공개키만 외부로 제공하기 때문에 물리적인 키가 없다면 인증이 불가능하고 복제될 위험도 현저히 낮다. FIDO 키에서 생성된 공개키는 외부 서버에 보내고 이 공개키와 연관된 비밀키를 가리키는 ID는 사용자 기기에 저장된다. 그러므로 노트북이나 인증키 둘 중 하나라도 없다면 접근이 불가능하기에 매우 안전해진다. 사용법도 단지 인증키를 연결하고 터치 한 번만 하면 되니 간편하다.

SSH 키를 생성하기에 앞서 몇 가지 준비해야 하는 부분이 있다. FIDO 인증키는 당연히 필요하고 OpenSSH 8.1 버전 이상과 libfido2가 깔려 있어야 한다.

먼저 FIDO 인증키를 연결하고 아래 명령을 실행한다:

$ ssh-keygen -t ed25519-sk

이 명령을 실행하면 FIDO 인증키가 사용자 입력을 기다리는 상태가 될 것이다. 장치에 따라서 버튼을 누르거나 지문인식을 한다면 다음 단계인 비밀번호 설정으로 넘어간다. 비밀번호를 설정할 지 말 지는 원하는대로 하고 끝내면 ~/.ssh/id_ed25519_sk, ~/.ssh/id_ed25519_sk.pub 파일이 생성될 것이다.

이제 id_ed25519_sk.pub 파일 내용을 외부 서버의 ~/.ssh/authorized_keys에 넣고 ssh 연결을 해 보면 FIDO 인증키를 요구하는 것을 볼 수 있다.

사용자 동작을 요구

댓글