Xamarin.iOS 如何在安全飞地中创建随机密钥
How to Create random key in secure enclave in Xamarin.iOS
我正在尝试创建一个 RSA 密钥,用于在物理设备上的 Xamarin.iOS 应用程序中签署数据。下面是我的代码
using (var access = new SecAccessControl(SecAccessible.WhenUnlockedThisDeviceOnly, SecAccessControlCreateFlags.BiometryCurrentSet|SecAccessControlCreateFlags.PrivateKeyUsage))
{
var keyParameters = new SecKeyGenerationParameters
{
KeyType = SecKeyType.RSA,
KeySizeInBits = 2048,
Label = AppInfo.PackageName,
TokenID = SecTokenID.SecureEnclave,
PrivateKeyAttrs = new SecKeyParameters
{
IsPermanent = true,
ApplicationTag = NSData.FromString(AppInfo.PackageName, NSStringEncoding.UTF8),
AccessControl = access,
CanSign = true,
CanVerify = true
}
};
var privateKey = SecKey.CreateRandomKey(keyParameters.Dictionary, out NSError nsError);
var publicKey = privateKey.GetPublicKey();
NSData keyData = publicKey.GetExternalRepresentation();
}
上面的代码给出了下面的 NSError 和 null 私钥
{The operation couldn’t be completed. (OSStatus error -50 - Key generation failed, error -50)}.
上面的代码在没有 SecAccessControlCreateFlags.PrivateKeyUsage 和 TokenID = SecTokenID.SecureEnclave
的情况下工作正常
请告诉我如何解决这个问题。
Secure Enclave 不支持 RSA 密钥。它只能使用曲线 P256(又名 NIST P-256 或 secp256r1)创建椭圆曲线密钥。如果您想使用 RSA,您只能使用默认的安全实现(没有 Secure Enclave 标志)。
如果你坚持使用secure enclave,你就不得不使用上面提到的曲线。
我正在尝试创建一个 RSA 密钥,用于在物理设备上的 Xamarin.iOS 应用程序中签署数据。下面是我的代码
using (var access = new SecAccessControl(SecAccessible.WhenUnlockedThisDeviceOnly, SecAccessControlCreateFlags.BiometryCurrentSet|SecAccessControlCreateFlags.PrivateKeyUsage))
{
var keyParameters = new SecKeyGenerationParameters
{
KeyType = SecKeyType.RSA,
KeySizeInBits = 2048,
Label = AppInfo.PackageName,
TokenID = SecTokenID.SecureEnclave,
PrivateKeyAttrs = new SecKeyParameters
{
IsPermanent = true,
ApplicationTag = NSData.FromString(AppInfo.PackageName, NSStringEncoding.UTF8),
AccessControl = access,
CanSign = true,
CanVerify = true
}
};
var privateKey = SecKey.CreateRandomKey(keyParameters.Dictionary, out NSError nsError);
var publicKey = privateKey.GetPublicKey();
NSData keyData = publicKey.GetExternalRepresentation();
}
上面的代码给出了下面的 NSError 和 null 私钥
{The operation couldn’t be completed. (OSStatus error -50 - Key generation failed, error -50)}.
上面的代码在没有 SecAccessControlCreateFlags.PrivateKeyUsage 和 TokenID = SecTokenID.SecureEnclave
的情况下工作正常请告诉我如何解决这个问题。
Secure Enclave 不支持 RSA 密钥。它只能使用曲线 P256(又名 NIST P-256 或 secp256r1)创建椭圆曲线密钥。如果您想使用 RSA,您只能使用默认的安全实现(没有 Secure Enclave 标志)。
如果你坚持使用secure enclave,你就不得不使用上面提到的曲线。