
지원되는 맥에서는 별도 보안 키를 사지 않고도 Secure Enclave로 보호되는 SSH 키를 만들 수 있다. 생체 인증을 설정하면 키를 사용할 때 Touch ID를 요구할 수 있고, 개인 키를 내보낼 수 없도록 설정할 수도 있다.
YubiKey 같은 전용 하드웨어 보안 키는 공격 표면이 작고 고급 기능을 제공한다는 장점이 있다. 반면 Secure Enclave는 별도 기기 없이 하드웨어 보호를 이용하는 편리한 방법이며, 소프트웨어 키보다 보안성이 높다고 원문은 설명한다. 예시는 애플이 포함한 SSH 도구를 사용한다. 맥에서 man sc_auth와 man ssh-keychain을 확인해야 하며, 생체 인증 예시에는 Touch ID가 필요하다.
맥에서 키 만들기
먼저 셸 시작 파일(예: ~/.zshrc)에 다음 설정을 추가한다. 이 설정은 OpenSSH가 애플의 키체인 제공자를 사용하도록 한다.
export SSH_SK_PROVIDER=/usr/lib/ssh-keychain.dylib
현재 셸에서 해당 줄을 실행하거나 새 터미널을 연 뒤, Secure Enclave로 보호되고 키를 사용할 때 생체 인증을 요구하는 키 쌍을 만든다.
# Create a non-exportable P-256 identity with biometric authentication sc_auth create-ctk-identity -l ssh -k p-256-ne -t bio # Load identities into the macOS SSH agent /usr/bin/ssh-add -K
-l ssh는 키 식별자에 붙이는 이름이다. p-256-ne의 -ne는 키를 내보낼 수 없게 한다. SSH_SK_PROVIDER를 설정하면 ssh-add -K가 해당 제공자를 통해 식별자를 불러온다.
공개 키는 ssh-add -L로 확인한다. 일치하는 공개 키를 대상 호스트의 authorized_keys, GitHub 계정 또는 사용하는 서비스에 등록하면 된다.
# List public keys loaded in the agent /usr/bin/ssh-add -L # List CryptoTokenKit identities with SSH-style fingerprints sc_auth list-ctk-identities -t ssh
자동화와 키 내보내기
생체 인증이 필요 없는 키를 만들려면 -t bio 대신 -t none을 사용한다. Obsidian Git 저장소를 주기적으로 동기화하는 작업처럼 백그라운드 자동화에 쓸 수 있다.
# Create a non-exportable P-256 identity without biometric authentication sc_auth create-ctk-identity -l ssh-automation -k p-256-ne -t none /usr/bin/ssh-add -K
이 키도 내보낼 수는 없지만, 사용자 권한으로 실행되는 소프트웨어는 Touch ID 확인 없이 서명을 요청할 수 있다. 자동화용 키에는 필요한 접근 권한만 부여해야 한다.
p-256-ne 키의 개인 키 자료는 Secure Enclave 안에서 보호되며 평문으로 내보낼 수 없다. SSH 인증 과정에서 개인 키 연산도 Secure Enclave가 수행한다. 따라서 개인 키를 다른 맥으로 옮기거나 다른 곳에서 쓰도록 백업할 수 없다. 일반적인 SSH 사용, 특히 민감한 접근에는 내보낼 수 없는 키를 권장한다는 것이 원문의 설명이다.
같은 개인 키를 다른 기기로 가져가야 한다면 내보낼 수 있는 키를 만들 수 있다. p-256 키 유형은 개인 키 자체를 내보낼 수 있게 한다. 이 키도 Secure Enclave 기반 키로 암호화되지만, 개인 키를 내보낼 수 있다는 차이가 있다.
# Create an exportable P-256 identity with biometric authentication sc_auth create-ctk-identity -l ssh-exportable -k p-256 -t bio /usr/bin/ssh-add -K
PKCS#12 아카이브를 사용해 식별자를 옮길 수 있다.
# List identities and find the hash for the one labeled ssh-exportable sc_auth list-ctk-identities # Export it; replace IDENTITY_HASH with that identity's hash umask 077 sc_auth export-ctk-identity -h IDENTITY_HASH -f ssh-identity.p12 # On the destination Mac, import the archive with biometric protection sc_auth import-ctk-identities -f ssh-identity.p12 -t bio /usr/bin/ssh-add -K
대상 맥에도 SSH_SK_PROVIDER를 설정해야 한다. 내보낸 .p12 파일은 개인 키 자료처럼 취급해야 한다. 맥에서 생체 인증을 설정했더라도 내보낸 사본에는 그 보호가 적용되지 않는다. 아카이브 암호 옵션 -p는 man sc_auth에서 확인할 수 있다.
조직에서 키 출처 확인하기
조직 관리자는 하드웨어 기반 키 사용을 의무화하려 할 수 있다. 하지만 공개 키만으로는 개인 키가 어디서 생성됐고 어떻게 보호되는지 증명할 수 없다. 키 증명(Key attestation)은 키의 출처에 관한 서명된 증거를 제공한다. 신뢰할 수 있는 증명 체인과 기기 메타데이터가 있으면 검증자가 제조사와 모델을 확인하고 허용할 하드웨어 정책을 적용할 수 있다. 다만 보장 범위는 증명 방식에 따라 다르며, 증명이 모든 키 사용에 생체 인증이 필요하다는 사실을 보편적으로 증명하지는 않는다.
애플은 관리형 배포 환경에서 ACME로 프로비저닝한 하드웨어 기반 식별자 등을 위한 Managed Device Attestation을 제공한다. 이는 별도의 등록 절차다.
YubiKey는 FIDO2 증명을 지원해 어떤 하드웨어가 자격 증명을 만들었는지 확인해야 하는 조직에 적합할 수 있다. SSH에서 키를 승인하기 전에 증명을 검증하는 등록 절차가 필요하다. YubiKey를 사용하기만 해서는 그런 정책이 성립하지 않는다. Yubico의 FIDO2 키를 이용한 SSH 안내도 참고할 수 있다.
리눅스에서 TPM 사용하기
리눅스에서는 기기에 TPM 2.0 칩이 있다면 tpm2_ptool과 tpm2-pkcs11의 PKCS#11 제공자를 이용해 SSH 키를 TPM으로 보호할 수 있다. 이는 TPM2 Software 프로젝트의 기능이며, 프로젝트의 SSH 설정 안내에 절차가 나와 있다. TPM 2.0에 대한 설명은 위키백과에서 확인할 수 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요