我正在尝试了解下载档案时验证信任背后的关键高级详细信息。
这是我对如何做到的理解:
在软件开发人员方面:
从公共CA获取证书,例如verisign
生成存档的哈希值,然后使用证书中的私钥加密此字符串,这是“签名”
托管存档以供下载,另外还有一个单独的文件,其中包含证书中的公钥+步骤2中生成的签名。
在(用户)客户端:
下载并解压缩档案,下载签名+公钥文件
使用下载的公钥解密下载的签名,保存此值
迭代操作系统中嵌入的公共根证书。对于每个根证书,解密签名值并将结果与步骤5中的结果进行比较。
在6中找到匹配项后,您已验证作者的私钥是否来自您在步骤6中找到的CA的信任链。
问题:
答案 0 :(得分:1)
除了对Developer(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进行签名和验证(尽管您可能必须在其之外定义自己的链信任规则)类)。