NSSecureCoding与Keychain

时间:2018-04-06 13:21:33

标签: swift security keychain banking nssecurecoding

我理解使用' NSSecureCoding'一个人可以安全地将数据存储到磁盘,类似于钥匙串作为安全存储信息的地方。

我也理解,钥匙串具有在同一提供商的应用程序之间共享的优势。如果人们会忽略钥匙串共享功能,那么可以说,与NSSecureCoding相比,将数据存储在钥匙串中同样安全吗?

我有一个用户对象

class User: NSObject, NSSecureCoding {

private enum CodingKeys: String, CodingKey {
    case test
}

public static var supportsSecureCoding: Bool {

    return true
}

override init() {}

var test: String = "teeees"


func encode(with aCoder: NSCoder) {

    aCoder.encode(self.test as NSString)
}

required init?(coder aDecoder: NSCoder) {

    test = aDecoder.decodeObject(of: NSString.self, forKey: CodingKeys.test.rawValue)! as String
}
}

我存档

let user = User()
    let data = NSKeyedArchiver.archivedData(withRootObject: user)

    try! data.write(to: DocumentHelper.cashURLForID(id: "TTYYUU"))

TTYYUU的内容是:

6270 6c69 7374 3030 d401 0203 0405 0615 1658 2476 6572 7369 6f6e 5824 6f62 6a65 6374 7359 2461 7263 6869 7665 7254 2474 6f70 1200 0186 a0a4 0708 0d0e 5524 6e75 6c6c d209 0a0b 0c52 2430 5624 636c 6173 7380 0280 0356 7465 6565 6573 d20f 1011 125a 2463 6c61 7373 6e61 6d65 5824 636c 6173 7365 735f 1011 5365 6375 7265 436f 6469 6e67 2e55 7365 72a2 1314 5f10 1153 6563 7572 6543 6f64 696e 672e 5573 6572 584e 534f 626a 6563 745f 100f 4e53 4b65 7965 6441 7263 6869 7665 72d1 1718 5472 6f6f 7480 0108 111a 232d 3237 3c42 474a 5153 555c 616c 7589 8ca0 a9bb bec3 0000 0000 0000 0101 0000 0000 0000 0019 0000 0000 0000 0000 0000 0000 0000 00c5

有人可以展示解码原始信息的方式吗,它说格式是'NSPropertyList二进制格式_v1_0',可以说明如何提取' teeees'从这个二进制文件?

1 个答案:

答案 0 :(得分:2)

课程不安全"因为它包含了这个文本的名称。没有详细描述的安全性如何,为什么(例如,加密,完整性保护,......)及其限制是无用的。文档明确声明它只是安全的against object substitution attacks

这完全意味着更换文件或更改内容并不容易。

在任何地方都没有说过它可以用于将数据安全地存储到磁盘上。因此,与Keychain相比,NSSecureCoding用于完全不同的用例,Keychain专门为一个或多个用户提供密码,密钥,证书和注释的安全存储。&#34;。< / p>

编辑:查看您添加的编码数据示例,它包含许多纯文本数据,包括teeees。您可以使用任何十六进制编辑器或strings命令查看它。