我正在设计一个交换IOU(数字期票)的协议。 这些应该是数字签名的,但签名应该独立于数据表示(无论是XML,JSON,二进制,小数字还是大数字)。
是否有关于如何签署字符串和基本类型列表(如整数,浮点数,布尔值)的标准?
答案 0 :(得分:2)
没有一种标准编码,但您可以为特定编码指定规范形式。
答案 1 :(得分:1)
更好的问题是验证数字签名数据原语的最佳格式是什么。
答案是xml格式化并根据XAdES标准进行签名。 XAdES与相关标准协调一致,许多实现参与由etsi托管的互操作性测试。
除非验证数字签名格式很容易,否则签名的价值有限。
您可以对任何位流进行签名,并将签名存储/维护为分离签名。但是你和依赖方(收件人)需要处理两个文件。一个用于数据,一个用于签名。
xml与XAdES的优点是格式使签名的xml文件能够包含数字签名。
您可以为其他数据格式(如json)创建等效的XAdES。但是新格式的使用有限,除非它变得流行和标准化。 XAdES已经完成了这个,所以它是要走的路。
<强>加强> 回复:评论 -
我想提供不可否认性。我知道我必须保存我签署的信息。但我希望我不必将其保存为XML,而是可以将签名中包含的所有值保存在数据库中(不那么冗长),并在验证之前从它们中唯一地重构签名字符串。
从技术上讲,你可以做到这一点。您需要注意xml中的间距问题。但实际上,这不是一个好主意。原因:
证明不可否认性要求您满足所谓的签名者确实签署数据的适用举证责任。
您可能试图说服原始签名者,专家第三方(审核员)或非专家(律师和陪审团)。你想让说服这些人轻松简单。与“这是原始签名文件相比,”重新创建“签名文件”等方案并不容易理解。它的签名验证并且使用属于Susan Signer的数字证书进行签名。
为了简单起见,我建议签署一个XAdES XML文件。然后从文件中提取数据并在dbms中使用它。挂起dbms或其他地方的原始签名文件。如有争议,请生成原始文件并显示其验证。审计的第二部分是显示您的dbms与签名的XML具有相同的数据值。
与您证明不可否认数据的目标相比,挂起原始的,已签名的xml文件的编程和存储成本为de minimis。
顺便问一下,如何管理签名者的证书?如果它不是QSCD(合格签名创建设备),例如将证书存储在文件系统中,那么您还有另一个问题:无法最终证明证书未被冒名顶替者使用。使用安全系统进行签名,例如CoSign(我的公司)或同等系统。