windows - 加密难题/如何为远程协助票证创建 PassStub

标签 windows winapi cryptography specifications

我正在尝试为远程协助创建票证。其中一部分需要创建一个 PassStub 参数。截至文档:

http://msdn.microsoft.com/en-us/library/cc240115(PROT.10).aspx

PassStub:加密新手计算机的密码字符串。当远程 协助连接字符串作为文件通过电子邮件发送,以提供额外的安全性,一个 使用密码。<16>

在第 16 部分中,他们详细介绍了如何创建 PassStub。 在 Windows XP 和 Windows Server 2003 中,当使用密码时,使用 PROV_RSA_FULL 预定义加密提供程序,具有 MD5 哈希和 CALG_RC4,即 RC4 流加密算法。

因为 PassStub 在文件中看起来像这样: PassStub="LK#6Lh*gCmNDpj"

如果您想自己生成一个,请在 Vista 中运行 msra.exe 或在 WinXP 中运行远程协助工具。

文档说这个 stub 是函数 CryptEncrypt 的结果,其 key 从密码派生并使用 session ID 加密(这些也在票证文件中)。

问题是 CryptEncrypt 产生的二进制输出比 15 字节的 PassStub 大。此外,PassStub 没有以我以前见过的任何方式进行编码。

关于 PassStub 编码的一些有趣的事情。在进行统计分析后,第 3 个字符始终是以下字符之一:!#$&()+-=@^。唯一随处可见的符号是:*_。否则有效字符为 0-9 a-z A-Z。总共有 75 个有效字符,它们总是 15 个字节。

使用相同的密码运行 msra.exe 总是会生成不同的 PassStub,这表明它不是直接散列,而是像他们所说的那样包含 rasessionid。

我的另一个想法是它不是 CryptEncrypt 的直接结果,而是 MD5 哈希中的 rasessionid 的结果。在 MS-RA ( http://msdn.microsoft.com/en-us/library/cc240013(PROT.10).aspx ) 中。 “PassStub Novice”只是十六进制编码,看起来长度合适。问题是我不知道如何从任何散列到 PassStub 的样子。

最佳答案

我很好奇,你有没有:

  • 是否考虑使用 ISAFEncrypt::EncryptString(bstrEncryptionkey, bstrInputString) 作为直接使用 CryptEncrypt 完成所有肮脏工作的更高级别的替代方案? (tlbhlpsvc.exe 中)
  • 查看 c:\WINDOWS\pchealth\helpctr\Vendors\CN=Microsoft Corporation,L=Redmond,S=Washington,C=US\Remote Assistance\Escalation\Email\rcscreen9.htm (WinXP) 以查看当您选择将邀请另存为文件(高级) 选项并提供密码时发生了什么? (随意在 OnSave() 中添加 alert() 调用)

关于windows - 加密难题/如何为远程协助票证创建 PassStub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2569678/

相关文章:

windows - WSC(Windows 脚本组件)模型的安全性如何?

visual-studio - MSBuild "The windows SDK version 10.0.19041.0 was not found",即使已安装

c++ - COM 端口上的 Win32 重叠读取文件返回 ERROR_OPERATION_ABORTED

mysql - RedmineMySQL 未启动

windows - 无法在 Windows 上将 memcached 1.4.5 安装为服务

python - PKCS11 总是会以相同的顺序找到对象吗?

visual-studio - 为什么重启后我的 key 容器会丢失?

java - 从字符串创建 ECPublicKey

c++ - 在这种情况下我应该使用静态吗

multithreading - 当回调返回时,LeaveCriticalSection有什么意义?