การควบคุมการเข้าถึง Keychain
จำกัดการเข้าถึงรายการด้วยไบโอเมตริกซ์และการปลดล็อกอุปกรณ์
การควบคุมการเข้าถึง Keychain เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
การควบคุมเวลาที่อ่านข้อมูลลับได้
การจัดเก็บข้อมูลลับเป็นเพียงครึ่งหนึ่งของงานเท่านั้น — คุณต้องควบคุมด้วยว่า เมื่อใดจึงจะอ่านข้อมูลนั้นได้ พวงกุญแจมีคลาสการเข้าถึงและแฟล็กควบคุมการเข้าถึงที่จำกัดรายการไว้เบื้องหลังการปลดล็อกอุปกรณ์ รหัสผ่าน หรือไบโอเมตริกซ์ ซึ่งช่วยปกป้องข้อมูลหากอุปกรณ์สูญหาย
import Security
// Two layers of control:
// kSecAttrAccessible -> when readable (lock state)
// SecAccessControl -> user presence / biometricsคีย์ kSecAttrAccessible
kSecAttrAccessible กำหนดคลาสการเข้าถึงขณะเพิ่มรายการ โดยกำหนดว่ารายการจะพร้อมใช้งานตลอดเวลา เฉพาะหลังการปลดล็อกครั้งแรก หรือเฉพาะขณะที่อุปกรณ์ปลดล็อกอยู่ เลือกระดับที่เข้มงวดที่สุดเท่าที่ฟีเจอร์ของคุณรองรับ
import Security
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: "user",
kSecValueData as String: Data("secret".utf8),
kSecAttrAccessible as String:
kSecAttrAccessibleWhenUnlocked
]
_ = queryWhenUnlocked
kSecAttrAccessibleWhenUnlocked ทำให้รายการอ่านได้เฉพาะขณะที่อุปกรณ์ปลดล็อกอยู่ งานเบื้องหลังที่ทำงานขณะอุปกรณ์ล็อกจะเข้าถึงรายการนี้ไม่ได้ นี่เป็นค่าเริ่มต้นที่เหมาะสมสำหรับโทเค็นเซสชันส่วนใหญ่
import Security
// Readable only while unlocked; blocked when locked.
let level = kSecAttrAccessibleWhenUnlocked
_ = levelAfterFirstUnlock
kSecAttrAccessibleAfterFirstUnlock ทำให้รายการอ่านได้ตั้งแต่การปลดล็อกครั้งแรกหลังเปิดเครื่องไปจนถึงการรีบูตครั้งถัดไป แม้หลังจากนั้นอุปกรณ์จะถูกล็อกอยู่ก็ตาม ใช้กับข้อมูลลับที่กระบวนการเบื้องหลังจำเป็นต้องใช้ เช่น โทเค็นสำหรับจัดการการแจ้งเตือนแบบพุช
import Security
// Available after the first unlock post-boot,
// including while subsequently locked.
let level = kSecAttrAccessibleAfterFirstUnlock
_ = levelตัวแปร ThisDeviceOnly
คลาสการเข้าถึงแต่ละคลาสมีรูปแบบ ...ThisDeviceOnly รายการเหล่านี้จะไม่รวมอยู่ในข้อมูลสำรองที่เข้ารหัส และจะไม่ย้ายไปยังอุปกรณ์เครื่องใหม่ ใช้กับคีย์ที่ไม่ควรออกจากฮาร์ดแวร์เครื่องนี้โดยเด็ดขาด
import Security
// Never backed up, never migrated:
let local = kSecAttrAccessibleWhenUnlockedThisDeviceOnly
_ = localเมื่อมีการตั้งรหัสผ่าน
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly จะจัดเก็บรายการก็ต่อเมื่อผู้ใช้ตั้งรหัสผ่านไว้ และจะลบรายการหากผู้ใช้ลบรหัสผ่าน รับประกันว่าข้อมูลลับจะได้รับการปกป้องด้วยรหัสผ่านเสมอ
import Security
let level =
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
// Item vanishes if the user disables their passcode.
_ = levelSecAccessControl สำหรับการยืนยันตัวตนของผู้ใช้
นอกเหนือจากสถานะการล็อกแล้ว SecAccessControlCreateWithFlags ยังสร้างนโยบายที่กำหนดให้ผู้ใช้ต้องยืนยันตัวตนในขณะนั้น ไม่ว่าจะด้วยไบโอเมตริกซ์หรือรหัสผ่าน ขณะอ่านข้อมูล คุณแนบนโยบายนี้ผ่าน kSecAttrAccessControl แทนคีย์การเข้าถึง หรือใช้ร่วมกับคีย์ดังกล่าวก็ได้
import Security
func makeControl() -> SecAccessControl? {
return SecAccessControlCreateWithFlags(
nil,
kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
.userPresence,
nil)
}แฟล็กควบคุมการเข้าถึง
แฟล็กช่วยกำหนดข้อกำหนดให้ละเอียดขึ้น: .userPresence อนุญาตให้ใช้ไบโอเมตริกซ์หรือใช้รหัสผ่านเป็นทางเลือกสำรอง .biometryCurrentSet ทำให้รายการใช้ไม่ได้หากลายนิ้วมือหรือใบหน้าที่ลงทะเบียนไว้เปลี่ยนแปลง และ .devicePasscode บังคับให้ป้อนรหัสผ่าน คุณสามารถรวมแฟล็กเหล่านี้เพื่อระบุข้อกำหนดด้านความปลอดภัยของคุณ
import Security
// .userPresence -> biometric OR passcode
// .biometryAny -> any enrolled biometric
// .biometryCurrentSet -> invalidate on biometric change
// .devicePasscode -> passcode only
let flags: SecAccessControlCreateFlags = [.userPresence]
_ = flagsการเพิ่มรายการที่ได้รับการปกป้อง
หากต้องการจัดเก็บข้อมูลลับที่จำกัดด้วยไบโอเมตริกซ์ ให้วางออบเจ็กต์ SecAccessControl ไว้ใต้ kSecAttrAccessControl การอ่านในภายหลังจะขอให้ผู้ใช้ยืนยันตัวตนก่อนส่งคืนข้อมูล
import Security
func saveProtected(_ data: Data, account: String,
control: SecAccessControl) -> Bool {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: account,
kSecValueData as String: data,
kSecAttrAccessControl as String: control]
return SecItemAdd(query as CFDictionary, nil)
== errSecSuccess
}การอ่านจะขอให้ผู้ใช้ยืนยันตัวตน
การอ่านรายการที่ได้รับการปกป้องจะเปิดส่วนติดต่อผู้ใช้สำหรับยืนยันตัวตนโดยอัตโนมัติ คุณสามารถส่งสตริงเหตุผลผ่าน kSecUseOperationPrompt เพื่อให้ข้อความแจ้งอธิบายว่าทำไมจึงต้องเข้าถึงข้อมูล การอ่านจะหยุดรอจนกว่าผู้ใช้จะยืนยันตัวตนหรือยกเลิก
import Security
func readProtected(account: String) -> Data? {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: account,
kSecReturnData as String: true,
kSecUseOperationPrompt as String:
String(localized: "Unlock your saved key")]
var out: CFTypeRef?
return SecItemCopyMatching(query as CFDictionary,
&out) == errSecSuccess ? out as? Data : nil
}การเลือกระดับที่เหมาะสม
จับคู่นโยบายให้เหมาะกับความเสี่ยง:
- โทเค็นเซสชันที่ใช้ในเบื้องหลัง:
AfterFirstUnlock - โทเค็นที่ใช้เฉพาะในส่วนติดต่อผู้ใช้:
WhenUnlocked - ข้อมูลลับมูลค่าสูง:
SecAccessControlร่วมกับ.userPresenceและคลาสThisDeviceOnly
ความเข้มงวดที่มากขึ้นปลอดภัยกว่า แต่จะทำให้เข้าถึงจากเบื้องหลังไม่ได้ จึงต้องสร้างสมดุลระหว่างทั้งสองด้าน
import Security
// High-value: biometric-gated, device-bound, no backup
let control = SecAccessControlCreateWithFlags(
nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
.userPresence, nil)
_ = controlตรวจสอบความเข้าใจ
ทบทวนว่าคลาสการเข้าถึงใดเหมาะกับข้อมูลลับที่จำเป็นต้องใช้ในเบื้องหลัง
สรุปทบทวน
คุณได้เรียนรู้การจำกัดการเข้าถึงรายการในพวงกุญแจ:
kSecAttrAccessibleกำหนดความพร้อมใช้งานตามสถานะการล็อก ได้แก่WhenUnlocked,AfterFirstUnlockและตัวแปร...ThisDeviceOnlyที่ไม่รวมรายการไว้ในข้อมูลสำรองWhenPasscodeSetThisDeviceOnlyผูกการใช้งานรายการไว้กับการมีรหัสผ่านSecAccessControlร่วมกับแฟล็กอย่าง.userPresenceหรือ.biometryCurrentSetจะกำหนดให้ยืนยันตัวตนขณะอ่านข้อมูล- เลือกระดับที่เข้มงวดที่สุดซึ่งยังรองรับรูปแบบการเข้าถึงของคุณ
คำถามที่พบบ่อย
บทเรียน “การควบคุมการเข้าถึง Keychain” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การควบคุมการเข้าถึง Keychain” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การควบคุมการเข้าถึง Keychain”
จำกัดการเข้าถึงรายการด้วยไบโอเมตริกซ์และการปลดล็อกอุปกรณ์ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การควบคุมการเข้าถึง Keychain” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การจัดเก็บข้อมูลลับใน Keychain
- การควบคุมการเข้าถึง Keychain
- การยืนยันตัวตนด้วยข้อมูลชีวมิติ
- การปกป้องข้อมูลและการเข้ารหัส