Sto cercando di refactoring alcuni codici lato client da BouncyCastle a Microsoft Cng. Ho capito come convertire il formato chiave (blob dei tasti ECC) tra di loro, ma non sono riuscito a calcolare lo stesso segreto.
Attualmente, il client utilizza Org.BouncyCastle.Crypto.Agreement.ECDHBasicAgreement.CalculateAgreement()
per calcolare il segreto condiviso. La lunghezza del segreto condiviso dipende dalla curva (ad esempio, la lunghezza dei segreti condivisi per SecP224k1
è 28 byte).
Microsoft Cng ( System.Security.Cryptography.ECDiffieHellman
) fornisce diversi metodi: DeriveKeyMaterial
, DeriveKeyFromHash
. Tuttavia, nessuno di questi restituisce un risultato di 28 byte. DeriveKeyFromHash restituisce byte di 16/20/32/48/64 dipende da HashAlgorithm e DeriveKeyMaterial restituisce gli stessi 32 byte di DeriveKeyFromHash (SHA256).
Modifica: DeriveKey di Microsoft Cng restituisce Hashed secret.
Come si calcola lo stesso segreto usando Microsoft Cng?