Sto tentando di ottenere un segreto condiviso usando i metodi ECDH di BouncyCastle in C #, tuttavia sto ricevendo una chiave condivisa che è molto più breve dei 48 byte che mi aspetto che sia.
Ho una fonte esterna attendibile che mi fornisce (Lato A) con una chiave pubblica e una chiave privata, questi sono stati generati per P192, e sono di lunghezza 48 per il pubblico e 24 per il privato.
Inoltre, sto ricevendo una chiave pubblica per il lato B per calcolare il contratto con.
Mi aspetto che la chiave condivisa abbia una lunghezza di 48, ma finisca con la lunghezza 24.
string P192publicA = ""; // 48 length key
string P192privateA = ""; // 24 length key
string P192publicB = ""; // 48 length key
DerObjectIdentifier p192Der = Org.BouncyCastle.Asn1.Sec.SecObjectIdentifiers.SecP192r1;
ECKeyGenerationParameters ecparams = new ECKeyGenerationParameters(p192Der, new SecureRandom());
ECCurve curveP192 = ecparams.DomainParameters.Curve;
ECPrivateKeyParameters ecPrivateA = new ECPrivateKeyParameters("ECDSA", new BigInteger(P192privateA, 16), p192Der);
ECPublicKeyParameters ecPublicA = new ECPublicKeyParameters("ECDSA", curveP192.DecodePoint(Hex.Decode("04" + P192publicA)), p192Der);
ECPublicKeyParameters ecPublicB = new ECPublicKeyParameters("ECDSA", curveP192.DecodePoint(Hex.Decode("04" + P192publicB)), p192Der);
IBasicAgreement aKeyAgreeBasic = AgreementUtilities.GetBasicAgreement("ECDHC");
aKeyAgreeBasic.Init(ecPrivateA);
BigInteger k = aKeyAgreeBasic.CalculateAgreement(ecPublicB);
Il mio risultato in esadecimale è solo di lunghezza 24 mentre mi aspettavo 48.
C'è qualcosa di sbagliato nella mia comprensione del meccanismo dell'accordo chiave? Non ero sicuro della decodifica di un punto, ho visto negli esempi saltellanti aggiungere "04" prima di decodificare un punto e ogni altro prefisso che ho provato ha generato un'eccezione.
Qualche consiglio sarà molto apprezzato!