Touch ID로 안전하고 편리한 Keychain 접근
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