手动验证Lotus Notes'用公钥签名

时间:2014-03-11 11:44:09

标签: encryption lotus-notes lotus-domino lotus lotusscript

我们有Lotus Notes签名文档和用户的公钥。 我们需要做的事情:将密钥输入特殊应用程序中的字段(可以是Lotus Notes数据库或某些特殊软件)。然后我们问这个特殊的应用程序:“此文档是否真的由此用户使用此公钥签名?” 我们的应用必须回答:是或否。

我们尝试编写这个特殊的应用程序,但我们遇到了一些问题:

  1. 我们在文档中有一个名为$ Signature的字段,即签名字段的哈希值,使用签名者的私钥加密。我可以在文档的属性中看到该字段的内容。但我无法以编程方式提取它(我尝试过LotusScript和Java)。我没有找到任何办法。

  2. 因此,我只需手动复制此字段的内容并将其粘贴到特殊表单的字段中即可进一步分析。但在那里我遇到了另一个问题。我不知道如何解密这个签名。 Lotus使用什么算法来签名哈希?如果我知道算法,我想我将能够用Java解密它并得到签名字段的哈希。

  3. 我相信还会有一个问题。我不知道Lotus如何计算字段的哈希值。它使用md5吗?我需要知道它能够比较哈希并说这个用户是否签署了文件。

  4. 因此。这是利益任务。但现在解决它是不可能的。路上有3个大问题。任何人都可以帮助他们吗?

1 个答案:

答案 0 :(得分:0)

答案是:不要自己尝试这样做。不是你描述它的方式。有一个用于验证Notes签名的API。

只需将文档的UNID复制到您的数据库,然后使用Notes C API编写代码以打开文档并调用API函数NSFNoteVerifySignature()进行验证。您可以使用JNI从Java执行此操作,也可以按照here所述的技术从LotusScript执行此操作,或者您可以使用LSX toolkit,或者只编写独立的C程序。

您无论如何都必须使用Notes C API来处理您提出的三个点中的两个:

  1. 您需要使用C API来获取$ Signature项目的内容。
  2. 签名是RSA。
  3. 你实际上有两个问题:算法和输入。你必须将它们都匹配。如果我没记错的话,Lotus已经将哈希算法描述为"修改了MD2"。请记住,这可以追溯到20多年前,打破兼容性是他们不喜欢做的事情。当他们升级RSA密钥大小时,他们可能已经改变了它,但我不记得听到过这个。但正如我所说,这只是问题的一半。您需要以与签名算法看到的格式完全相同的格式获取原始输入字节,对于富文本字段,这可能意味着读取原始CD记录,这需要C API。