如何安全地存储公钥/私钥

Jam*_*mes 5 security storage xamarin.ios

希望将公钥/私钥信息安全地存储在iOS设备上。我知道我想将其存储在KeyChain中,但是我不是100%不确定我需要填充哪种属性SecRecord。我打算做这样的事情:

// private key
SecKeyChain.Add(new SecRecord(SecKind.Key)
{
    Accessible = SecAccessible.AlwaysThisDeviceOnly,
    KeySizeInBits = 512,
    KeyClass = SecKeyClass.Private,
    CanSign = true,
    ValueData = privateKeyValue,
    Account = publicKeyValue
});
Run Code Online (Sandbox Code Playgroud)

它将存储私钥,然后对公钥采用类似的方法,用Account用户唯一的值(例如用户名)替换属性。但是,不确定这是否是正确的用法。

有没有人有一个很好的例子说明您将如何专门针对密钥执行此操作?

Jam*_*mes 4

决定采用以下方法:

// store public key
SecKeyChain.Add(new SecRecord(SecKind.Key)
{
    ApplicationLabel = userName,
    Accessible = SecAccessible.AlwaysThisDeviceOnly,
    KeySizeInBits = 512,
    KeyClass = SecKeyClass.Public,
    ValueData = NSData.FromString(publicKey)
});

// store private key
SecKeyChain.Add(new SecRecord(SecKind.Key)
{
    ApplicationLabel = publicKey,
    Accessible = SecAccessible.AlwaysThisDeviceOnly,
    KeySizeInBits = 512,
    KeyClass = SecKeyClass.Private,
    CanSign = true,
    ValueData = NSData.FromString(secretKey)
});
Run Code Online (Sandbox Code Playgroud)

这意味着每个公钥都映射到单个用户,每个私钥都映射到一个公钥,这允许我存储多个用户密钥(而不是仅存储当前登录的用户)。

似乎工作正常,但是,仍然不能 100% 确定这是做这种事情的正确方法,所以一些澄清会很好。