【问题标题】:Manual validation Lotus Notes' signature with public key使用公钥手动验证 Lotus Notes 的签名
【发布时间】:2014-03-12 06:21:58
【问题描述】:

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

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

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

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

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

所以。这是兴趣任务。但是现在已经不可能解决了。路上有3个大问题。有人可以帮忙吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 非常感谢!现在,当我必须调查时,我看到了方向。
    猜你喜欢
    • 1970-01-01
    • 2012-07-26
    • 2013-05-28
    • 1970-01-01
    • 2015-03-08
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多