OpenSC.tokend
오픈 소스 OS X 스마트 카드 드라이버
tokend는 스마트 카드의 키와 인증서가 Keychain Access.app에 표시되고 Safari나 Chrome 같은 애플리케이션에서 사용할 수 있게 해줍니다. OpenSC.tokend는 OpenSC의 오픈 소스 tokend 구현체로, 실제로 볼 수 있는 다양한 실사용 PKI 스마트 카드를 지원합니다.
OS X에서의 tokend 지원 역사
- 2005년 OS X 10.4 "Tiger"에서 Apple은 서드파티 스마트 카드를 다른 네이티브 OS X 애플리케이션에서 사용할 수 있도록 tokend 미들웨어를 도입했습니다 [1]. tokend를 구축하는 방법은 공개적으로 제공되지 않았습니다.
- OS X 10.5 "Leopard"는 안정화 릴리스로 볼 수 있습니다. 초기 버전에는 스마트 카드(tokend 포함) 사용을 정말 고통스럽게 만드는 여러 버그가 있었습니다 [2]. 10.5.6부터 Apple은 자체 제작 스마트 카드 리더 드라이버에서 Ludovic Rousseau가 유지 관리하는 더 완전한 기능을 갖춘 사실상 표준 오픈 소스 CCID 드라이버로 전환하여 [3], 근본적인 버그 중 적어도 일부를 완화했습니다.
- OS X 10.6 "Snow Leopard"는 tokend를 구축하는 데 필요한 소스 구성 요소를 제공한 마지막 버전입니다 (편의를 위해 빌드 폴더에 번들로 포함되어 있습니다).
- OS X 10.7 "Lion"에서 Apple은 운영 체제와 함께 tokend를 더 이상 배포하지 않게 되었고 [3], tokend의 기반인 CDSA와 OpenSC가 소프트웨어 암호화 작업에 사용하는 OpenSSL도 [4] 지원 중단했습니다.
- OS X 10.8 "Mountain Lion"과 OS X 10.9 "Mavericks"에서 Apple은 기본 PC/SC 및 CCID 하위 시스템에 작은 변경을 가했지만, 지원 중단된 tokend 구성 요소는 여전히 작동했습니다 [5], [6].
- OS X 10.10 "Yosemite"에서 OpenSC.tokend를 구축하는 데 필요한 tokend 코드베이스(대부분 2005~2008년산!)는 여전히 작동합니다. 의존 구성 요소가 수년간 업데이트되지 않았고 시스템 C++ 컴파일러까지 바뀌었음에도 불구하고 말이죠. 10.10에서의 전반적인 경험은 다소 불안정한데, 이는 pcscd를 CryptoTokenKit 데몬으로 교체하는 것과 관련된 기본 스마트 카드 인프라의 재작성 때문입니다 [7]. CryptoTokenKit 호환 스마트 카드 드라이버를 만드는 방법에 대한 공개 정보는 없습니다 (공유 코드와 iOS에서 ApplePay의 1년간 벤더 잠금 때문일 수 있나요 [8]?).
- OS X 10.15 "Catalina"에서는 tokend가 비활성화되어 있으며 명시적으로 활성화해야 합니다:
sudo defaults write /Library/Preferences/com.apple.security.smartcard Legacy -bool true
Installation
OpenSC.tokend는 OS X용 OpenSC 설치 프로그램과 함께 배포되며 별도로 제공되지 않습니다.
Building
OpenSC.tokend를 빌드하려면 OpenSC의 소스 코드가 필요합니다. OS X용 OpenSC 빌드 스크립트는 tokend도 함께 빌드합니다. 최소한의 지침은 빌드 스크립트 소스 코드에서 확인할 수 있습니다.
License
OpenSC의 코드는 LGPL 2.1+로 라이선스가 부여되며, Apple의 구성 요소는 APSL 2.0입니다.
Future
tokend 시스템 전체는 과거의 유물이며 가까운 미래에 사라질 운명이지만, 여전히 최신 OS X 버전에서 유용하게 사용됩니다. Apple이 언제 지원을 중단할지는 알려지지 않았습니다. CryptoTokenKit 플러그인과 같은 새로운 방식이 미래에는 필요할 것이지만, 세부 사항이나 로드맵, 그 밖의 문서는 공개적으로 제공되지 않습니다 (언젠가는 바뀌기를 희망합니다). 그 동안 암호화 중심 애플리케이션을 개발할 때 PKCS#11은 스마트 카드에 표준 방식으로 접근할 수 있는 사용 가능한(하지만 최선은 아닌) 선택지입니다.
감사합니다,
@martinpaljak