【问题标题】:Open and verify signed documents打开并验证签名文件
【发布时间】:2011-03-31 20:01:55
【问题描述】:

我已明确签署文件的流程。您需要由 CA 制作的证书。你有一个公钥和私钥。与您签署的私人和与公众的人们打开您签署的文件。当您签署文档时,数学算法会处理该文件,然后生成一个散列,然后使用私钥对该散列进行加密。最后我需要将这个加密的哈希添加(concat)到文档中。

现在,要打开此文档,我需要将加密哈希码与文档分开。我需要公钥来验证文档的有效性。这对我来说很清楚。

所以..问题是...人们从哪里得到公钥???以及如何检查谁签署了文件??

我是否需要将我的证书附加到我要唱歌的文件中? 如果是真的。这不是不安全吗???把我的证书给大家??

谢谢,

【问题讨论】:

    标签: digital-signature


    【解决方案1】:

    您要问的是一个公钥-私钥密码系统。在 RSA(一个特定的此类系统)中,“公钥”和“私钥”实际上只是两个数字,它们是较大数字的质因数。由于模幂运算的工作原理(我不打算解释数学),效果是:

    • 使用“公钥”加密的任何内容都可以使用“私钥”解密
    • 使用“私钥”加密的任何内容都可以使用“公钥”密钥解密

    它是双向的。现在,在生成这对之后,您保留其中一个。那是“私人”的。对另一半,您添加一些身份信息。对于 X.509(一种特定的证书格式),您添加一个“通用名称”和一些辅助信息,如创建日期。这被添加到证书的“公共”部分。这一半的证书,即公钥,你以某种方式分发。

    在文档签名的情况下,分发方法通常是附加公钥。 “谁签署了文档”由 X.509 证书的“通用名称”字段回答。这看起来像“cn=Joe Blow, o=Widgets Inc, l=Washington, st=DC, c=US”。您并没有向所有人提供“证书” - 只是公开部分。让人们做的就是:

    • 验证您的签名
    • 以只有您可以解密它们的方式加密消息

    这不会让人们伪造消息,使他们看起来是来自你。

    【讨论】:

    • 在最后一段..你说人们可以验证我的签名。验证的范围很大。我可以验证文件签名,这很清楚。但是..我可以使用我附加到文件的证书的公共部分来验证 X 人签署文件所用的证书是否没有被吊销?可能吗?以其他方式..是否有任何标准可以将证书的这个公共部分和签名附加到文件中?我的意思是..在pdf中..我必须把这些信息放在哪里?在文档中?,在 docx 中?你知道实现这些要求的 Java 框架吗?
    • @oracleruiz:不可撤销是通过 OCSP 实时处理的,OCSP 是接收者联系服务器并检查证书是否被撤销的协议。它还由 CRLDP 以延迟方式处理,它分发由客户端下载的已撤销证书列表。 CRLDP 和 OCSP 服务器都可以在证书中指定。将密钥附加到文档上没有一种万能的标准。这取决于文档类型。我不知道特定文档如何实现它。
    【解决方案2】:

    哈希没有“连接”到文档。各种数据签名标准(PKCS#7、通用数据的 CAdES、XML 的 XMLDSig、PDF 文档的 PDF 规范)描述了将签名数据合并到输出文件中的不同方法。所有这些格式都允许您将公钥(通常是 X.509 证书)与验证数据一起包含在内。而verifier的目标也是检查key本身是否有效。或者,用户可能应该知道公钥。

    【讨论】:

    • 谢谢 你知道一些在 Java 中实现这些标准的 API 或框架吗?
    • iText 可用于 PDF 签名。 XMLDSig 和 PKCS#7 存在一些解决方案(您可以在 Google 中找到它们)。至于 CAdES - 我没有任何信息,但我认为必须有一些可用的信息。我们将把我们的 SecureBlackbox 产品移植到 Java,但这只会在 8-10 个月内完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2016-02-08
    相关资源
    最近更新 更多