在下载档案时,我试图了解验证信任的关键高级细节。
这是我对如何做到这一点的理解:
软件开发人员端的
(用户)客户端上的
问题:
发布于 2016-09-21 11:33:39
软件开发人员端的
从公共CA (如verisign )获得证书
是的,您可以使用CA,但也可以承载您自己的CA。你当然需要你的客户信任这个CA。
然而,从长远来看,获得证书可能更经济。
生成存档的散列,然后使用证书中的私钥加密此字符串,这是“签名”。
签名生成通常包含哈希操作。哈希算法是签名生成算法的一个参数。哈希不需要加密,例如,ECDSA不用于加密。
有时使用哈希树代替--数据上的散列不是直接签名的,但哈希包含在也包含元数据的结构中(例如,数据的MIME类型),并且该结构被签名。
托管供下载的归档文件,以及一个单独的文件,该文件包含证书中的公钥+步骤2中生成的签名。
不,你会把公钥留在证书里。您可以使用附加签名或分离签名(见下文)。
(用户)客户端上的
下载并解压缩存档,下载签名+公钥文件
正确的。但公钥文件将是证书。
使用下载的公钥解密下载的签名,保存此值
如上文所示,解密并不总是使用。
迭代嵌入在操作系统中的公共根证书。对于每个根证书,解密签名值并将结果与步骤2中的结果进行比较。
该链可能超过两个证书(包含中间/服务器证书),证书包含一个或多个“颁发者”字段以查找更高级别的证书。因此,不需要搜索自顶向下的根证书。
一旦在3中找到匹配项,您就可以验证作者的私钥是从您在步骤3中找到的CA信任链中降下来的:这都假设软件开发人员使用了CA,我们在客户端OS中有一个嵌入的根证书。
是的,通过验证证书中的签名,还可以验证CRL的撤销,验证证书是否在有效期内,等等。
上述方法是否有效,还是我忽略了关键细节?
是的,见上文。
给定一个空白的客户机,如果我想将公钥+签名+归档组合成一个文件,我可以让客户机理解和解析,那么是否有任何广泛支持的格式来组织这些数据呢?
对于使用PKIX (使用-Verisign颁发的X5.09证书的公钥基础设施)的系统,最著名的容器格式可能是CMS,即加密消息语法。
当然,现在有各种各样的包管理器(或“商店”)可以描述软件需要如何签名或以其他方式管理。这很可能是,他们反过来使用CMS签署软件,但其他协议也可以使用。
https://crypto.stackexchange.com/questions/40118
复制相似问题