代码签名与加密

时间:2015-09-16 22:31:47

标签: security ssl encryption certificate code-signing

所以,我正在寻求一些帮助,大多数都是在理解代码签名和加密的过程,因为我对这两个主题仍然不满意。

我认为我理解:

  • 首先需要的是KEY,它是使​​用一些加密算法(RSA / SHA1 / etc)生成的
  • 使用此密钥,我们可以创建证书签名请求或CSR(与X509有关吗?),其中包含我们在证书上的所有信息(名称,位置,电子邮件,域名)
  • KEY和CSR都会被发送到根CA,后者然后以.pem或.p12文件的形式发布证书(使用CSR和密钥生成)。
  • 关于中间CA和更多证书的内容
  • 然后,除了中间CA之外,还可以使用此证书来签署一个文件,以便它基本上有你的名字,收件人可以放心,这就是你想要的接收。

    Versus

  • 获取证书的过程相同
  • 证书内的公钥用于使用aes加密文件的内容,因此在安装加密文件之前必须在目标上安装证书。 (这似乎是安全的,但不是人们想要的,人们无法读取或解码但仍具有功能的密码)
  • 我认为你不能完全加密文件是有道理的,因为它需要被解码才能在目标上执行。我不在这吗?

问题:当我使用证书签署代码时,有效负载是否也会被加密?这与网站的SSL安全性有何不同,确保连接的安全性和隐私性?看起来他们都使用相同的技术来完成许多不同的任务。

1 个答案:

答案 0 :(得分:1)

我将在这里逐点回复一些关于误解的摘要/注释:

  

首先需要的是KEY,它是使​​用一些加密算法(RSA / SHA1 / etc)生成的

是的,关键是开始。实际上,如果签署密钥对,您就会生成公钥/私钥对。你保留私人部分,每个人都可能知道公共部分。算法的小校正 - Sha1用于散列,不用于加密。因此,对于证书,通常是RSA / DSA / ECDSA。

  

使用此密钥,我们可以创建证书签名请求或CSR(与X509有关吗?),其中包含我们在证书上的所有信息(名称,位置,电子邮件,域名)

是的,要获得典型的网站证书(x509标准),您需要签名请求/ CSR / PKCS#11(同样的事情)。

  

KEY和CSR都会被发送到根CA,后者然后以.pem或.p12文件的形式发布证书(使用CSR和密钥生成)。

不,只有密钥的公共部分(已包含在CSR中)才会发送给颁发证书的CA.除了你之外,没有人需要私钥。

  

关于中间CA和更多证书的内容

根CA不会签署您的证书(出于与更好的安全性相关的各种原因并使其保持脱机状态)。中间CA执行,并且它们由根CA签名。这意味着如果您要使用证书来保护浏览器的流量,则通常需要包含中间证书。您可以通过查看https://www.ssllabs.com/ssltest/来验证是否所有内容都已到位 - 它会告诉您链中是否缺少某些证书。

  

除了中间CA之外,还可以使用此证书对文件进行签名,使其基本上具有您的名称,并且收件人可以确信它是您希望他们接收的内容。

是。它可用于签署文件(S / MIME格式),但也可用于协商安全的互联网连接。

  

证书内的公钥用于使用aes加密文件内容,因此在安装加密文件之前必须在目标上安装证书。 (这看似安全,但不是人们想要的,人们无法读取或解码但仍具有功能的密码)

您所描述的更像是DRM。只有拥有密钥的人才能阅读文件,但从安全的角度来看,这并没有多大意义,因为你需要首先给他们密钥。您可以使程序更复杂和混乱,但最终他们必须知道密钥的其他部分。

此外,即使在这种情况下,您也应该分发公钥,而不是私钥。您可以从私钥生成公钥,但不能相反。

  

我认为你不能完全加密文件是有道理的,因为它需要被解码才能在目标上执行。我不在这吗?

你是对的。安全执行加密软件的唯一方法是将执行引擎/密钥保持在软件不可及的范围内 - 例如嵌入硬件中。对于纯软件解决方案而言,这是不现实的。

  

当我使用证书签署代码时,有效负载是否也会被加密?

有效载荷是什么意思?

  • 应用程序发送的数据 - 没有。这需要明确地完成
  • 申请代码 - 没有。它没有加密,签名的唯一内容就是拥有证书的人签署了代码并且之后没有更改。或者更确切地说,某种哈希是从应用程序二进制文件计算的,并且短哈希值是使用您的私钥加密的。当您分发应用时,每个人都可以使用您的公钥解密签名,并将哈希值与您提供的哈希值进行比较。
  

这与网站的SSL安全性有何不同,确保连接的安全性和隐私性?

完全不同。 TLS是关于同意用于加密飞行中数据的密钥。代码签名是为了证明代码未被修改,并来自您(可能)信任的同一实体。

  

似乎他们都使用相同的技术来完成许多不同的任务。

是。它全部基于私钥/公钥对。它可以用于许多不同的目的。 X509证书实际上包含了可用于它们的目的列表。清单是:

  • TLS WWW服务器身份验证
  • TLS WWW客户端身份验证
  • 签署可下载的可执行代码
  • 电子邮件保护
  • 将对象的哈希值绑定到时间
  • 签署OCSP回复