如何强制在签名开始之前采用gpg签名时间戳,而不是在完成时?

时间:2015-08-20 04:56:02

标签: gnupg

我的系统用于确保程序生成的结果文件的完整性:

  1. 我的程序做了一些附加到results.txt的工作,其大小变为几千兆字节。
  2. 我的程序将当前时间戳附加到文件中。
  3. results.txt已关闭。
  4. 我的程序调用{​​{1}}来创建分离签名。由于gpg --sign --detach results.txt的大小,这需要几分钟。弹出pinentry程序,并提示执行程序的人员输入密钥密码。
  5. 时间流逝......结果文件已归档......

    1. 很久以后,除了验证签名以将文件的内容归属于签名者之外,我希望能够在文件关闭后立即检查签名,以确保文件在结束和签署之间没有进行编辑。
    2. 当我在Ubuntu上使用gpg 2.0.17(libgcrypt 1.5.0)开发此系统时,我了解到进入签名的时间戳基本上是在调用results.txt时的时间戳。这很好用,因为我可以依赖于写入文件的时间戳和gpg签名开始之间不到1秒的时间,我认为任何手动篡改的时间都太少了。作为检查结果完整性的一部分,我检查了gpg签名时间戳在文件末尾写入的时间戳后不到1秒。这很有效,直到......

      我使用gpg 2.0.27(Gpg4win 2.2.4,libgcrypt 1.6.3)将系统移植到Windows 7,我注意到在这个环境中,gpg签名中包含的时间戳实际上是在结束 gpg签名,或文件关闭后约2分钟。这是一段足够长的时间,可能会篡改文件。

      有没有办法让gpg2在计算实际签名之前采用时间戳?

1 个答案:

答案 0 :(得分:2)

您可以强制使用与--fake-system-time选项一起使用的固定时间戳。

--faked-system-time epoch
    This option is only useful for testing; it sets the system time back
    or forth to epoch which is the number of seconds elapsed since the
    year 1970.  Alternatively epoch may be given as a full ISO time string
    (e.g. "20070924T154812").

确定当前时间,并在执行签名操作时将其传递给GnuPG。