附加到文件的数字签名

Digital signatures attached to the file

我需要对我的网络应用程序实施数字签名。我遵循 this and this 示例,并成功签署并验证了给定文件。

我的问题是关于流程的:

  1. 我可以导出签名,那么签名怎么办呢?将其保存在数据库中?
  2. 如果我使用 BouncyCastle 将签名附加到文件,则导出的文件不可读。带有附加签名的文件应该是可读的吗?
  3. 这是正确的数字签名流程吗:使用用户证书创建签名、存储签名、创建签名验证端点?
  4. 如果 3. 是正确的,是否意味着如果文件在应用程序外部发送,收件人将不知道文件是否已签名?签名是否应该附在文件上?如果是,是否有适用于所有类型文件的解决方案(即我找到了基于 pdf 的解决方案)。

也许这个问题太广泛了,但我愿意接受任何关于这个主题的material。

I can export the signature, so what should I do with the signature?

你必须区分私钥,证书和签名。
私钥:用户的私钥,如果在加密设备中创建,永远不会从device.
Certificate,简而言之,是一个签名的 Public 密钥。证书颁发机构 (CA) 对其进行签名并且证书公开可用。
签名 是签名内容。其实就是对要签名的内容进行哈希处理,然后对这个哈希进行签名,称为签名。

Is this the correct flow of digital signature: create the signature with user's certificate, store the signature, create endpoint for signature verification?

私钥用于签署内容(内容的散列)。产生的字符串称为签名。证书(Public 密钥)用于验证签名。

is there solution for all types of files (ie. I have found pdf based solutions).

任何内容都可以签名。 Web 应用程序使用 CSV 数据、XML、Json 等签名文本文件,这些文件接受来自用户或成员的数据。例如 eReturns、来自银行的签名付款结算数据、投标表格等。PDF(和一些其他格式)支持签名和验证签名,并且是广泛用于共享文档的格式。文档可以显示可见签名,因此 pdf 签名是签名中讨论最多的格式。
否则,任何应用程序都可以定义签名要求,用户(客户端应用程序或 Web 浏览器)遵循所需的签名标准,然后应用程序可以根据预定义的格式和标准验证签名是否已附加(连同数据)。

I need to implement digital signatures to my web app.

现代浏览器可能需要使用浏览器扩展来访问存储在本地计算机上的证书。例如:Signer.Digital 浏览器扩展

有效的数字签名使收件人有理由相信邮件是由已知发件人创建的(身份验证),发件人不能否认已发送邮件(不可否认),并且邮件未被更改运输中(完整性)

更多信息:http://javaint4bytes.blogspot.com/2018/04/java-signature-certificates.html