私は、Firefoxに存在する新しいPush APIと統合するプロジェクトに取り組んでおり、W3C標準として開発中です。ECDiffieHellmanP256での派生キー
この部分は、データを暗号化しています。 NETのBASE64に変換するときに、サーバは、この例(var key = subscription.getKey('p256dh');
を使用してJSに生成される)デフィーヘルマンP256曲線
を受け取る
BOAiqZO6ucAzDlZKKhF1aLjNpU8 + R2Pfsz4bQzNpV145D + agNxvLqyu5Q2tLalK2w31RpoDHE8Sipo0m2jiX4WA =
ありますしかし、私は派生したマテリアルを生成する問題に遭遇しました。
var key1 = Convert.FromBase64String("<stringFromAbove>").ToList() // You can criticize my .toList inefficiencies later
// .NET doesn't like the key without these prefixes. See here
// http://stackoverflow.com/questions/24251336/import-a-public-key-from-somewhere-else-to-cngkey
// I know the bytes don't match that post, but that is because the key type is different between their example and mine.
var keyType = new byte[] { 0x45, 0x43, 0x4B, 0x31 };
var keyLength = new byte[] { 0x20, 0x00, 0x00, 0x00 };
key1.RemoveAt(0);
key1 = keyType.Concat(keyLength).Concat(key1).ToList();
ECDiffieHellmanCng a = new ECDiffieHellmanCng();
a.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash;
// If I set this as CngAlgorithm.Sha256 it works, but that's not what Firefox gives me.
a.HashAlgorithm = CngAlgorithm.ECDiffieHellmanP256;
a.KeySize = 256; // It complains if I don't add this since keys are different lengths.
// Now time to actually import the key
CngKey k = CngKey.Import(key1.ToArray(), CngKeyBlobFormat.EccPublicBlob); // Works successfully
byte[] derivedMaterial = a.DeriveKeyMaterial(k); // Exception Here
System.Security.Cryptography.CryptographicException:要求された操作はサポートされていません。
正しく理解していないこと(または、より悲しい側で、正しく実装されていないものは何か?)代替案として
、誰かが私はを通じて作業を継続するために必要な方法をあまりにも動作すると思います.NETへのポートこのNode JS libraryをする(私はそれが届くの少しだと思う)
更新
説明できる場合問題の残りの部分とではないが、暗号化により、最大保有ので、私は.NET側のさらなる発展を可能にするためにNode.jsのラッパーを使用すること。ノードコードは単にローカル公開鍵とSharedシークレットを生成し、それらの値を私に返します。私はまだノードラッパーなしでこれを動作させる必要があります。
このテストでは、残りのコード(ここには含まれていません)が動作することを確認できます。したがって、上記のコードに問題があることは間違いありません(HashAlgorithmが
どのOSとフレームワークのバージョンで作業していますか? –
Windowsで実行しています。 .NET Framework 4.6 –
あなたはこれを見ましたか?http://stackoverflow.com/questions/31330363/does-ecdiffiehellmancng-in-net-have-a-key-derivation-function-that-implements-n –