web-dev-qa-db-ja.com

Windows 10 / Windows Server 2016 TP3でSEC P-384およびP-521のECDHは壊れていますか?

更新:概念実証コード here 、以下に示すコンソール出力、および関連するすべての証明書は here です。

ECDiffieHellmanCng.DeriveKeyMaterial(...) は、Windows 8.1 Enterprise(x64)とWindows 10 Prof(x64)では動作が異なることに注意してください。

具体的には、次のようなことをするとき

byte[] SymKey12 = party1.DeriveKeyMaterial(party2);
byte[] SymKey21 = party2.DeriveKeyMaterial(party1);

SymKey12SymKey21の値は、Windows 8.1では問題なく通過したいくつかのECDH secp384およびECDH secp521シナリオで、Windows 10では異なるです。

何かアイデアはありますか?


Windows Server 2016 Tech Preview 3(バージョンNT 10.0.10514.0)およびWindows 10出力(バージョンNT 10.0.10240.0)

'Test ECC Alice secp521r1 SS' <=> 'Test ECC Bob secp521r1 SS'
> FAILURE < ECDH Keys are different!
SymKey12 = 22-46-6B-15-0F-9B-65-B0-D6-7D-AA-0E-C5-8A-7F-F3-18-1F-5F-62-88-26-90-67-DC-99-1B-98-73-3B-58-FF
SymKey21 = FD-C3-24-27-4C-4C-56-01-62-1E-B2-AE-B1-F6-68-64-61-72-EB-2E-6D-F4-30-21-F1-8A-73-C6-85-38-25-FA
------------------------------
'Test ECC Alice secp384r1 SS' <=> 'Test ECC Bob secp384r1 SS'
> FAILURE < ECDH Keys are different!
SymKey12 = F3-55-B0-72-49-DA-A5-6B-D7-3E-B7-F5-87-E7-4B-D1-20-A1-6E-67-EE-FF-C2-A9-12-E4-B0-20-46-F7-A5-FA
SymKey21 = 8C-63-5E-21-AC-BB-C1-AB-17-73-E2-E9-4D-95-20-07-6A-60-69-B1-E6-3B-18-EA-B6-56-FF-38-9F-F8-46-2F
------------------------------
'Test ECC Alice secp256r1 SS' <=> 'Test ECC Bob secp256r1 SS'
Success, ECDH Keys agree
------------------------------
'Alice secp521 test cert' <=> 'Bob secp521 test cert'
> FAILURE < ECDH Keys are different!
SymKey12 = B3-90-1C-1B-B0-66-BB-D8-A2-46-37-A9-E4-84-1F-FE-B8-ED-14-17-A8-D8-0C-EB-20-A0-98-5F-3A-85-73-3D
SymKey21 = 44-62-AD-3F-DA-D4-7E-17-49-05-C4-22-93-DD-36-B7-0D-28-47-93-E5-D4-63-03-00-BC-F8-99-DF-BA-A3-92
------------------------------
'Alice secp384 test cert' <=> 'Bob secp384 test cert'
Success, ECDH Keys agree
------------------------------
'Alice secp256 test cert' <=> 'Bob secp256 test cert'
Success, ECDH Keys agree
------------------------------
Press any key to exit ...

Windows 8出力(バージョンNT 6.3.9600.0)

'Test ECC Alice secp521r1 SS' <=> 'Test ECC Bob secp521r1 SS'
Success, ECDH Keys agree
------------------------------
'Test ECC Alice secp384r1 SS' <=> 'Test ECC Bob secp384r1 SS'
Success, ECDH Keys agree
------------------------------
'Test ECC Alice secp256r1 SS' <=> 'Test ECC Bob secp256r1 SS'
Success, ECDH Keys agree
------------------------------
'Alice secp521 test cert' <=> 'Bob secp521 test cert'
Success, ECDH Keys agree
------------------------------
'Alice secp384 test cert' <=> 'Bob secp384 test cert'
Success, ECDH Keys agree
------------------------------
'Alice secp256 test cert' <=> 'Bob secp256 test cert'
Success, ECDH Keys agree
------------------------------
Press any key to exit ...   
10
DeepSpace101

更新:KB3093266で修正( https://support.Microsoft.com/en-us/kb/3093266

PowerShellウィンドウで次のコマンドを実行して、それがあるかどうかを確認します...

Get-HotFix -id KB3093266


ソースは、これが実際にバグであることを確認しています。証明書と秘密キーが最初にインストールされたときのWindows 10およびWindows Server 2016 BetaでのPFXファイルの解析に関連する問題。

この修正は、2015年9月のセキュリティアップデートに含まれる予定です。正直に言って、Windowsで楕円曲線暗号を実際に使用しているのは、私たちの報告が元のレポートのようであるので、私たちはかなり驚いています。

3
DeepSpace101

詳細を追加したいだけです。また、CNGサブシステムのこれらのブロッキングの変更に遭遇しました。

次のGistには、2つのファイルがあります。 Win7/Win8.1では機能するが、Win10では機能しないいくつかのシナリオを説明するものと、Win10でいくつかの回避策を説明するもの-ただし、暗号コンテキストを取得してX.509証明書の基になるCNG秘密キーを取得する方法は説明しません:- /

https://Gist.github.com/larsw/2c45147a242ceb079f5d

Microsoftからの最後の非公式アップデートは、これが次の火曜日に修正されることです(私が正しく数えた場合、10月13日)。

0
larsw

コメントを追加するという評判はありません。

..しかし、対象としている.NETのバージョンをリストできますか? .NET Framework 4.6を対象とする(およびアプリ構成ファイルを強制する)ときに、Windows 8.1でも同じ結果が得られますか?

異なるバージョンのWindowsには、異なるバージョンの.NETが付属していました: https://en.wikipedia.org/wiki/.NET_Framework#Versions

また、.NET 4のみを備えたマシンが.NET 4.5以降をターゲットとするアプリケーションを引き続き実行しようとすることも最近知りました

アプリが構築された.NET Frameworkのバージョンが存在せず、構成ファイルで要素のバージョンが指定されていない場合、アプリはユーザーの.NET Frameworkの最新バージョンで実行を試みますコンピューター。

https://msdn.Microsoft.com/en-us/library/jj152935%28v=vs.110%29.aspx

0
Matthew1471