Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Rust 프로젝트의 하드웨어 보안 키

개요

Rust 인프라의 하드웨어 보안 키

하드웨어 보안 키는 민감한 시스템과 인프라를 피싱이 불가능한 방식으로 보호하여 보안을 강화합니다. Rust 인프라 팀은 Yubico Secure it Forward 프로그램과 협력하여 하드웨어 보안 키를 공식적으로 지원합니다.

현재 다음 팀의 구성원이 이 지원 대상입니다.

  • infra
  • crates.io
  • docs.rs
  • release
  • triagebot
  • bors

Rust 재단은 핵심 인프라 시스템에 접근해야 하는 Rust 프로젝트 구성원에게 YubiKey를 제공합니다. 이 지원 대상에 해당하고 권장 YubiKey를 무료로 받고 싶다면 Zulip의 T-infra에 연락하십시오.

Rust 인프라의 YubiKey 지원

지원 모델

Rust 인프라 팀은 Yubico Series 5 USB/NFC 모델 제품을 검증했으며, 프로젝트 구성원에게 발생할 수 있는 모든 문제에 대해 Yubico Series 5 키를 공식적으로 지원합니다.

지원 펌웨어 버전

기존 보안 권고에 따라 펌웨어 버전 v5.7.4 이상인 YubiKey만 허용됩니다. ykman CLI나 Yubico Authenticator를 사용하여 YubiKey의 현재 펌웨어 버전을 확인할 수 있습니다.

권장 첫 단계

Yubico가 제공하는 공식 오픈 소스 도구 중 YubiKey 설정에 도움이 되는 도구가 최소 두 가지 있습니다.

  • Yubico Authenticator (소스: 데스크톱 및 Android | iOS):
    • 데스크톱 앱으로 대부분의 작업을 충분히 처리할 수 있습니다.
    • 모바일 앱은 Google Play나 Apple App Store에서 바로 내려받을 수 있습니다.
  • Yubico Manager CLI (소스: yubikey-manager): 고급 사용 사례에 적합합니다.

좋은 첫 단계로서, Rust 인프라 팀은 Yubico Authenticator 데스크톱 앱을 사용하여 다음 항목의 기본값을 변경할 것을 권장합니다.

CLI를 선호하는 분이라면 ykman Python 유틸리티를 시스템에 전역으로 설치하거나 Python 설치를 관리하지 않고 실행하는 대안으로 uvx를 사용할 수 있습니다. 하위 명령에 대해 자세히 알아보려면 ykman 온라인 문서를 참고하십시오.

uvx --from yubikey-manager ykman --help

또는 다른 방법으로

alias ykman="uvx --from yubikey-manager ykman"
ykman --help

webauthn을 이용한 다중 인증

Yubico는 모든 제품에 FIDO2 표준을 구현하고 있습니다. 따라서 webauthn 기반의 2차 인증 요소를 지원하는 웹 시스템이라면 YubiKey를 다중 인증 장치로 설정할 때 추가 설정 없이 그대로 동작해야 합니다.

예를 들어 Github에서 YubiKey를 MFA 장치로 설정하려면 이 공식 절차를 참고하십시오. 진행 중 어느 시점에 다음과 같은 대화 상자가 표시됩니다.

설정 흐름은 시스템마다 다릅니다. 또한 설치된 웹 브라우저 확장 프로그램에 따라서도 달라질 수 있습니다(예: 1password는 이러한 설정 과정에서 자신을 선택지로 제시합니다). 그러나 일반적으로는 웹 브라우저의 보안 키 대화 상자를 주의 깊게 확인하십시오.

이 단계에서는 하드웨어 키를 통해 사용자가 실제로 있는지 확인합니다. YubiKey를 터치하여 인증을 확인하십시오.

저희 MFA 정책은 호환되는 모든 핵심 Rust 인프라 시스템에서 이 옵션을 사용하도록 의무화하고 있습니다.

하드웨어 기반 다중 인증

다중 인증을 요구하지만 안전한 MFA 방식으로 TOTP 코드만 지원하는 시스템에서도 YubiKey를 Google Authenticator 같은 기존 솔루션의 대안으로 사용할 수 있습니다. 이 경우 Yubico Authenticator 앱을 사용하여 하드웨어 기반 TOTP 코드 생성을 설정할 수 있습니다.

이 옵션을 사용하면 서드파티 클라우드 시스템에 의존하지 않고도 휴대폰과 데스크톱 시스템 양쪽에서 TOTP 코드를 사용할 수 있습니다. 다만 TOTP 코드 생성이 물리적 장치에 묶인다는 단점도 있습니다. 오프라인 전용 TOTP 인증 앱을 사용할 때와 마찬가지로 Yubikey를 잃어버리면 TOTP 코드에도 접근할 수 없게 됩니다. 따라서 복구 코드 백업에 각별히 주의해야 합니다.

Rust 프로젝트 구성원에게 하드웨어 기반 TOTP 코드 설정은 선택 사항입니다.

하드웨어 기반 SSH 키

SSH 인증 보안을 강화하고 싶다면 YubiKey가 제공하는 여러 하드웨어 기반 SSH 키 쌍 옵션을 사용할 수 있습니다. SSH 키를 하드웨어 기반으로 두면 SSH 개인 키를 여러 기기에서 손쉽게 옮겨 가며 사용할 수 있습니다.

예를 들어 Github 계정에서 Yubikey 기반 SSH 키를 사용하려면 OpenSSH에 내장된 FIDO2 인증 지원으로 시작하는 것이 가장 쉬울 수 있습니다.

설정 방법은 운영 체제에 따라 다릅니다. 또한 커밋 서명 같은 작업이 계속 예상대로 동작하도록 Git 설정을 조정해야 할 수도 있다는 점에 유의하십시오. 특히 Git 작업을 할 때마다 패스키 PIN을 묻도록 설정하면 오히려 역효과가 날 수 있습니다. 따라서 그렇게 설정하지 않을 것을 권장합니다.

예를 들어 다음 명령은 FIDO2를 통해 새 레지던트 SSH 키를 정의합니다. 이 키는 매번 패스키를 묻지 않으며, Git 작업을 할 때 하드웨어 키를 터치할 필요도 없습니다.

ssh-keygen -t ed25519-sk \
  -O resident \
  -O application=ssh:git \
  -C "me@email.com"

하드웨어 기반 SSH 키는 현재 선택 사항이지만, 앞으로 일부 인프라 관리 작업에서는 필수가 될 수 있습니다. YubiKey에 어떤 레지던트 SSH 키가 있는지는 CLI나 Yubico Authenticator 앱으로 확인할 수 있습니다.

$ ykman fido credentials list
Enter your PIN:
Credential ID  RP ID    Username  Display name
86707903...    ssh:git  openssh   openssh

PIV 기반 키와 증명

YubiKey는 스마트 카드용 개인 신원 확인(PIV) 표준과 호환됩니다. 따라서 이 표준을 기반으로 암호화 및 서명 작업에 YubiKey를 사용할 수 있습니다.

규칙 및 요구 사항

PIV를 사용하기 전에 기본 PIN과 PUK를 반드시 변경해야 합니다. ykman 또는 Yubico Authenticator 앱을 사용하십시오. ykman을 사용하는 경우 다음을 실행하십시오.

ykman piv access change-pin
ykman piv access change-puk

Yubico Authenticator로도 PIV 키를 생성하고 관리할 수 있지만, 일부 보안 옵션은 ykman에서만 사용할 수 있습니다.

PIV 기반 키 생성

PIV 기반 키를 생성할 때는 다음 보안 요구 사항을 따르십시오.

  • ECCP256 암호화 알고리즘을 우선적으로 사용하십시오.
  • PIV 슬롯에 접근할 때 최소 once 수준의 PIN 확인을 요구하도록 설정하십시오.
  • YubiKey를 사람이 직접 조작(터치)하도록 요구하십시오.

권장 보안 기본값으로 키를 생성하여 9a 슬롯(인증 용도)에 저장하려면 다음을 실행하십시오.

ykman piv keys generate 9a - --algorithm ECCP256 --pin-policy once --touch-policy always

마찬가지로, 키를 생성하여 9c 슬롯(서명 용도)에 저장하려면 다음을 실행하십시오.

ykman piv keys generate 9c - --algorithm ECCP256 --pin-policy once --touch-policy always

PIV 슬롯에서 공개 키와 인증서 내보내기

키를 생성한 후에는 PIV 슬롯과 관련된 공개 키를 내보내어 외부에 보관할 수 있습니다.

ykman piv keys export 9a pubkey-9a.pem
ykman piv keys export 9c pubkey-9c.pem

이 공개 키는 자체 서명 X.509 인증서를 생성할 때에도 필요합니다. 예를 들어, 9a PIV 슬롯과 연결된 인증서를 생성하려면 다음을 실행하십시오.

ykman piv certificates generate 9a pubkey-9a.pem --subject "CN=<your name>" --valid-days 2000

다음 사항에 유의하십시오.

  • subject는 RFC-4514 문자열이어야 합니다
  • valid-days는 인증서 유효 기간을 설정합니다(기본값은 365일입니다)

증명 내보내기 및 팀 DB를 통한 공유

자체 서명 인증서 외에도 PIV 기반 키 쌍에 대한 증명 인증서를 생성할 수도 있습니다.

ykman piv keys attest 9a attestation-9a.pem
ykman piv keys attest 9c attestation-9c.pem

이 증명을 검증할 수 있도록 하려면, YubiKey에 미리 탑재되어 있으며 Yubico의 루트 증명 CA로 서명된 Yubico의 중간 증명 인증서도 내보내야 합니다.

ykman piv certificates export f9 f9-intermediate.pem

이 파일들을 팀 DB에 추가하려면 다음 단계를 따르십시오.

  • 팀 저장소의 team/hardware-keys 아래에 YubiKey의 일련번호를 이름으로 하는 디렉터리를 만드십시오.
  • 설정한 PIV 슬롯에 대한 attestation-9*.pem 파일을 추가하십시오.
  • YubiKey의 f9-intermediate.pem 증명 파일을 추가하십시오.
  • team/people/<your-user>.toml에서 이 파일들을 링크하십시오.

자세한 내용은 TOML 스키마를 참고하십시오.

자주 묻는 질문

어떤 서비스에서 YubiKey로 2FA를 사용해야 합니까?

MFA 정책을 확인하십시오.

선호하는 클라우드 CLI 인증을 YubiKey로 어떻게 처리합니까?

Gcloud CLI의 경우, 웹 기반 인증 흐름이 선택한 2FA 방식을 자동으로 요청하며, 그 이후에는 추가 단계가 필요하지 않습니다. YubiKey를 Google 계정의 MFA 방식 중 선호하는 방식으로 설정하기만 하면 됩니다.

AWS CLI의 경우, CLI 설정을 구성할 때 IAM 사용자 세션이 아닌 AWS SSO 사용자 세션을 사용해야 합니다. 이 흐름은 선택한 웹 브라우저로 로그인할 때 2FA 방식을 요청합니다.

Rust 인프라는 AWS Identity Center 구성을 통해 프로젝트 구성원에게 SSO 접근을 제공합니다. 다만 YubiKey를 AWS 사용자 계정에서 선택한 MFA 방식으로 설정하는 작업은 여전히 필요합니다.