When considering a multilayer strategy for protecting user data, you should always start with the data itself. Encryption protects data whether it is at rest, in transit, or in use. In this course, you will learn about the iOS file system, how and where data can be saved, and how to protect that data wherever it is found. You will examine a common mistake developers make when handling user credentials. You will then learn how to leverage built-in iOS functionality to safely store and retrieve credentials. You will learn how to validate user credentials in your app, ensuring that at an app level they are difficult to compromise.
iOS Storage OverviewDuration: 8:20
In this segment, we examine the iOS directory structure, including how an app's sandbox relates to the rest of the file system.
Activity: Exploring the iOS File SystemDuration: 8:32
In this activity, we examine and browse the file system of an actual jailbroken iPhone. We exploit a common vulnerability to make an unauthorized network connection, hunting for user files we can steal from the device.
Activity: Preparing For EncryptionDuration: 4:02
In this activity, we use CocoaPods to install a popular third-party cryptographic library into our app.
Core DataDuration: 11:55
In this segment, we study the classic iOS storage system, Core Data, including its architecture and components, and how to use it in your app.
Data PersistenceDuration: 13:23
In this segment, we learn what data persistence is, what constitutes sensitive data and how to use Core Data with SQLite to store your data locally.
Data Persistence, Part 2Duration: 14:11
In this segment, we learn how to use Keychain to safely store secrets in your local device. We also learn various ways to save data to the device's local disk.
Activity: Saving a Username and PasswordDuration: 12:34
In this activity, we use an unsafe but commonly used mechanism to store user credentials.
Activity: Verifying a Username and PasswordDuration: 12:26
In this activity, we validate that we can retrieve the username and password that we previously saved.
Activity: Verifying a Username and Password, Part 2Duration: 9:07
In this activity, we continue to validate that our code can retrieve a saved credential.
Encryption OverviewDuration: 14:06
In this segment, we learn cryptography concepts. These include symmetric, asymmetric and hashing algorithms.
Encryption Overview, Part 2Duration: 8:49
In this segment, we learn about the public-key infrastructure and what digital certificates are. We also learn how to use various encryption libraries to encrypt our data.
In this segment, we learn how to implement Keychain in Swift, including how to share Keychain data across multiple devices.
Activity: Preparing to Use KeychainDuration: 9:07
In this activity, we prove that our previous method for storing a username and password is completely insecure. We the use CocoaPods to install a popular third-party library "wrapper" in preparation to use Keychain.
Activity: Save User Secrets in KeychainDuration: 8:49
In this activity, securely store a username and password in Keychain and prove that the credentials can no longer be found in a cleartext file.
Hashing and iOSDuration: 11:58
In this segment, we learn various ways to implement hashing in Swift, including using a random number generator to salt the hash.
Activity: Generating Random ValuesDuration: 8:49
In this activity, we practice using Swift's random(in:) function to create random values and shuffle arrays and sequences.
Activity: Hashing PasswordsDuration: 8:49
In this activity, we revisit a previous app to understand how to hash a password.
Activity: Adding Salt to a Password HashDuration: 8:49
In this activity, we continue with the same app to add randomization (salt) to the password hash.