用于表单数据的欧盟标准化数字签名

信息安全 javascript 电子签名 pgp 微笑
2021-08-19 02:13:56

问题

我正在尝试确定是否有任何标准(欧盟接受)关于客户端在提交表单数据之前对其进行数字签名。

所以约束是:

  • 知道标准
  • 欧盟接受
  • 客户端(我们需要原产地证明而不是防篡改)
  • 基于 javascript 和/或基于浏览器插件(任何语言)
  • 可以处理网络表单相关内容(k/v 数据对)
  • 该过程的输出应该是机器可读的(例如:form-urlenc、JSON、bson、msgpack)
  • 输出格式不应该有歧义问题(意味着不是血腥的 XML*,也可能不是 form-urlenc)

到目前为止我对这个主题的阅读

XMLDSIG 很糟糕,因为 XML 可以通过无数种不同的方式进行规范化,从而使签名无效或更糟糕的是,附加的 XSD 或 XSLT(甚至 CSS)可以改变数据内容的可见呈现(取决于可视化工具),这意味着它可以改变其含义使用户面临可能的骗局。

PAdES 已经在我们的公共管理中使用,我们的项目范围可能包括必须构建带有嵌入式表单和数字签名的 PDF 文件。

PGP/GPG 或 S/MIME 可能是该角色的有效竞争者,但如果它们被欧盟法律正式认可或标准化,则不适用。另一方面,这两个都带有附加到数据的签名。

背景:

我正在为一个政府项目(在罗马尼亚)进行研究,该项目试图通过简单的网络表单实现数字签名。

我知道爱沙尼亚、比利时、法国和德国已经为电子身份证和文件的硬件数字签名以及他们使用的一些框架/工具(例如:hwcrypto.js)建立了类似的系统。

但我想了解他们的整个过程,例如他们是否对整个文档进行数字签名,或者只是机器可读格式的一些原始数据(如上所述)。

他们需要电子身份证还是可以与磁盘上的证书文件一起使用。

2个回答

欧盟的数字签名由关于电子识别和信任服务的第 910/2014 号法规规定它直接适用于所有地区,无需换位

您将找不到任何有关格式或技术的标准参考,但完成将需要:

  • 由合格的信任服务提供商颁发的X509 数字证书必须存在于欧盟受信任列表 (TSL) 中
  • XAdES、CAdES、PAdES 或 ASiC格式,用于公共管理部门之间的互操作性

浏览器中的数字证书

证书以软件文件或加密令牌(身份证)的形式发给用户。这是最大的障碍。由于 Java 对浏览器的限制,您不能使用 OS 原生密钥库(检查这个这个

有一些选择

AdES 格式

这不是法规 910/2014 的衍生要求,而是电子政务用于制定额外的互操作性法规。这对私人企业不是强制性的

ETSI XAdES、CAdES 和 PAdES 不适用于 Web 环境。像已知库伪造pkijs不支持它。XAdES 基于 XMLDsig(您已经定义了它...),而 CAdES/PAdES 使用 ASN.1 二进制编码。

不幸的是,JWS(JsonWebSignature) 仍然没有 ETSI 的标准 AdES。

在网络和移动设备上使用了一种称为“三步签名”的技术,以避免将复杂的数字签名库移动到设备上。

  1. 使用用户的公共证书和要签名的数据(文档或表单数据)准备哈希以在服务器上签名

  2. 在客户端签名哈希

  3. 在服务器上完成签名格式

只有第二步在客户端执行。SD-DSS欧洲框架(开源)向主管部门提供了一个完整的数字签名框架,包括对 TSL、签名和验证的支持

您可以执行:

  • S/MIME 签名和验证,
  • PDF签名和验证,

在使用 PKIjs 的 Javascript 中,是一个 S/MIME 示例。

您可以使用XAdESjs在 Javascript 中进行 XAdES 签名

更大的问题是从浏览器中访问智能卡,今天实际上可以完成的唯一方法是通过像爱沙尼亚国民身份证项目提供的插件一样,您需要做一些工作才能将其包装在一个使用上述库的 WebCrypto 样式界面。