SecureDefaults 1.2.2

SecureDefaults 1.2.2

Victor PeschenkovViktor Peschenkov 维护。



SecureDefaults for iOS, macOS

Build Status Platform Version Carthage compatible Swift Package Manager compatible License

要求使用方法安装贡献致谢贡献作者许可证

SecureDefaultsUserDefaults/NSUserDefaults的包装,并额外添加了AES-256加密层(密钥长度为256位)。它包含

  • AES-256加密
  • PBKDF2密码拉伸
  • 加密后哈希HMAC
  • 密码盐
  • 随机IV

AES算法所有密钥长度(即,128、192和256)的设计和强度足以保护机密级别的机密信息。绝密信息将需要使用192或256位密钥长度。保护国家安全系统和信息的产品中AES的实现必须在采购和使用之前由国家安全局审查和认证。[1]

动机

  • 避免以下行为https://stackoverflow.com/questions/4747404/delete-keychain-items-when-an-app-is-uninstalled。(是的,仍然有一个密钥,但没有数据)
  • 避免额外思考哪里是存储特定值的好地方。(在Keychain和UserDefaults之间进行选择)
  • 改进iOS平台上的安全性状况。我看到很多应用程序都没有使用Keychain。他们将所有敏感数据都存储在UserDefaults中(访问令牌、密码等)... 至少,这可以帮助使这些应用程序更安全,而不会造成太多痛苦。也许,如果这个框架几乎和UserDefaults一样,开发者们可能会开始使用它?
  • 将许多简单的密钥存储在Keychain中看起来并不是很好。

需求

  • iOS 8.0+
  • macOS 10.11+
  • Xcode 10.1+
  • Swift 4.2+

使用方法

使用 SecureDefaults 替代 UserDefaults/NSUserDefaults 非常简单。在大多数情况下,它与 UserDefaults 做的是同一事情。您只需要设置一个密码来使其工作。

替换以下代码

UserDefaults.standard

为以下代码

let defaults = SecureDefaults.shared
// Ensures that a password was not set before. Otherwise, if 
// you set a password one more time, it will re-generate a key. 
// That means that we lose old data as well.
if !defaults.isKeyCreated {
    defaults.password = NSUUID().uuidString // Or any password you wish
}

以使用应用程序和密钥库组

let defaults = SecureDefaults(suitName: "app.group") // Set a shared app group
defaults.keychainAccessGroup = "keychain.group" // Set a shrared keychain group 
if !defaults.isKeyCreated {
    defaults.password = NSUUID().uuidString // Or any password you wish
}

由于 SecureDefaults 无法捕获任何特定的数据是否加密,因此要获取原始值,请使用以下方法

public func rawObject(forKey defaultName: String) -> Any?

安装

CocoaPods

SecureDefaults 可以通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中

pod 'SecureDefaults', '1.0.7' # Swift 5.0
pod 'SecureDefaults', '1.0.0' # Swift 4.2

Carthage

将其添加到 Cartfile

github "vpeschenkov/SecureDefaults" == 1.0.7 # Swift 5.0
github "vpeschenkov/SecureDefaults" == 1.0.0 # Swift 4.2
$ carthage update

Swift Package Manager

创建一个 Package.swift 文件。

// swift-tools-version:4.2

import PackageDescription

let package = Package(
  name: "YourProject",
  dependencies: [
    .package(url: "https://github.com/vpeschenkov/SecureDefaults", "1.0.7")
  ],
  targets: [
    .target(name: "YourProject", dependencies: ["SecureDefaults"])
  ]
)
$ swift build

贡献

  • 如果您需要帮助或想 提出一般问题,请创建一个问题。
  • 如果您发现了一个 bug,请创建一个问题。
  • 如果您有 功能请求,请创建一个问题。
  • 如果您 想贡献力量,提交一个 pull request。

致谢

感谢以下人员

作者

Victor Peschenkov, [email protected]

许可证

SecureDefaults 基于 MIT 许可证可用。查看 LICENSE 文件获取更多信息。