我有一个非常有限的渠道来发送消息和签名,并且已被指示(在https://crypto.stackexchange.com/questions/3075/asymmetric-algorithm-to-generate-compact-unique-messages-that -can-be-validated/ ) ECDSA 提供了最紧凑的非对称算法。
我很容易做到这一点:
void Main()
{
byte[] publickey;
byte[] data;
byte[] signature;
using (var dsa = new ECDsaCng(256))
{
dsa.HashAlgorithm = CngAlgorithm.Sha256;
publickey = dsa.Key.Export(CngKeyBlobFormat.EccPublicBlob);
data = new byte[] { 21, 5, 8, 12, 207 };
signature = dsa.SignData(data);
}
Console.WriteLine(signature.Length);
Console.WriteLine(Convert.ToBase64String(signature));
using (var dsa = new ECDsaCng(CngKey.Import(publickey, CngKeyBlobFormat.EccPublicBlob)))
{
dsa.HashAlgorithm = CngAlgorithm.Sha256;
if (dsa.VerifyData(data, signature))
Console.WriteLine("Data is good");
else
Console.WriteLine("Data is bad");
}
}
但是我希望能够牺牲一些强度并使用小于 BCL 提供的最小 256 位密钥大小,并且我还没有找到可以满足我需要的实现。
我已经尝试过 BouncyCastle,而且它似乎开箱即用也有同样的限制。
我有哪些选择?是否有另一种实现可以解除实现限制?