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를 무료로 받고 싶다면 T-infra in Zulip에 문의하십시오.

Rust 인프라에서의 YubiKey 지원

지원되는 모델

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

지원되는 펌웨어 버전

기존 security advisories에 따르면 버전 v5.7.4 이상의 펌웨어를 가진 YubiKey만 허용됩니다. ykman CLI 또는 Yubico Authenticator를 사용하여 YubiKey의 check the current firmware version을 확인할 수 있습니다.

권장하는 첫 단계

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

  • Yubico Authenticator (소스: Desktop and Android | iOS):
    • 데스크톱 앱은 대부분의 작업을 상당히 잘 처리할 수 있습니다.
    • 모바일 앱은 Google Play 또는 Apple App Store에서 직접 다운로드할 수 있습니다.
  • Yubico Manager CLI (소스: yubikey-manager): 고급 사용 사례를 위한 것입니다.

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

CLI를 선호하는 분들에게는, 시스템에 전역으로 설치하거나 Python 설치를 관리하지 않고도 ykman Python 유틸리티를 실행할 수 있는 대안으로 uvx를 사용할 수 있습니다. 하위 명령에 대해 더 알아보려면 ykman online documentation을 참조하십시오.

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 policy는 호환되는 모든 핵심 Rust 인프라 시스템에 대해 이 옵션을 사용하도록 의무화하고 있습니다.

하드웨어 기반 다중 요소 인증

다중 요소 인증이 필요하지만 안전한 MFA 방법으로 TOTP 코드만 지원하는 시스템의 경우, YubiKey는 Google Authenticator와 같은 기존 솔루션의 대안으로도 작동할 수 있습니다. 이 경우, Yubico Authenticator 앱을 사용해 [하드웨어 기반 TOTP 코드 생성]을 설정할 수 있습니다.

이 옵션은 서드파티 클라우드 시스템에 의존하지 않고도 모바일 폰과 데스크톱 시스템 모두에서 작동하는 TOTP 코드를 갖는 방법을 제공하지만, TOTP 코드 생성을 물리적 장치와 결합시키는 단점도 있습니다. 오프라인 전용 TOTP 인증 앱을 사용하는 것과 마찬가지로, YubiKey를 분실하면 TOTP 코드에 대한 접근 권한도 잃게 되므로 복구 코드 백업에 관해 추가적인 주의가 필요합니다.

하드웨어 기반 TOTP 코드 설정은 Rust 프로젝트 구성원에게 선택 사항임을 유의하십시오.

하드웨어 기반 SSH 키

SSH 인증에 추가적인 보안을 원하는 분들을 위해, YubiKey는 [하드웨어 기반 SSH 키 쌍을 위한 다양한 옵션]을 제공합니다. SSH 키를 하드웨어 기반으로 하면 개인 SSH 키를 서로 다른 머신 간에 손쉽게 이동할 수 있습니다.

예를 들어, Github 계정에서 Yubikey 기반 SSH 키를 사용하고 싶다면, [FIDO2 인증에 대한 OpenSSH 내장 지원]이 시작하기 가장 쉬운 방법일 수 있습니다.

설정은 운영체제에 따라 다르지만, 커밋 서명과 같은 작업이 예상대로 계속 작동하도록 Git 설정을 조정해야 할 수도 있음을 유념하십시오. 특히, 모든 Git 작업마다 패스키 PIN을 요청하지 않도록 하는 것을 권장합니다. 이는 역효과를 낳을 수 있기 때문입니다.

예를 들어, 이 명령은 FIDO2를 통해 새로운 상주(resident) SSH 키를 정의하며, 매번 패스키를 요청하지 않고 Git 작업에서 하드웨어 키를 터치할 필요도 없게 만듭니다.

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

하드웨어 기반 SSH 키는 현재로서는 선택 사항이지만, 향후 특정 관리 인프라 작업에서 필수가 될 수도 있습니다. CLI나 Yubico Authenticator 앱을 통해 YubiKey에서 사용 가능한 상주 SSH 키를 확인할 수 있습니다.

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

PIV 기반 키와 증명(attestation)

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 슬롯에 접근할 때 PIN 확인을 최소 once(1회) 요구하도록 설정하십시오.
  • 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

참고 사항은 다음과 같습니다.

  • subjectRFC-4514 string이어야 합니다
  • valid-days는 인증서 수명을 설정합니다(기본값은 365일입니다)

Attestation 내보내기 및 팀 DB를 통한 공유

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

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

이러한 attestation을 검증할 수 있도록 하려면, YubiKey에 사전 로드되어 있으며 Yubico의 루트 attestation CA로 서명된 Yubico의 중간 attestation 인증서도 내보내야 합니다.

ykman piv certificates export f9 f9-intermediate.pem

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

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

자세한 내용은 TOML schema를 참고하십시오.

FAQ

YubiKey로 2FA를 사용해야 하는 서비스는 무엇입니까?

저희 MFA policy를 확인해 주십시오.

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

Gcloud CLI의 경우, web-based authentication flow가 자동으로 선택한 2FA 방법을 요청하며, 그 이후에는 추가 단계가 필요하지 않습니다. Google 계정에서 선호하는 MFA method in your Google account로 설정하기만 하면 됩니다.

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

Rust 인프라는 AWS Identity Center configuration을 통해 프로젝트 구성원에게 SSO 접근을 제공합니다. 다만, MFA method of choice in your AWS user account로 YubiKey를 구성해야 하는 것은 여전히 필요합니다.