Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you...

177
© 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. #WWDC14 Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering Libor Sykora Core OS Security Engineering

Transcript of Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you...

Page 1: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

© 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

#WWDC14

Keychain and Authentication with Touch IDLearn how you can integrate Touch ID

Core OS

Session 711 Wade Benson Core OS Security Engineering

!

Libor Sykora Core OS Security Engineering

Page 2: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

What You’ll Learn

Page 3: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

What You’ll Learn

Store user secrets securely (passwords, keys, …)

Page 4: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

What You’ll Learn

Store user secrets securely (passwords, keys, …)

New Keychain Data Protection Class

Page 5: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

What You’ll Learn

Store user secrets securely (passwords, keys, …)

New Keychain Data Protection Class

New Access Control List (ACLs)

Page 6: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

What You’ll Learn

Store user secrets securely (passwords, keys, …)

New Keychain Data Protection Class

New Access Control List (ACLs)

Touch ID

Page 7: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Features

Page 8: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Features

A very specialized database

Page 9: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Features

A very specialized database

Protected data (payload)

Page 10: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Features

A very specialized database

Protected data (payload)

Keychain attributes

Page 11: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Features

A very specialized database

Protected data (payload)

Keychain attributes

Efficient search by attributes

Page 12: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Features

A very specialized database

Protected data (payload)

Keychain attributes

Efficient search by attributes

Optimized for user secrets

Page 13: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Why the Keychain?

Page 14: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Why the Keychain?

Protected with the user passcode

Page 15: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Why the Keychain?

Protected with the user passcode

Protected with the device secret

Page 16: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Why the Keychain?

Protected with the user passcode

Protected with the device secret

Protect secrets at rest

Page 17: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Why the Keychain?

Protected with the user passcode

Protected with the device secret

Protect secrets at rest

Encrypted backup

Page 18: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Why the Keychain?

Protected with the user passcode

Protected with the device secret

Protect secrets at rest

Encrypted backup

Access control

Page 19: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Why the Keychain?

Protected with the user passcode

Protected with the device secret

Protect secrets at rest

Encrypted backup

Access control

Keychain sync

Page 20: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Your Application

Page 21: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Security.framework

Your Application

Page 22: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

SecItem APIs

Security.framework

Your Application

Page 23: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

SecItem APIs

Security.framework

Your Application

securityd

Keychain

Page 24: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd

Keychain

Page 25: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Page 26: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Attributes

Page 27: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Attributes

Page 28: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Attributes

Page 29: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Encrypted

Page 30: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Encrypted

Page 31: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Decrypted

Page 32: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Decrypted

Page 33: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Secret

Page 34: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Secret

Page 35: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Page 36: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Interactions

Secure enclave

SecItem APIs

Security.framework

Your Application

securityd Device Secrets

Passcode SecretsKeychain

Page 37: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem creation

NSData* secret = [@"top secret" dataWithEncoding:NSUTF8StringEncoding]; NSDictionary* attributes = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecValueData: secret, }; OSStatus status = SecItemAdd((CFDictionaryRef) attributes, NULL);

!

Cannot create duplicate items

Page 38: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem creation

NSData* secret = [@"top secret" dataWithEncoding:NSUTF8StringEncoding]; NSDictionary* attributes = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecValueData: secret, }; OSStatus status = SecItemAdd((CFDictionaryRef) attributes, NULL);

!

Cannot create duplicate items

Page 39: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem creation

NSData* secret = [@"top secret" dataWithEncoding:NSUTF8StringEncoding]; NSDictionary* attributes = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecValueData: secret, }; OSStatus status = SecItemAdd((CFDictionaryRef) attributes, NULL);

!

Cannot create duplicate items

Page 40: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem creation

NSData* secret = [@"top secret" dataWithEncoding:NSUTF8StringEncoding]; NSDictionary* attributes = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecValueData: secret, }; OSStatus status = SecItemAdd((CFDictionaryRef) attributes, NULL);

!

Cannot create duplicate items

Page 41: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem lookup

NSDictionary* query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecReturnData: @YES, }; NSData *data = NULL; OSStatus status = SecItemCopyMatching((CFDictionaryRef)query, (CFTypeRef*)&data);

Page 42: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem lookup

NSDictionary* query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecReturnData: @YES, }; NSData *data = NULL; OSStatus status = SecItemCopyMatching((CFDictionaryRef)query, (CFTypeRef*)&data);

Page 43: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem lookup

NSDictionary* query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecReturnData: @YES, }; NSData *data = NULL; OSStatus status = SecItemCopyMatching((CFDictionaryRef)query, (CFTypeRef*)&data);

Page 44: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem Update/Delete

NSDictionary* query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", }; NSDictionary* changes = @{ ... }; OSStatus status = SecItemUpdate((CFDictionaryRef)query, (CFDictionaryRef)changes); OSStatus status = SecItemDelete((CFDictionaryRef)query);

!

Page 45: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem Update/Delete

NSDictionary* query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", }; NSDictionary* changes = @{ ... }; OSStatus status = SecItemUpdate((CFDictionaryRef)query, (CFDictionaryRef)changes); OSStatus status = SecItemDelete((CFDictionaryRef)query);

!

Page 46: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem Update/Delete

NSDictionary* query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", }; NSDictionary* changes = @{ ... }; OSStatus status = SecItemUpdate((CFDictionaryRef)query, (CFDictionaryRef)changes); OSStatus status = SecItemDelete((CFDictionaryRef)query);

Page 47: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

The Keychain in a NutshellItem Update/Delete

NSDictionary* query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", }; NSDictionary* changes = @{ ... }; OSStatus status = SecItemUpdate((CFDictionaryRef)query, (CFDictionaryRef)changes); OSStatus status = SecItemDelete((CFDictionaryRef)query);

!

Use Update to modify items, not Delete and Add

Page 48: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Workflow(Pseudo code)

Page 49: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Workflow(Pseudo code)

NSData* password = nil; if (SecItemCopyMatching(..., &password) == noErr) { if (password works) { // great!

Page 50: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Workflow(Pseudo code)

NSData* password = nil; if (SecItemCopyMatching(..., &password) == noErr) { if (password works) { // great!

} else {

password = get from user; if (password works) {

SecItemAdd(...); // save it for next time

}

}

Page 51: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Workflow(Pseudo code)

NSData* password = nil; if (SecItemCopyMatching(..., &password) == noErr) { if (password works) { // great!

} else {

password = get from user; if (password works) {

SecItemAdd(...); // save it for next time

}

}

} else { password = get a better one; if (that password worked better) {

SecItemUpdate(...); } }

Page 52: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Handling Retrieved Secrets

Use and purge

Do not keep secrets in memory

Do not save or send

Page 53: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Access Control Roadmap

Page 54: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Access Control Roadmap

OS X

Application kSecAttrAccess

Page 55: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Access Control Roadmap

OS X iOS

Application kSecAttrAccess

Entitlements kSecAttrAccessGroup

Page 56: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Access Control Roadmap

OS X iOS

Application kSecAttrAccess

Entitlements kSecAttrAccessGroup

When kSecAttrAccessible

Page 57: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Access Control Roadmap

OS X iOS

Application kSecAttrAccess

Entitlements kSecAttrAccessGroup

When kSecAttrAccessible

Authentication kSecAttrAccessControl

Page 58: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

OS X iOS OS X kSecAttrSynchronizable

Application kSecAttrAccess

Entitlements kSecAttrAccessGroup kSecAttrAccessGroup

When kSecAttrAccessible kSecAttrAccessible

Authentication kSecAttrAccessControl kSecAttrAccessControl

Access Control Roadmap

Page 59: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

OS X iOS OS X kSecAttrSynchronizable

Application kSecAttrAccess

Entitlements kSecAttrAccessGroup kSecAttrAccessGroup

When kSecAttrAccessible kSecAttrAccessible

Authentication kSecAttrAccessControl kSecAttrAccessControl

Access Control Roadmap

Page 60: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Item Access

(id)kSecAttrAccessible:

Page 61: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Item Access

(id)kSecAttrAccessible:kSecAttrAccessibleWhenUnlocked

Page 62: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Item Access

(id)kSecAttrAccessible:kSecAttrAccessibleWhenUnlockedkSecAttrAccessibleAfterFirstUnlock

Page 63: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Item Access

(id)kSecAttrAccessible: kSecAttrAccessibleWhenUnlocked kSecAttrAccessibleAfterFirstUnlock kSecAttrAccessibleWhenUnlockedThisDeviceOnly kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly

Page 64: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Passcode Set?

(id)kSecAttrAccessible: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly

Page 65: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Passcode Set?

(id)kSecAttrAccessible: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly

Available if a passcode set

Page 66: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Passcode Set?

(id)kSecAttrAccessible: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly

Available if a passcode set

Removing the device passcode

Page 67: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Passcode Set?

(id)kSecAttrAccessible: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly

Available if a passcode set

Removing the device passcode

Will not sync

Page 68: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Passcode Set?

(id)kSecAttrAccessible: kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly

Available if a passcode set

Removing the device passcode

Will not sync

Not backed up

Page 69: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain ACLs and Touch ID

Libor Sykora Core OS Security Engineering

Page 70: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Introduction Keychain ACLs and Touch ID

Page 71: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Introduction Keychain ACLs and Touch ID

Item Access Control Lists (ACLs) • Accessibility

• Authentication

Page 72: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Item

Attributes !!!!

Secret

Accessibility

Introduction Keychain ACLs and Touch ID

Item Access Control Lists (ACLs) • Accessibility

• Authentication

Page 73: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Item

Attributes !!!!

Secret

Accessibility

Introduction Keychain ACLs and Touch ID

Item Access Control Lists (ACLs) • Accessibility

• Authentication

Authentication

Page 74: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Item

Attributes !!!!

Secret

Accessibility

Introduction Keychain ACLs and Touch ID

Item Access Control Lists (ACLs) • Accessibility

• Authentication

Authentication

ACL

Page 75: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain Item

Attributes !!!!

Secret

Accessibility

Introduction Keychain ACLs and Touch ID

Item Access Control Lists (ACLs) • Accessibility

• Authentication

Authentication with Touch ID and passcode

Authentication

ACL

Page 76: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering
Page 77: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain ACL

New API for ACLs

Page 78: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain ACL

New API for ACLs• (id)kSecAttrAccessControl:

Page 79: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain ACL

New API for ACLs• (id)kSecAttrAccessControl:

- SecAccessControlRef—ACL

Page 80: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain ACL

New API for ACLs• (id)kSecAttrAccessControl:

- SecAccessControlRef—ACL

ACL defines both authentication and item accessibility

Page 81: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain ACL

New API for ACLs• (id)kSecAttrAccessControl:

- SecAccessControlRef—ACL

ACL defines both authentication and item accessibility

Accessibility

Page 82: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain ACL

New API for ACLs• (id)kSecAttrAccessControl:

- SecAccessControlRef—ACL

ACL defines both authentication and item accessibility

Accessibility• kSecAttrAccessible constants

Page 83: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain ACL

New API for ACLs• (id)kSecAttrAccessControl:

- SecAccessControlRef—ACL

ACL defines both authentication and item accessibility

Accessibility• kSecAttrAccessible constants

Authentication

Page 84: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain ACL

New API for ACLs• (id)kSecAttrAccessControl:

- SecAccessControlRef—ACL

ACL defines both authentication and item accessibility

Accessibility• kSecAttrAccessible constants

Authentication • Policy

Page 85: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Keychain ACL

New API for ACLs• (id)kSecAttrAccessControl:

- SecAccessControlRef—ACL

ACL defines both authentication and item accessibility

Accessibility• kSecAttrAccessible constants

Authentication • Policy

• User presence (kSecAccessControlUserPresence)

Page 86: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User PresenceAuthentication

Policy

Device configuration Policy evaluation Backup mechanism

Page 87: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User PresenceAuthentication

Policy

Enforced by OS security domain

Device configuration Policy evaluation Backup mechanism

Page 88: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User PresenceAuthentication

Policy

Enforced by OS security domain

Device configuration Policy evaluation Backup mechanism

Device without passcode

Page 89: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User PresenceAuthentication

Policy

Enforced by OS security domain

Device configuration Policy evaluation Backup mechanism

Device without passcode No access No backup

Page 90: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User PresenceAuthentication

Policy

Enforced by OS security domain

Device configuration Policy evaluation Backup mechanism

Device without passcode No access No backup

Device with passcode

Page 91: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User PresenceAuthentication

Policy

Enforced by OS security domain

Device configuration Policy evaluation Backup mechanism

Device without passcode No access No backup

Device with passcode Requires passcode No backup

Page 92: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User PresenceAuthentication

Policy

Enforced by OS security domain

Device configuration Policy evaluation Backup mechanism

Device without passcode No access No backup

Device with passcode Requires passcode No backup

Device with Touch ID

Page 93: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User PresenceAuthentication

Policy

Enforced by OS security domain

Device configuration Policy evaluation Backup mechanism

Device without passcode No access No backup

Device with passcode Requires passcode No backup

Device with Touch ID Prefers Touch ID Allows passcode

Page 94: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User PresenceAuthentication

Policy

Enforced by OS security domain

Device configuration Policy evaluation Backup mechanism

Device without passcode No access No backup

Device with passcode Requires passcode No backup

Device with Touch ID Prefers Touch ID Allows passcode

Page 95: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch IDAuthentication

Touch ID—Easy to use authentication mechanism

Page 96: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch IDAuthentication

Touch ID—Easy to use authentication mechanism

Touch ID operations—Inside secure enclave

Page 97: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch IDAuthentication

Touch ID—Easy to use authentication mechanism

Touch ID operations—Inside secure enclave

Keychain keys operations—Inside secure enclave

Page 98: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch IDAuthentication

Touch ID—Easy to use authentication mechanism

Touch ID operations—Inside secure enclave

Keychain keys operations—Inside secure enclave

Touch ID policy enforcement

Page 99: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch IDAuthentication

Touch ID—Easy to use authentication mechanism

Touch ID operations—Inside secure enclave

Keychain keys operations—Inside secure enclave

Touch ID policy enforcement

Touch ID through LocalAuthentication

Page 100: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Architecture

Application

Keychain Key Management

Operating SystemUser Space Secure Enclave

SecItem APIs

Security.framework

Page 101: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Architecture

Application

Keychain Key Management

Operating SystemUser Space Secure Enclave

LocalAuthentication

SecItem APIs

Security.framework

Page 102: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Architecture

Application

Keychain Key Management

Touch ID

Credential Management

Operating SystemUser Space Secure Enclave

LocalAuthentication

SecItem APIs

Security.framework

Page 103: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User Interface

Standard user interface

Page 104: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User Interface

Standard user interface

Custom prompt message recommended

Page 105: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User Interface

Standard user interface

Custom prompt message recommended

Enter passcode option

Page 106: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

User Interface

Standard user interface

Custom prompt message recommended

Enter passcode option

Blocking keychain operation

Page 107: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Item Accessibility with ACLsRecommendation

Page 108: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Item Accessibility with ACLsRecommendation

“When unlocked” • kSecAttrAccessibleWhenUnlocked

• No passcode = item is not accessible

Page 109: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Item Accessibility with ACLsRecommendation

“When unlocked” • kSecAttrAccessibleWhenUnlocked

• No passcode = item is not accessible

“When unlocked and passcode set” • kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly

• No passcode = item is deleted

Page 110: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Storing a Secret

!

!

!

!

!

NSData* secret = [@"top secret" dataWithEncoding:NSUTF8StringEncoding]; NSDictionary *query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecValueData: secret}; !

OSStatus status = SecItemAdd((CFDictionaryRef)query, nil);

Page 111: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Storing a Secret

SecAccessControlRef sacObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault, kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, kSecAccessControlUserPresence, &error); !

NSData* secret = [@"top secret" dataWithEncoding:NSUTF8StringEncoding]; NSDictionary *query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecValueData: secret}; !

OSStatus status = SecItemAdd((CFDictionaryRef)query, nil);

Page 112: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Storing a Secret

SecAccessControlRef sacObject = SecAccessControlCreateWithFlags(kCFAllocatorDefault, kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, kSecAccessControlUserPresence, &error); !

NSData* secret = [@"top secret" dataWithEncoding:NSUTF8StringEncoding]; NSDictionary *query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecValueData: secret, (id)kSecAttrAccessControl: (id)sacObject}; !

OSStatus status = SecItemAdd((CFDictionaryRef)query, nil);

Page 113: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Reading a Secret

NSDictionary *query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecReturnData: @YES }; !

!

CFTypeRef dataTypeRef = NULL; OSStatus status = SecItemCopyMatching((CFDictionaryRef)query, &dataTypeRef);

Page 114: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Reading a Secret

NSDictionary *query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecReturnData: @YES, (id)kSecUseOperationPrompt: @"Authenticate to login to server" }; !

CFTypeRef dataTypeRef = NULL; OSStatus status = SecItemCopyMatching((CFDictionaryRef)query, &dataTypeRef);

Page 115: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Reading a Secret

NSDictionary *query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecReturnData: @YES, (id)kSecUseOperationPrompt: @"Authenticate to login to server" }; !

CFTypeRef dataTypeRef = NULL; OSStatus status = SecItemCopyMatching((CFDictionaryRef)query, &dataTypeRef);

Page 116: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering
Page 117: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Reading a Secret

NSDictionary *query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecReturnData: @YES, (id)kSecUseOperationPrompt: @"Authenticate to login to server" }; !

CFTypeRef dataTypeRef = NULL; OSStatus status = SecItemCopyMatching((CFDictionaryRef)query, &dataTypeRef);

Page 118: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Reading a Secret

NSDictionary *query = @{ (id)kSecClass: (id)kSecClassGenericPassword, (id)kSecAttrService: @"myservice", (id)kSecAttrAccount: @"account name here", (id)kSecReturnData: @YES, (id)kSecUseOperationPrompt: @"Authenticate to login to server" }; !

CFTypeRef dataTypeRef = NULL; OSStatus status = SecItemCopyMatching((CFDictionaryRef)query, &dataTypeRef);

dispatch_async(dispatch_get_global_queue(…), ^(void){ !

!

!

});

Page 119: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Consider

Page 120: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Consider

Only foreground applications

Page 121: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Consider

Only foreground applications

Any query may require authentication

Page 122: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Consider

Only foreground applications

Any query may require authentication• SecItemAdd, SecItemUpdate

Page 123: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Consider

Only foreground applications

Any query may require authentication• SecItemAdd, SecItemUpdate

• Broad queries—Multiple items

Page 124: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Consider

Only foreground applications

Any query may require authentication• SecItemAdd, SecItemUpdate

• Broad queries—Multiple items

• No authentication mode—kSecUseNoAuthenticationUI

Page 125: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Consider

Only foreground applications

Any query may require authentication• SecItemAdd, SecItemUpdate

• Broad queries—Multiple items

• No authentication mode—kSecUseNoAuthenticationUI

ACL protected items—No synchronization, no backup

Page 126: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication

Page 127: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Introduction

Credential collecting

LocalAuthentication for applications—Policy evaluation

Page 128: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Architecture

Application LocalAuthentication

Operating SystemUser Space

Page 129: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Architecture

Application LocalAuthentication

Touch ID

Credential Management

Operating SystemUser Space Secure Enclave

Page 130: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication Use CasesExamples

Page 131: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication Use CasesExamples

Verify that user is enrolled • Unlock features of application

• Parental check

Page 132: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication Use CasesExamples

Verify that user is enrolled • Unlock features of application

• Parental check

Extension to current application's authentication • First factor—Without passcode backup

• Second factor

Page 133: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication Security

Page 134: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication Security

Differs from Keychain

Page 135: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication Security

Differs from Keychain

• Trust the OS vs. trust the secure enclave

Page 136: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication Security

Differs from Keychain

• Trust the OS vs. trust the secure enclave

No direct access to secure enclave

Page 137: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication Security

Differs from Keychain

• Trust the OS vs. trust the secure enclave

No direct access to secure enclave

No access to registered fingers

Page 138: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication Security

Differs from Keychain

• Trust the OS vs. trust the secure enclave

No direct access to secure enclave

No access to registered fingers

No access to fingerprint image

Page 139: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication API

Page 140: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication API

Touch ID without keychain

Page 141: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication API

Touch ID without keychain• canEvaluatePolicy:

Page 142: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication API

Touch ID without keychain• canEvaluatePolicy:• evaluatePolicy:

Page 143: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication API

Touch ID without keychain• canEvaluatePolicy:• evaluatePolicy:

- Yes/no answer

Page 144: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication API

Touch ID without keychain• canEvaluatePolicy:• evaluatePolicy:

- Yes/no answer

• Policy—LAPolicyDeviceOwnerAuthenticationWithBiometrics

Page 145: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication API

Touch ID without keychain• canEvaluatePolicy:• evaluatePolicy:

- Yes/no answer

• Policy—LAPolicyDeviceOwnerAuthenticationWithBiometrics

- No passcode authentication

Page 146: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

LocalAuthentication API

Touch ID without keychain• canEvaluatePolicy:• evaluatePolicy:

- Yes/no answer

• Policy—LAPolicyDeviceOwnerAuthenticationWithBiometrics

- No passcode authentication

- Fallback to application’s own password entry UI

Page 147: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Remember

Page 148: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Remember

Only for foreground application

Page 149: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Remember

Only for foreground application

Policy evaluation may fail

Page 150: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Things to Remember

Only for foreground application

Policy evaluation may fail

Application fallback mechanism

Page 151: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Available

//To check that policy can succeed beaded on device type and configuration !

LAContext *context = [LAContext new]; !

NSError *error; if([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {     NSLog(@"Touch ID is available”); … } !

Page 152: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Available

//To check that policy can succeed beaded on device type and configuration !

LAContext *context = [LAContext new]; !

NSError *error; if([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {     NSLog(@"Touch ID is available”); … } !

Page 153: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Authentication

LAContext *context = [LAContext new]; [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"To access your photos"                   reply:^(BOOL success, NSError *authenticationError) {                   if (success) {                     NSLog(@"Authenticated using Touch ID.");                     } else {                     NSLog(@"Authentication failed");                     }                 }];

Page 154: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Authentication

LAContext *context = [LAContext new]; [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"To access your photos"                   reply:^(BOOL success, NSError *authenticationError) {                   if (success) {                     NSLog(@"Authenticated using Touch ID.");                     } else {                     NSLog(@"Authentication failed");                     }                 }];

Page 155: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Authentication

LAContext *context = [LAContext new]; [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"To access your photos"                   reply:^(BOOL success, NSError *authenticationError) {                   if (success) {                     NSLog(@"Authenticated using Touch ID.");                     } else {                     NSLog(@"Authentication failed");                     }                 }];

Page 156: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Authentication

LAContext *context = [LAContext new]; [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"To access your photos"                   reply:^(BOOL success, NSError *authenticationError) {                   if (success) {                     NSLog(@"Authenticated using Touch ID.");                     } else {                     NSLog(@"Authentication failed");                     }                 }];

Page 157: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering
Page 158: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Authentication

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"To access your photos"                   reply:^(BOOL success, NSError *authenticationError) {                   if (success) {                     NSLog(@"Authenticated using Touch ID.");                     } else {                     NSLog(@"Authentication failed");                     }                 }];

Page 159: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Authentication

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"To access your photos"                   reply:^(BOOL success, NSError *error) {                   if (success) {                     NSLog(@"Authenticated using Touch ID.");                     } else {                     if (error.code == kLAErrorUserFallback) { [self passcodeFallback]; } else if (error.code == kLAErrorUserCancel) { [self cancelLogin]; } else { [self reportError]; }                     }                 }];

Page 160: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Authentication

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"To access your photos"                   reply:^(BOOL success, NSError *error) {                   if (success) {                     NSLog(@"Authenticated using Touch ID.");                     } else {                     if (error.code == kLAErrorUserFallback) { [self passcodeFallback]; } else if (error.code == kLAErrorUserCancel) { [self cancelLogin]; } else { [self reportError]; }                     }                 }];

Page 161: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Authentication

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"To access your photos"                   reply:^(BOOL success, NSError *error) {                   if (success) {                     NSLog(@"Authenticated using Touch ID.");                     } else {                     if (error.code == kLAErrorUserFallback) { [self passcodeFallback]; } else if (error.code == kLAErrorUserCancel) { [self cancelLogin]; } else { [self reportError]; }                     }                 }];

Page 162: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Authentication

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"To access your photos"                   reply:^(BOOL success, NSError *error) {                   if (success) {                     NSLog(@"Authenticated using Touch ID.");                     } else {                     if (error.code == kLAErrorUserFallback) { [self passcodeFallback]; } else if (error.code == kLAErrorUserCancel) { [self cancelLogin]; } else { [self reportError]; }                     }                 }];

Page 163: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Touch ID Authentication

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"To access your photos"                   reply:^(BOOL success, NSError *error) {                   if (success) {                     NSLog(@"Authenticated using Touch ID.");                     } else {                     if (error.code == kLAErrorUserFallback) { [self passcodeFallback]; } else if (error.code == kLAErrorUserCancel) { [self cancelLogin]; } else { [self reportError]; }                     }                 }];

Page 164: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Demo

Page 165: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Summary

Page 166: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Summary

Keychain is here for your secrets

Page 167: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Summary

Keychain is here for your secrets

What is new?

Page 168: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Summary

Keychain is here for your secrets

What is new?

• New accessibility class

Page 169: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Summary

Keychain is here for your secrets

What is new?

• New accessibility class

- Items invalidated with no passcode

Page 170: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Summary

Keychain is here for your secrets

What is new?

• New accessibility class

- Items invalidated with no passcode

• Keychain item ACLs

Page 171: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Summary

Keychain is here for your secrets

What is new?

• New accessibility class

- Items invalidated with no passcode

• Keychain item ACLs

- Protection using Touch ID or passcode

Page 172: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Summary

Keychain is here for your secrets

What is new?

• New accessibility class

- Items invalidated with no passcode

• Keychain item ACLs

- Protection using Touch ID or passcode

• LocalAuthentication

Page 173: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Summary

Keychain is here for your secrets

What is new?

• New accessibility class

- Items invalidated with no passcode

• Keychain item ACLs

- Protection using Touch ID or passcode

• LocalAuthentication

- To start Touch ID authentication

Page 174: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

More Information

Paul Danbold Core OS Technologies Evangelist [email protected]

!

Documentation iOS Security White Paper http://images.apple.com/ipad/business/docs/iOS_Security_Feb14.pdf

Apple Developer Forums http://devforums.apple.com

Page 175: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Related Sessions

• User Privacy in iOS and OS X Nob Hill Thursday 2:00PM

Page 176: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering

Labs

• Security Lab Core OS Lab B Wednesday 11:30AM

• Security and Privacy Lab Core OS Lab B Thursday 3:15PM

Page 177: Keychain and Authentication with Touch ID...Keychain and Authentication with Touch ID Learn how you can integrate Touch ID Core OS Session 711 Wade Benson Core OS Security Engineering