Voglio implementare un accordo chiave ECC con una curva Brainpool brainpoolP512r1 o brainpoolP512t1.
Non sono chiaro sul valore di semi-usi da usare (e come). In questo documento link sono menzionati due valori di seme.
E RFC link
5.1 Generazione di numeri primi
6636920D871574E69A458FEA3F4933D7E0D95748 for ECC 512
5.2 Generazione di curve pseudo-casuali
02AC60ACC93ED874422A52ECB238FEEE5AB6AD for ECC 512
- Quindi quale seme dovrei usare nel costruttore di ECDomainParameters?
- Il valore di seme per la curva a spirale è lo stesso? Trovo solo i valori iniziali per brainpoolP512r1 e non per brainpoolP512t1
-
L'implementazione è rigida?
// ECC 512 = AES 256 = RSA 15360 var ecP = TeleTrusTNamedCurves.GetByName("brainpoolp512t1"); // because ecP.GetSeed() is null !? // see spec "ECC Brainpool Standard Curves and Curve Generation" site 7 // 5.1 Generation of prime numbers var seed_p_512PrimeNumbers = StringToByteArray("6636920D871574E69A458FEA3F4933D7E0D95748"); // 5.2 Generation of pseudo-random curves var seed_p_512PseudoRandomCurves = StringToByteArray("02AC60ACC93ED874422A52ECB238FEEE5AB6AD"); var ecSpec = new ECDomainParameters(ecP.Curve, ecP.G, ecP.N, ecP.H, seed_p_512PseudoRandomCurves); // Alice var enc = new UTF8Encoding(); var secretPlain = "This is a secret."; var secretPlainBytes = enc.GetBytes(secretPlain); IAsymmetricCipherKeyPairGenerator aliceGenerator = GeneratorUtilities.GetKeyPairGenerator("ECDH"); aliceGenerator.Init(new ECKeyGenerationParameters(ecSpec, new SecureRandom())); AsymmetricCipherKeyPair aliceKeyPair = aliceGenerator.GenerateKeyPair(); IBasicAgreement aliceBasicAgreement = AgreementUtilities.GetBasicAgreement("ECDH"); aliceBasicAgreement.Init(aliceKeyPair.Private); // Bob IAsymmetricCipherKeyPairGenerator bobGenerator = GeneratorUtilities.GetKeyPairGenerator("ECDH"); bobGenerator.Init(new ECKeyGenerationParameters(ecSpec, new SecureRandom())); AsymmetricCipherKeyPair bobKeyPair = bobGenerator.GenerateKeyPair(); IBasicAgreement bobBasicAgreement = AgreementUtilities.GetBasicAgreement("ECDH"); bobBasicAgreement.Init(bobKeyPair.Private); // generate shared key var k1 = bobBasicAgreement.CalculateAgreement(aliceKeyPair.Public).ToByteArray(); var k2 = aliceBasicAgreement.CalculateAgreement(bobKeyPair.Public).ToByteArray(); for (int i = 0; i < k1.Length; i++) { if (k1[i] != k2[i]) { throw new Exception("Secrets are not equal."); } }
Grazie mille!
Daniel