macOS에서 OATH Toolkit과 Keychain으로 OTP 로그인 설정하기

이 글에서는 macOS에서 OATH ToolkitKeychain을 사용해 안전하게 OTP(One-Time Password) 기반 인증을 구현하는 방법을 설명합니다. 또한, Keychain의 항상 허용(Always Allow) 설정의 보안 위험에 대해서도 다룹니다.


1. OATH Toolkit 설치

OATH Toolkit은 TOTP(Time-Based One-Time Password) 생성에 사용됩니다. macOS에서는 Homebrew를 통해 간단히 설치할 수 있습니다.

설치 명령어:

brew install oath-toolkit

설치 후, oathtool 명령어를 사용해 OTP를 생성할 수 있습니다.

2. Keychain에 OTP 키 저장

Keychain은 macOS의 기본 암호 관리 시스템으로, OTP 키를 안전하게 저장할 수 있습니다. 아래 명령어로 Keychain에 키를 저장하세요.

Keychain에 키 저장:

security add-generic-password -a <계정명> -s <서비스명> -w <OTP 키>

예시:

security add-generic-password -a user@example.com -s otp-service -w mysecretkey123
  • -a: 계정 이름(예: 이메일 주소)
  • -s: 서비스 이름
  • -w: 저장할 OTP 키

이 명령은 Keychain에 otp-service라는 이름으로 OTP 키를 저장합니다.

3. OTP 생성

Keychain에 저장된 OTP 키를 사용해 TOTP를 생성하려면 아래 단계를 따르세요.

Keychain에서 키 가져오기:

PASSWORD=$(security find-generic-password -a user@example.com -s otp-service -w)

OTP 생성:

oathtool --totp --base32 "$PASSWORD"

예시 출력:

123456

이제 생성된 OTP를 인증 시스템에 입력하여 로그인할 수 있습니다.

4. Keychain의 “항상 허용(Always Allow)” 설정 주의

Keychain은 기본적으로 항목 접근 시 사용자 인증을 요구합니다. 하지만 “항상 허용” 옵션을 활성화하면 보안 위험이 발생할 수 있습니다.

항상 허용의 위험성

  • “항상 허용”은 특정 앱이나 명령어(security 등)가 추가 인증 없이 Keychain에 저장된 데이터를 가져오도록 허용합니다.
  • 악성 스크립트가 Keychain 데이터를 유출할 가능성이 있으므로, 민감한 항목에 대해 “항상 허용”을 사용하지 않는 것이 좋습니다.

5. Keychain 접근 설정 확인 및 변경

Keychain 항목의 접근 권한을 확인하고 필요한 경우 수정할 수 있습니다.

설정 확인 방법:

1.	응용 프로그램 > 유틸리티 > 키체인 접근 실행.
2.	저장된 항목을 선택하고 정보 가져오기 클릭.
3.	Access Control(접근 제어) 탭으로 이동.

“항상 허용” 설정 해제:

1.	“Confirm before allowing access” 선택.
2.	**“Ask for Keychain password”**를 활성화해 추가 보안을 적용.
3.	Save Changes를 클릭하여 저장.

6. 자동화 스크립트 작성 (선택 사항)

Keychain과 OATH Toolkit을 활용한 OTP 생성을 자동화하려면 아래 스크립트를 사용할 수 있습니다:

#!/bin/bash

# Keychain에서 OTP 키 가져오기
PASSWORD=$(security find-generic-password -a user@example.com -s otp-service -w)

# OTP 생성
OTP=$(oathtool --totp --base32 "$PASSWORD")

# 생성된 OTP 출력
echo "Your OTP is: $OTP"

위 스크립트를 저장하고 실행하면 OTP가 자동으로 생성됩니다.

7. 보안 권장 사항

  1. Keychain 접근 권한 최소화:
    • 민감한 항목은 “항상 허용”을 비활성화하고 접근 요청 시 사용자 인증을 요구하세요.
  2. macOS 최신 상태 유지:
    • 보안 취약점을 방지하기 위해 macOS와 모든 소프트웨어를 최신 상태로 유지하세요.
  3. 강력한 로그인 비밀번호 사용:
    • macOS 로그인 비밀번호는 Keychain 암호화의 핵심이므로 강력한 비밀번호를 설정하세요.

8. 클립보드 자동 복사로 편리하게 사용하기

OTP를 생성한 후 바로 클립보드에 복사하면 더욱 편리합니다. macOS에서는 pbcopy 명령어를 활용할 수 있습니다.

#!/bin/bash

# Keychain에서 OTP 키 가져오기
PASSWORD=$(security find-generic-password -a user@example.com -s otp-service -w)

# OTP 생성 후 클립보드에 복사
OTP=$(oathtool --totp --base32$PASSWORD)
echo$OTP” | pbcopy

# 알림 표시 (선택 사항)
osascript -e “display notification \”OTP가 클립보드에 복사되었습니다: $OTP\” with title \”OTP 생성 완료\”

이 스크립트를 실행하면 OTP가 자동으로 클립보드에 복사되고, macOS 알림으로 확인할 수 있습니다. Cmd+V로 바로 붙여넣기만 하면 됩니다.

Alfred 또는 Raycast와 연동

Alfred나 Raycast 같은 생산성 도구와 연동하면 단축키 하나로 OTP를 생성하고 클립보드에 복사할 수 있습니다.

Raycast Script Command 예시:

Raycast의 Script Commands 기능을 사용하면 단축키 하나로 OTP를 생성할 수 있습니다. ~/.config/raycast/scripts/ 디렉토리에 스크립트를 저장하고 Raycast에서 불러오면 됩니다.

Alfred Workflow 설정:

Alfred의 Workflow에서 Run Script 액션을 추가하고, 위의 스크립트를 입력한 뒤 단축키를 지정하면 됩니다.


9. 여러 서비스의 OTP 관리하기

실무에서는 여러 서비스에 대한 OTP를 관리해야 하는 경우가 많습니다. 이때 서비스별로 Keychain 항목을 구분하여 저장하고, 선택적으로 OTP를 생성하는 스크립트를 작성할 수 있습니다.

#!/bin/bash

# 사용법: ./get_otp.sh <서비스명>
# 예: ./get_otp.sh aws
#     ./get_otp.sh github
#     ./get_otp.sh slack

SERVICE=$1

if [ -z$SERVICE]; then
    echo “사용법: $0 <서비스명>”
    echo “등록된 서비스:”
    echo “  aws     - AWS Console”
    echo “  github  - GitHub”
    echo “  slack   - Slack”
    exit 1
fi

# Keychain에서 해당 서비스의 OTP 키 가져오기
PASSWORD=$(security find-generic-password -a “otp” -s “otp-$SERVICE-w 2>/dev/null)

if [ -z$PASSWORD]; then
    echo “오류: '$SERVICE' 서비스의 OTP 키가 Keychain에 없습니다.”
    echo “다음 명령어로 등록하세요:”
    echo “  security add-generic-password -a otp -s otp-$SERVICE -w <OTP키>”
    exit 1
fi

# OTP 생성 및 클립보드 복사
OTP=$(oathtool --totp --base32$PASSWORD)
echo$OTP” | pbcopy
echo “[$SERVICE] OTP: $OTP (클립보드에 복사됨)

위 스크립트를 get_otp.sh로 저장하고 실행 권한을 부여하면 됩니다:

chmod +x get_otp.sh
./get_otp.sh github

10. TOTP의 동작 원리 이해하기

TOTP(Time-Based One-Time Password)가 어떻게 동작하는지 이해하면 트러블슈팅에 도움이 됩니다.

TOTP 알고리즘

TOTP는 HMAC-SHA1 알고리즘을 기반으로 동작합니다. 핵심 요소는 다음과 같습니다:

  1. 비밀 키(Secret Key): 서버와 클라이언트가 공유하는 Base32 인코딩된 키
  2. 시간 스텝(Time Step): 기본적으로 30초 단위로 OTP가 갱신됨
  3. 카운터: 현재 Unix 시간을 30초로 나눈 값이 카운터로 사용됨

OTP가 일치하지 않을 때 확인사항

OTP 인증에 실패하는 경우 다음을 확인하세요:

  • 시간 동기화: macOS의 시간이 정확한지 확인합니다. 시스템 환경설정 > 일반 > 날짜 및 시간에서 “자동으로 날짜 및 시간 설정”이 활성화되어 있는지 확인하세요.
  • Base32 키 정확성: Keychain에 저장된 키가 올바른지 확인합니다. 공백이나 불필요한 문자가 포함되지 않았는지 점검하세요.
  • 시간 보정 옵션: 서버와 시간 차이가 있을 경우 oathtool의 시간 보정 옵션을 사용할 수 있습니다.
# 시간 동기화 상태 확인
ntpdate -q time.apple.com

# 시간 보정이 필요한 경우 (예: 30초 앞당김)
oathtool --totp --base32 --now=”2024-12-01 12:00:00 UTC” “$PASSWORD

30초 타이머 고려

OTP는 30초마다 갱신되므로, OTP를 생성한 직후에 입력하는 것이 좋습니다. 스크립트에 남은 시간을 표시하는 기능을 추가할 수도 있습니다:

#!/bin/bash

PASSWORD=$(security find-generic-password -a user@example.com -s otp-service -w)
OTP=$(oathtool --totp --base32$PASSWORD)

# 남은 시간 계산
REMAINING=$((30 - $(date +%s) % 30))

echo “OTP: $OTP (${REMAINING}초 후 만료)echo$OTP” | pbcopy

11. 보안 강화를 위한 추가 설정

Touch ID와 연동

최신 macOS에서는 Keychain 접근 시 Touch ID를 사용할 수 있습니다. 이를 통해 비밀번호 입력 없이도 안전하게 OTP 키에 접근할 수 있습니다. Keychain Access 앱에서 해당 항목의 접근 제어 설정에서 Touch ID 인증을 활성화하세요.

별도의 Keychain 생성

기본 로그인 Keychain 대신 OTP 전용 Keychain을 생성하여 보안을 더 강화할 수 있습니다:

# OTP 전용 Keychain 생성
security create-keychain -p “키체인비밀번호” otp.keychain-db

# OTP 키 저장
security add-generic-password -a user@example.com -s otp-service -w mysecretkey123 otp.keychain-db

# OTP 키 조회
security find-generic-password -a user@example.com -s otp-service -w otp.keychain-db

별도 Keychain을 사용하면 로그인 Keychain이 노출되더라도 OTP 키는 보호됩니다. 다만, 별도 Keychain은 잠금 해제를 위해 추가 비밀번호 입력이 필요합니다.

Keychain 자동 잠금 설정

일정 시간 후 Keychain이 자동으로 잠기도록 설정하면 보안이 강화됩니다:

# 5분(300초) 후 자동 잠금 설정
security set-keychain-settings -t 300 otp.keychain-db

# 컴퓨터 잠자기 시 자동 잠금
security set-keychain-settings -l otp.keychain-db

결론

macOS에서 OATH Toolkit과 Keychain을 사용하면 안전하게 OTP 기반 인증을 설정할 수 있습니다. 하지만 Keychain의 “항상 허용” 설정은 보안 위험을 초래할 수 있으므로, 민감한 항목에 대해서는 사용하지 않는 것을 권장합니다. Keychain의 강력한 보안과 함께 적절한 설정으로 보안을 강화하세요.

여러 서비스의 OTP를 관리해야 한다면 서비스별로 Keychain 항목을 분리하고, 클립보드 자동 복사 스크립트를 활용하면 생산성을 크게 높일 수 있습니다. Alfred나 Raycast 같은 런처 도구와 연동하면 단축키 하나로 OTP를 생성할 수 있어 매우 편리합니다.

보안과 편의성의 균형을 잘 맞추어, 안전하면서도 효율적인 OTP 인증 환경을 구축해 보세요.