私はBouncyCastleで公開鍵を生成しようとしています(私はUnityを使用しており、ECDiffieHellmanCngへのアクセス権を持っていないため) ECDiffieHellmanCngをキー処理に使用しています。 サーバーは、鍵の長さが小さいため、鍵が拒否されています。 ECDiffieHellmanCngは、Bouncy castleが生成するものに比べてサイズがはるかに大きい公開鍵を生成します。なぜBouncyCastleが.NetのECDiffieHellmanCngより小さい鍵を生成するのですか
弾力のある城に大きな鍵を生成する方法はありますか?
私はキービットサイズを変更しようとしましたが、エラーが発生しました:InvalidParameterException:不明なキーサイズです。
はBouncyCastleが生成するキー:ECDiffieHellmanCngが生成する
3059301306072A8648CE3D020106082A8648CE3D03010703420004272F71C1D8B3DC0A7FCB1E9650EEF64EA8F639BEC97D49F8848455C2F5869F7324332D188129C84727F834EE7EE7D8EB7DFC8D40CD4ED219A4FBCEF6C15200F3
キー:
45434B35420000000055CC8665A66A7CDF2E9BF7C69A25B322C72CDBDB1EA8F348050B0A7CF32F9AAD8
const string Algorithm = "ECDH"; const int KeyBitSize = 256; const int NonceBitSize = 128; const int MacBitSize = 128; const int DefaultPrimeProbability = 30; IAsymmetricCipherKeyPairGenerator aliceKeyGen = GeneratorUtilities.GetKeyPairGenerator(Algorithm); DHParametersGenerator aliceGenerator = new DHParametersGenerator(); aliceGenerator.Init(KeyBitSize, DefaultPrimeProbability, new SecureRandom()); DHParameters aliceParameters = aliceGenerator.GenerateParameters(); KeyGenerationParameters aliceKGP = new DHKeyGenerationParameters(new SecureRandom(), aliceParameters); aliceKeyGen.Init(aliceKGP); AsymmetricCipherKeyPair aliceKeyPair = aliceKeyGen.GenerateKeyPair(); IBasicAgreement aliceKeyAgree = AgreementUtilities.GetBasicAgreement(Algorithm); aliceKeyAgree.Init(aliceKeyPair.Private); SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(aliceKeyPair.Public); byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded(); string serializedPublic = AsString(serializedPublicBytes); public static string AsString(byte[] bytes, bool keepDashes = false) { string hex = BitConverter.ToString(bytes); return (keepDashes ? hex : hex.Replace("-", "")); }
は、私も私の大きな鍵を与えMentalis.org DHライブラリを、試してみましたが、それでもただ髪が短すぎる:
90EA513583367977D5157B2F7FBF55661C9AE2DBAF09B1DC1EA8F193688C3C09501BEE326867ABCB41CA1029F66AF888649F0A6C0674D19670CF32461BA7B3867C1623D68829A7A9A7F1CFC6F5DB99E13C8D960AEF6F5CDAB5B3B62ED6CBEC7222C9F
はここで弾む城の鍵を生成するコードのthatsです。// create a new DH instance
DiffieHellman dh1 = new DiffieHellmanManaged();
// generate the public key of the first DH instance
byte[] ke1 = dh1.CreateKeyExchange();
string publicKeyString = AsString(ke1);
mentalis.orgライブラリからキー:
5F4542F9A8F5636ECCBBAC38238C97ABE757B8F65E25B181BCF41C58985E699EFD6B9606B99F7074717E83F7AC1B5E97DFF6DBA94876F74645F25F0D7FAA1528898C1BD0BB568DF15A98724093766B213769893A05B47E40410B0F395C834F68F57B2EE01852895D912C1D56675A7D8C5367B5E06DE08AAA18CBB4C69F3AE142
それほどサイズではなくフォーマットについてです。 Bouncycastleは公開鍵の標準化されたエンコードを返しますが、ECDiffieHellmanCngはMicrosoft独自のブロブです。Mentalisの結果は、ECDHの価値ではありません。 –
Hmmmm、ECDiffieHellmanCng以外のものを使用してMicrosoft独自のBLOBを取得するにはどうしてですか?私はそれにアクセスできない。 – Snipe3000
ああ、サイズの違いの一部はCNGのNIST P-521キーとBouncyCastleのNIST P-256キーです。 (0x354B4345 == BCRYPT_ECDH_PUBLIC_P521_MAGIC) – bartonjs