YubiKey

YubiKey 버튼을 누르는 모습.

Yubikey(한국어: 유비키)는 Yubico에서 개발하는 보안 키로, 여러 가지 기능을 지원한다. USB-A포트나 USB-C포트를 쓰며 일부 모델은 NFC를 지원한다.

1 지원되는 기능[편집]

  • PIV 호환 스마트카드와 OpenPGP: GPG 인증서나 S/MIME[1] 인증서 등을 보관하거나 생성하고, 암호화 작업을 수행할 수 있으며 SSH 인증에도 사용할 수 있다.
  • FIDO U2F / FIDO2: GitHub, 페이스북, 구글 등에서 지원하는 USB 메모리 보안 키를 이용한 2차 인증 방식을 사용할 수 있다. FIDO2는 YubiKey 5 시리즈에서만 지원한다.
  • OATH-HOTP, OATH-TOTP: 기존 OTP를 사용할 수 있다.
  • 비밀번호 자동입력: 자신이 지정한 비밀번호를 자동으로 입력시키는 기능이다.
  • HMAC-SHA1, Yubico OTP

2 모델 종류[편집]

2.1 YubiKey 5 시리즈[편집]

2018년 9월에 5세대가 발표되었다. FIDO2와 WebAuthn 지원이 추가됐으며 YubiKey NEO에서만 NFC를 지원하는 4세대와 다르게 5세대에서는 YubiKey 5에서 NFC를 지원하고 별도의 NFC모델이 존재하지 않는다.

기능/가격 비교
YubiKey 5 NFC YubiKey 5C Security Key by Yubico
YubiKey-5-NFC.png
일반사이즈
YubiKey-5C.png
일반사이즈
Security-Key-by-Yubico-nl.png
YubiKey-5-Nano.png
나노 사이즈
YubiKey-5C-Nano.png
나노 사이즈
정적 비밀번호 입력
Yubico OTP
OATH-HOTP
OATH-TOTP
스마트카드(PIV 호환)
OpenPGP
O X
FIDO U2F
FIDO2
SE(Secure Element)
O
포트
USB-A O X O
USB-C X O X
NFC O (나노사이즈는 미지원) X X (최근 출시된 NFC 버전에서는 지원)
암호화 알고리즘 지원
RSA 2048 O X
RSA 4096 (PGP) O X
ECC p256[2] O
ECC p384[3] O X
가격
$45 (나노 $50) $50 (나노 $60) $20

2.2 YubiKey 4/NEO 시리즈[편집]

YubiKey 4와 Yubikey 4C 사이에 기능적인 차이는 존재하지 않으며 오직 USB-A인가 USB-C인가의 여부만이 다르다. 일반형과 나노형도 기능적인 차이는 존재하지 않으며 공식 사이트에서 40$에 판매되고 있다. [4] 또한 YubiKey NEO는 NFC를 지원하여 모바일에서 쉽게 사용할 수 있다. 하지만 YubiKey NEO는 RSA 4096, ECC p384를 지원하지 않으며 공식 사이트에서 50$에 판매되고 있다. FIDO U2F Security Key는 말 그대로 FIDO U2F 지원하는 키이다. 지원하는 기능이 단 하나밖에 없는 대신 가격은 18$로 매우 싸다. 표로 요약하지면 다음과 같다.

기능/가격 비교
YubiKey 4 YubiKey 4C YubiKey NEO FIDO U2F Securtiy Key
YubiKey-4-1000-2016.png
일반 사이즈
YubiKey-4C-1000-April-2017.png
일반 사이즈
YubiKey-NEO-1000-2016.png Security-Key-by-Yubico-1000-2016.png
YubiKey-4-Nano-2016.png
나노 사이즈
YubiKey-4C-Nano-1000-September-2017.png
나노 사이즈
포트 USB-A USB-C USB-A + NFC USB-A
RSA2048 지원 O O O X
RSA4096 지원 O O X X
ECCp256 지원 모두 지원
ECCp384 지원 O O X X
가격 $40 (일반 사이즈)
$50 (나노 사이즈)
$50 (일반 사이즈)
$60 (나노 사이즈)
$50 $18

3 FIDO U2F 및 Yubikey를 지원하는 어플리케이션/사이트[편집]

이외에도 수많은 사이트와 프로그램들[5]이 Yubikey 혹은 FIDO U2F 인증을 지원한다.

3.1 파이어폭스에서의 FIDO U2F 사용[편집]

파이어폭스에서는 about:config에서 security.webauth.u2f를 true로 변경해야 FIDO U2F를 사용할 수 있었으나 버전67부터 기본적으로 활성화 되어있다.

3.2 FIDO U2F 및 Yubico OTP를 지원하는 위키[편집]

그런거 없다. 다만 일반적인 OTP(OATH-TOTP)를 지원한다면 그 OTP를 유비키에 추가해 사용할 수 있다.

3.3 미지원 사이트에서 YubiKey로 2차 인증하기[편집]

Yubico Authenticator를 이용해 OATH-TOTP 코드를 생성한 모습
Yubico Authenticator에서 OTP 코드 생성을 시도하자 YubiKey 터치를 요구하는 모습

이 경우 OATH-TOTP[6] 방식을 이용하여 인증하면 된다. 이곳에서 Yubico Authenticator 프로그램을 다운로드하고 OTP 설정을 추가하여 일반 OTP를 쓰듯 사용할 수 있다. 다만 YubiKey NEO 소유자의 경우 직접 활성화 해줘야 하는 경우가 있다.

OTP 설정을 추가할때 선택적으로 터치를 요구하도록 할 수 있다. 이 경우 OTP 코드 생성시 YubiKey에 있는 하프라이트 닮은 버튼을 눌러야 생성된다. OTP 코드를 생성할때 직접 New credential 메뉴를 선택해 키를 수동으로 입력할 수도 있지만 Scan QR 메뉴를 선택해 데스크톱에서 보이는 QR코드를 자동으로 인식하여 코드, OTP 유형 등이 다 채워진 New credential 창을 띄울 수도 있다. 여기서 OK만 눌러주면 OTP 설정이 추가된다.[7]

OTP 설정을 추가할때 New credential 메뉴를 수동으로 채우는 방법이 아닌 Scan QR 메뉴를 이용하는 방법을 추천한다.

4 GPG와 YubiKey 같이 이용하기[편집]

GPG에서도 YubiKey를 지원한다. 플러그앤플레이이므로 드라이버 따위 설치할 필요가 없다. YubiKey에 인증서를 옮기거나 YubiKey에서 인증서를 만드는 것 둘 중 하나를 택해 YubiKey에 인증서를 마련할 수 있다. 여기서 주의할 점은 YubiKey에서 인증서를 만들때 인증서를 만든 컴퓨터에만 공개키(Public Key)가 GPG 키 목록(GPG Keyring)에 추가된다. 다른 컴퓨터에서는 Yubikey에서 공개키를 추출할 수 없다. 따라서 이 점을 유의해야 하며 추후 서술할 card-edit에서 url을 지정하여 공개키를 쉽게 다운로드할 수 있도록 할 수 있다.

4.1 yubitouch[편집]

yubitouch 스크립트를 이용하면 PIN을 입력하고 유비키 버튼도 눌러야 서명/암호화를 할 수 있도록 설정할 수 있다.

4.2 card-edit[편집]

gpg2 --card-edit[8] 명령어를 이용해 카드를 수정할 수 있다. 인증서 생성/PIN 변경/카드 소유자 정보 수정 등이 이 명령어를 통해 이루어진다. Yubikey의 기본 Admin PIN은 12345678, 일반 PIN(이하 그냥 PIN으로 통칭)은 123456이다. 3번 틀리면 귀찮아지니 틀리지 말자.

4.2.1 card-edit 명령어 번역[편집]

card-edit 명령어들
명령어 ADMIN 명령어 여부 설명
quit N gpg --card-edit 명령어를 빠져나온다.
admin N 관리자 명령어를 사용할 수 있게 한다. 참고로 Admin PIN, PIN 둘 다 필요 없고 그냥 명령어만 치면 바로 된다.다만 허용된다고는 안 했다.
help N 명령어 목록을 보여준다. 간략한 설명이 곁들어져 있다.
list N 카드의 모든 이용가능한 데이터를 보여준다. 다음과 같은 정보를 포함할 수 있다.
  • 어플리케이션 ID (Application ID)
  • 버전 (Version)
  • 제조사 (Manufacturer)
  • 시리얼 번호 (Serial number)
  • 카드 소유자 이름 (Name of cardholder)
  • 선호하는 언어 (Language prefs)
  • 성별 (Sex)
  • 공개키 URL(URL of public key)[9]
  • 로그인 데이터(Login data)[10]
  • 서명 PIN 필요 여부(Signature PIN) : forced(필요함)와 not forced(필요하지 않음) 두개의 값을 가진다. 밑에서 후술할 forcesig 관리자 명령어로 변경할 수 있다. forced라면 gpg가 매번 서명시 비밀번호를 물어보며 not forced라면 Yubikey가 뽑힐 때까지 gpg가 비밀번호를 캐시(cache)한다.
  • 키 특징(Key attributes)
  • 최대 PIN 길이(Max. PIN length) : 일반 PIN - (무시) - 관리자 PIN 순서이다. PIN 재시도 카운터도 동일한 순서이다.
  • PIN 재시도 카운터(PIN reentry counter) : 실패하면 낮아진다. 0이 되면? 축하한다. 당신의 유비키는 먹통이 되었다.[11]
  • 서명 카운터(Signature counter) : 이루어진 서명 수를 나타낸다. 새로운 서명 키가 만들어지거나 들어와진(import) 경우에만 초기화된다.
  • 서명 키, 인증 키, 암호화 키(Signature Key, Authentication Key, Encryption Key)
fetch N 공개키 URL에서 공개키를 다운로드하여 GPG에 추가한다. [12]
passwd N PIN을 바꾼다. admin 명령어를 실행한 후에 하는 것이 매우 좋다.
verify N PIN을 검증하고 모든 데이터를 보여준다.
unblock N Reset Code를 이용해 PIN을 초기화한다.
generate Y YubiKey에서[13] 새로운 GPG 키를 생성한다.
forcesig Y 서명시 PIN을 매번 요구하는지의 여부(즉 다시 말해 Signature PIN)를 변경한다.
catpr Y CA 지문을 바꾼다.
url Y 공개키 URL 주소를 변경한다.
name
login
lang
sex
Y 카드 소유자 정보를 변경하는 명령어들이다. 하기 싫으면 건너뛰어도 된다. name명령어는 성과 이름을 물어보는데 성을 공백으로 하고 이름만 입력해도 된다. (그 반대도 된다.)

5 각주

  1. 이메일 서명이나 PDF 서명 등에 이용할 수 있는 인증서로 인증기관에서 발급할 수 있다.
  2. 스마트카드에서만 사용가능하며 OpenPGP에서는 사용불가. U2F 키쌍에 이용되는 알고리즘이기도 함.
  3. 스마트카드에서만 사용가능하며 OpenPGP에서는 사용불가.
  4. 참고 : compare yubikeys
  5. 위 목록에 적진 않았으나 꽤 많다.
  6. 구글 OTP 및 Authy 앱의 방식
  7. 물론 터치를 요구하려면 Require touch를 체크해야 한다.
  8. gpg가 아니라 gpg2라는 점에 유의하자.
  9. 위에서 언급한 바로 그 url이다.
  10. 설정할 필요 없다.
  11. 진짜로 먹통이 되어도 해결책이 있으니 걱정하지 말자.
  12. 스마트카드에 추가한다고 안 했다.
  13. 컴퓨터에서 생성하지 않는다.

5.1 Windows에서 OpenSSH 공개키형식으로 gpg 키 내보내기[편집]

gpg --export-ssh-key명령어를 이용하면 된다.