私はメッセージと署名を送信するための非常に限られたチャネルを持っており、示されています(https://crypto.stackexchange.com/questions/3075/asymmetric-algorithm-to-generate-compact-unique-messages-that -検証可能/)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を試しましたが、箱から出してすぐに同じ制限があるようです。
私のオプションは何ですか?実装の制限を解除する別の実装はありますか?