Câu hỏi của tôi liên quan đến móc khóa trong iOS (iPhone, iPad, ...). Tôi nghĩ (nhưng không chắc) rằng việc triển khai móc khóa trong Mac OS X đặt ra câu hỏi tương tự với cùng câu trả lời.
iOS cung cấp năm loại (lớp) mặt hàng chuỗi khóa. Bạn phải chọn một trong năm giá trị đó cho khóa kSecClass
để xác định loại:
kSecClassGenericPassword used to store a generic password
kSecClassInternetPassword used to store an internet password
kSecClassCertificate used to store a certificate
kSecClassKey used to store a kryptographic key
kSecClassIdentity used to store an identity (certificate + private key)
Sau thời gian dài của tài liệu táo đọc, blog và diễn đàn-mục, tôi phát hiện ra rằng một mục keychain loại kSecClassGenericPassword
được tính độc đáo của nó từ các thuộc tính kSecAttrAccessGroup
, kSecAttrAccount
và kSecAttrService
.
Nếu ba thuộc tính đó trong yêu cầu 1 giống như trong yêu cầu 2, thì bạn sẽ nhận được cùng một mục chuỗi khóa mật khẩu chung, bất kể thuộc tính nào khác. Nếu một (hoặc hai hoặc tất cả) thuộc tính này thay đổi giá trị của nó, thì bạn sẽ nhận được các vật phẩm khác nhau.
Nhưng kSecAttrService
chỉ có sẵn cho các mặt hàng thuộc loại kSecClassGenericPassword
, vì vậy nó không thể là một phần của "khóa duy nhất" của một mặt hàng thuộc bất kỳ loại nào khác và dường như không có tài liệu nào chỉ ra rõ ràng thuộc tính nào xác định duy nhất một mặt hàng chuỗi khóa.
Mã mẫu trong lớp "KeychainItemWrapper" của "GenericKeychain" sử dụng thuộc tính kSecAttrGeneric
để làm cho một mặt hàng trở thành duy nhất, nhưng đây là một lỗi. Hai mục nhập trong ví dụ này chỉ được lưu trữ dưới dạng hai mục nhập riêng biệt, bởi vì chúng kSecAttrAccessGroup
khác nhau (một mục có nhóm truy cập được đặt, mục còn lại cho phép nó tự do). Nếu bạn cố gắng thêm mật khẩu thứ 2 mà không có nhóm truy cập bằng cách sử dụng của Apple KeychainItemWrapper
, bạn sẽ thất bại.
Vì vậy, vui lòng trả lời câu hỏi của tôi:
- Có đúng, rằng sự kết hợp của
kSecAttrAccessGroup
,kSecAttrAccount
vàkSecAttrService
là "chìa khóa độc đáo" của một mục keychain có kSecClass làkSecClassGenericPassword
? - Thuộc tính nào làm cho một mặt hàng trong chuỗi khóa là duy nhất nếu
kSecClass
không phải là thuộc tínhkSecClassGenericPassword
?