我正在测试一个系统,它涉及使用外部各方发送的文件更新数据库。从外部各方发送的这些文件基本上只是用于更新数据库的大型平面文件。要求这些文件必须使用符合FIPS 186-4数字签名标准的文件签名密钥,使用SHA-256散列算法,并按照PKCS #1使用2048位模数RSA数字签名算法加密派生散列。SHA-256散列算法将应用于整个数据文件。这将导致一个2048位的数字签名的八位形式,将附加在文件中。
为了测试系统是否正确地验证签名,我需要首先对文件进行签名。信息安全并不是我真正的强项,我希望能向正确的方向提供指导。是否有一个工具可以用来执行此操作?除了证书之外,还有什么先决条件呢?
非常感谢。
发布于 2014-07-14 17:24:02
您引用的文本基本上意味着:文件是用RSA签名的,签名被附加到文件中。这里没有关于证书的内容;签名使用密钥。证书是将公钥绑定到标识的方法。你引用的这段话,虽然在很多方面都很残忍,但对证书还是比较清楚的:这里没有证书。
签名只对验证有意义:
在描述此问题时,数据库希望输入文件使用特定的私钥签名,该私钥对应于数据库将用于验证的公钥。如果您手头没有该私钥,那么您将无法生成签名。如果你想签一个你自己的文件,你需要那把钥匙。否则,那是绝对不可能的。
如果您有某种格式的私钥,则仍然需要编写一小部分代码来计算签名并将其附加到文件中(这个简单的“附加”过程不是标准的签名格式,因此您不会得到一个独立的现成工具来完成签名)。这可以在许多编程框架中完成,例如使用Java (使用java.security.Signature)或C(使用一些库(如OpenSSL) )。
无论如何,在密码学中,你不能“从外部”进行体面的测试。您可以做的最好是获取数据库接受的现有签名更新文件;然后修改签名(从您的描述中更改签名的一个字节的值,也就是签名文件的最后256个字节),并确保数据库不再接受带有修改签名的文件。这将证明数据库“验证了某些东西”,而不是它正确地进行了验证。知道密码系统是否能充分完成其任务不是通过测试,而是通过对代码进行审计。
https://security.stackexchange.com/questions/63094
复制相似问题