Elevate the security of your UserDefaults with this lightweight wrapper that adds a layer of AES-256 encryption
SecureDefaults
is a wrapper over UserDefaults/NSUserDefaults
with an extra AES-256 encryption layer (key size has 256-bit length). It encludes:
The design and strength of all key lengths of the AES algorithm (i.e., 128, 192 and 256) are sufficient to protect classified information up to the SECRET level. TOP SECRET information will require use of either the 192 or 256 key lengths. The implementation of AES in products intended to protect national security systems and/or information must be reviewed and certified by NSA prior to their acquisition and use. [1]
It is pretty simple to use SecureDefaults
instead of UserDefaults/NSUserDefaults
. In most cases, it is the same thing that is UserDefaults
. You just need to set a password to make it work.
Replace the following code:
UserDefaults.standard
by this one:
let defaults = SecureDefaults.shared
// Ensures that a password has not already been set.
// Setting a password multiple times will cause the key to be regenerated,
// resulting in the loss of any previously encrypted data.
if !defaults.isKeyCreated {
defaults.password = NSUUID().uuidString // Or any password you wish
}
To use the app and keychain groups:
let defaults = SecureDefaults(suiteName: "app.group") // Sets a shared app group
defaults.keychainAccessGroup = "keychain.group" // Sets a shrared keychain group
if !defaults.isKeyCreated {
defaults.password = NSUUID().uuidString // Or any password you wish
}
SecureDefaults
is not able to catch that any particular data is encrypted, to obtain a raw value, use the following method:
public func rawObject(forKey defaultName: String) -> Any?
SecureDefaults
is available through CocoaPods. To install
it, simply add the following line to your Podfile:
pod 'SecureDefaults', '1.2.2' # Swift 5.0
Add this to Cartfile
github "vpeschenkov/SecureDefaults" == 1.2.2
$ carthage update
Create a Package.swift
file.
import PackageDescription
let package = Package(
name: "YourProject",
dependencies: [
.package(url: "https://github.com/vpeschenkov/SecureDefaults", "1.2.2")
],
targets: [
.target(name: "YourProject", dependencies: ["SecureDefaults"])
]
)
$ swift build
A big thanks to the following individuals:
Victor Peschenkov, [email protected]
SecureDefaults
is available under the MIT license. See the LICENSE file for more info.