SEC P-384 和 P-521 的 ECDH 在 Windows 10 / Windows Server 2016 TP3 中是否损坏?

信息安全 视窗 diffie-hellman 电子抄送
2021-08-29 06:21:28

更新:这里的概念证明代码,下面显示的控制台输出和所有涉及的证书都在这里

刚刚注意到ECDiffieHellmanCng.DeriveKeyMaterial(...)在 Windows 8.1 Enterprise (x64) 和 Windows 10 Prof (x64) 上的行为不同。

具体来说,当做类似的事情时

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

对于在 Windows 8.1 上顺利通过的几个 ECDH secp384 和 ECDH secp521 方案,Windows 10 上SymKey12SymKey21不同。

有任何想法吗?


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 ...   
3个回答

更新:已在 KB3093266 ( https://support.microsoft.com/en-us/kb/3093266 ) 中修复

在 PowerShell 窗口中运行以下命令以查看是否有它...

Get-HotFix -id KB3093266


消息来源证实这确实是一个错误。最初安装证书和私钥时,与解析 Windows 10 和 Windows Server 2016 Beta 中的 PFX 文件有关的问题。

该修复程序应该会在 2015 年 9 月的某个时间在安全更新中发布。老实说,我们很惊讶成为唯一真正在 Windows 上使用椭圆曲线加密的人,因为我们的报告似乎是原始报告。

没有添加评论的声誉..

..但是你能列出你所针对的 .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

我只想添加一些细节;我还偶然发现了 CNG 子系统中的这些阻塞更改。

在以下要点中,有两个文件;一个描述了一些适用于 Win7/Win8.1 但不适用于 Win10 的场景,一个描述了 Win10 上的一些解决方法 - 但不是如何获取加密上下文并获取 X.509 证书的基础 CNG 私钥:- /

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

微软的最后一次非官方更新是,这将在下周二的补丁中得到解决(如果我没记错的话,10 月 13 日)。