Touch ID로 안전하고 편리한 Keychain 접근

발행: (2026년 1월 6일 오후 10:01 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

문제점

터미널에서 macOS 키체인에 저장된 비밀번호에 접근할 때 보안과 편의성 사이에서 딜레마에 직면합니다:

security find-generic-password -a "user@example.com" -s "myapp" -w

macOS가 대화 상자를 표시합니다:

“security” wants to use your confidential information stored in “myapp” in your keychain.
[Deny] [Allow] [Always Allow]

옵션 1: 매번 “Allow” 클릭

  • 매번 Mac 비밀번호를 입력해야 함
  • 보안은 좋지만 불편

옵션 2: “Always Allow” 클릭

  • 이제 어떤 스크립트든 인증 없이 이 비밀번호에 접근 가능
  • 편리하지만 보안에 취약

해결책: Touch ID 인증

keychain-fingerprint 라는 CLI 도구를 만들었습니다. 이 도구는 키체인 접근 시 Touch ID를 사용합니다.

장점

항목기존 방식 (security)keychain-fingerprint
인증 방식Mac 비밀번호 (느림)Touch ID (즉시)
보안“Always Allow” = 보안 취약항상 Touch ID 필요
편의성비밀번호 입력 또는 모두 허용한 번 터치

작동 원리

┌─────────────────────────────────────────┐
│         keychain-fingerprint            │
├─────────────────────────────────────────┤
│  1. Touch ID 인증                         │
│  2. 키체인 접근 (자동 승인)               │
└─────────────────────────────────────────┘

┌─────────────────────────────────────────┐
│         다른 앱 / 터미널                 │
├─────────────────────────────────────────┤
│  키체인 접근 → Mac 비밀번호 프롬프트      │
└─────────────────────────────────────────┘
  • 이 앱: Touch ID로 만든 항목에 자동 승인으로 접근 가능.
  • 다른 앱: 해당 항목에 접근하려면 여전히 Mac 비밀번호가 필요.

설치

# Clone
git clone https://github.com/dss99911/keychain-fingerprint.git
cd keychain-fingerprint

# Compile
swiftc -o keychain-fingerprint main.swift \
    -framework LocalAuthentication \
    -framework Security

# Install (optional)
sudo cp keychain-fingerprint /usr/local/bin/

사용법

비밀번호 저장

keychain-fingerprint set myapp user@example.com
# Touch ID 프롬프트 → 비밀번호 입력 (숨김)

비밀번호 조회

# 바로 출력
keychain-fingerprint get myapp user@example.com

# 권장: 변수에 저장
PASSWORD=$(keychain-fingerprint get myapp user@example.com)
echo "Password retrieved"
unset PASSWORD  # 사용 후 삭제

저장된 항목 목록 보기

keychain-fingerprint list

비밀번호 삭제

keychain-fingerprint delete myapp user@example.com

보안 기능

  • 모든 명령은 Touch ID 인증이 필요합니다.
  • 비밀번호는 macOS 키체인에 암호화되어 저장됩니다.
  • 비밀번호 입력 시 화면에 표시되지 않습니다 (에코 없음).
  • 기기 전용 접근(kSecAttrAccessibleWhenUnlockedThisDeviceOnly).
  • 다른 앱은 여전히 Mac 비밀번호가 필요합니다.

요구 사항

  • Touch ID가 탑재된 macOS (Touch ID가 있는 MacBook Pro/Air, 또는 Magic Keyboard with Touch ID가 장착된 Apple Silicon Mac).
  • Xcode Command Line Tools.

소스 코드

전체 소스 코드는 GitHub에서 확인할 수 있습니다: dss99911/keychain-fingerprint

관련 글

Touch ID 대신 루트 권한을 이용한 대안 방법은 다음을 참고하세요: How to always allow Mac keychain password only by specific app

Back to Blog

관련 글

더 보기 »

Lyra: 명령줄 어시스턴트

나는 어시스턴트의 골격과 메인 루프를 코딩했다. 음성이나 AI 어시스턴트보다 CLI 어시스턴트를 선택한 이유는 하드웨어 제한 때문이다. 나는…