security - guardar - keeper
Cómo almacenar claves públicas/privadas de forma segura (1)
Buscando almacenar información de clave pública / privada de forma segura en un dispositivo iOS. Sé que quiero guardar esto en KeyChain, pero no estoy 100% seguro de qué tipo de atributos necesito llenar en el SecRecord
. Iba a hacer algo como:
// private key
SecKeyChain.Add(new SecRecord(SecKind.Key)
{
Accessible = SecAccessible.AlwaysThisDeviceOnly,
KeySizeInBits = 512,
KeyClass = SecKeyClass.Private,
CanSign = true,
ValueData = privateKeyValue,
Account = publicKeyValue
});
Que almacenaría la clave privada, luego siga un enfoque similar para la clave pública reemplazando el atributo Account
con un valor exclusivo para el usuario, por ejemplo, nombre de usuario. Sin embargo, no estoy seguro si esta es la forma correcta de usar esto.
¿Alguien tiene buenos ejemplos de cómo lo haría específicamente para las llaves?
Decidió ir con el siguiente enfoque:
// 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)
});
Esto significa que cada clave pública se asigna a un usuario individual y cada clave privada se asigna a una clave pública que me permite almacenar varias claves de usuario (en lugar de solo almacenar usuarios registrados actualmente).
Parece que funciona bien, sin embargo, todavía no está 100% seguro de que es la forma correcta de hacer este tipo de cosas, por lo que sería bueno aclarar algunas cosas.