2016-09-20 49 views
0

我想了解下载归档时验证信任背后的关键高级别详细信息。验证已签名归档的X.509 CoT的方法

这是我如何可以做到理解:

在软件开发方面:

  1. 获取从公共CA证书VeriSign这样

  2. 生成然后使用您的证书中的私钥对该字符串进行加密,这是“签名”

  3. 主机存档下载,与包含证书+公共密钥在步骤2

产生在(用户)客户端的签名一个单独的文件一起:

  • 下载并解压存档,下载签名+公钥文件

  • 使用下载的公钥解密下载签名,保存该值

  • 遍历操作系统中嵌入的公共根证书。对于每个根证书,解密签名值并将结果与​​步骤5中的结果进行比较。

  • 一旦在6中找到匹配项,就证实作者的私钥从CA的信任链下降其中在第6步

    • 发现匹配的这一切都假定软件开发者使用,我们已经在我们的客户操作系统的内置根证书的CA.
  • 问题:

    1. 系上述方法的声音,还是我俯瞰关键细节?
    2. 既然你控制一个空白的石板客户,如果我想的公共密钥+签名+归档到一个单一的文件,我可以让客户了解和分析结合起来,有没有得到广泛支持的格式,以利用组织这个数据?

    回答

    1

    除了在开发者(2)(描述RSA签名如何工作,但ECDSA非常适合这项任务)方面有点过于具体,这听起来更像是Authenticode减去一些EKU限制。这导致我问“为什么不使用Authenticode签名?”。

    我会考虑的结构是PKCS#7/CMS SignedData格式。它可以从多个证书(签字描述多个签名ECDSA-brainpoolP320t1-SHA-3-512的人谁可以读取它,以及RSA-2048-SHA-2-256对于我们大多数人,和DSA-1024-SHA- 1,任何人其计算机建于2001年)。

    对于数据文件,您可以正常使用SignedData,对于可执行文件,由于存在语义部分(因此您必须将其松散到某处并使用间接签名),因此更难。

    如果您使用.NET进行签名,PKCS#7/CMS SignedData可用于通过System.Security.Cryptography.Pkcs.SignedCms进行签名和验证(尽管您可能必须定义自己的链信任规则那个班级)。

    +0

    感谢您的回复,是不是特定于Microsoft操作系统Authenticode?客户端是运行Linux的MIPS拱板。 – Hoofamon

    +0

    那么,这将是一个很好的理由不使用Authenticode :)。签名数据格式可能仍然是赢家。 – bartonjs