AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[gpg](unix)

Martin Hope
Manuel Jordan
Asked: 2025-04-07 09:05:48 +0800 CST

“--default-cache-ttl”和“--max-cache-ttl”选项之间有什么区别和联系?

  • 5

关于 GPG 被提及gpg-agent并且我读到以下答案:

  • gpg 不要求输入密码

哪里提到了--default-cache-ttl和--max-cache-ttl选项?所以我找到了这个官方来源:

  • 人 - GPG-AGENT(1)
--default-cache-ttl n
Set the time a cache entry is valid to n seconds. The default is 600 seconds.
Each time a cache entry is accessed, the entry's timer is reset.
To set an entry's maximum lifetime, use max-cache-ttl
 Note that a cached passphrase may not be evicted immediately from memory if
no client requests a cache operation. This is due to an internal housekeeping
function which is only run every few seconds.

--max-cache-ttl n
Set the maximum time a cache entry is valid to n seconds.
After this time a cache entry will be expired even if it
has been accessed recently or has been set using gpg-preset-passphrase.
The default is 2 hours (7200 seconds).

因此,请考虑以下主要问题:

  • --default-cache-ttl和选项之间有什么区别和联系--max-cache-ttl?

次要问题如下:

  • 到底是什么cache entry?
  • gpg-agent当考虑/应用--default-cache-ttl和选项时要知道的标准是什么--max-cache-ttl?

因此,我想清楚地了解何时以及为何根据每个选项考虑 600 秒(10 分钟)和 7200 秒(2 小时)的要点/场景/标准

gpg
  • 1 个回答
  • 22 Views
Martin Hope
Greendrake
Asked: 2025-01-05 02:52:48 +0800 CST

为验证者提供最少麻烦的文件签名

  • 5

假设我想发布(或发送给某人)一个文件。我还希望该文件的接收者能够验证该文件的任何进一步更新是否来自与原始文件相同的来源/作者。

显而易见的解决方案是发送带有公钥和文件 GPG 签名的原始文件。任何后续更新也将被签名。

然而,验证者必须将公钥导入其本地密钥环。

有没有更灵活、更不显眼的方法?也许不是 GPG,而是别的什么?

例如,像这样的情况是理想的:

toolname --verify --pub path/to/public.key --sig path/to/signature path/to/file-to-verify

看起来 GPG 可以做到这一点,但只能通过 3 个特殊的步骤:

gpg --no-default-keyring --keyring ./temp-keyring.gpg --import pub.key
gpg --no-default-keyring --keyring ./temp-keyring.gpg --verify signature.gpg path/to/file
rm ./temp-keyring.gpg

相关问题:一、二。

gpg
  • 1 个回答
  • 28 Views
Martin Hope
Zoltan King
Asked: 2024-08-02 03:56:51 +0800 CST

用于创建 GPG 密钥的操作系统是否与密钥一起存储?

  • 5

我使用 FreeBSD 上的命令生成了一个新的 GPG 密钥供个人使用gpg --full-generate-key。创建密钥的操作系统的名称是否存储在密钥本身中?我可以在 Debian 机器上使用此密钥,就像它是在 Debian 上创建的一样吗?

gpg
  • 1 个回答
  • 17 Views
Martin Hope
Harald
Asked: 2024-06-13 18:44:39 +0800 CST

使用 gpg 更快地解密多个文件

  • 5

pass程序是一个命令行实用程序,用于将密码和自由格式的额外数据存储在使用 gpg 加密的小文件中。它特别提供了一个 grep 子命令,用于通过额外数据查找密码。

但是这个 grep 子命令在我的计算机上运行速度非常慢。我存储了近 200 个密码,每个文件的内部解密方式gpg如下(time当然,前面没有):

% time gpg -d --quiet --yes --compress-algo=none --no-encrypt-to stackoverflow.gpg
  the password output
user=0,000 sys=0,006 wall=0,382 (1,61)

挂钟时间大约为 0.4 秒,也就是说,grep 所有文件需要大约 1 分钟的时间。

正在gpg-agent运行并且我有这个版本:

gpg(GnuPG)2.2.27

有两个原因导致速度很慢:

  1. 的启动gpg和通信gpg-agent很慢,这是因为用户+系统时间相比之下较少。
  2. gpg-agent很慢,事实是,pass grep运行一次后它的累计 CPU 时间增加了 60 秒,与完整运行的总时间非常吻合。

两者合在一起,都指向gpg-agent,尽管我不知道为什么代理会这么慢。ps我看到它运行如下

/bin/gpg-agent --sh --daemon

有人可以解释一下每个文件代理大约 0.3 CPU 秒是否合理,或者是否有办法改进这一点?

编辑:进一步的发现

附加strace到代理后,我发现了这一点:

20200 14:57:03.701648 getrusage(RUSAGE_SELF, {ru_utime={tv_sec=133, tv_usec=890780}, ru_stime={tv_sec=0, tv_usec=99975}, ...}) = 0
20200 14:57:03.701666 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=133, tv_nsec=990762100}) = 0
20200 14:57:04.063523 getpid()          = 18035

clock_gettime通话之间间隔 360 毫秒getpid。

使用 ltrace 的话:

20472 15:04:55.035574 strlen("my-password-here")                                                      = 10
20472 15:04:55.035641 gcry_kdf_derive(0x7d884b82c008, 10, 19, 2)                                = 0
20472 15:04:55.394727 gcry_cipher_setkey(0x7d884b82cbc0, 0x7d884b82c030, 16, 0x7d884b83c000)    = 0

所以gcry_kdf_derive需要 360 毫秒。无论它做什么,我是否可以通过一些配置设置让它将其结果缓存几秒钟。(... 去获取源代码)。

gpg
  • 1 个回答
  • 37 Views
Martin Hope
naphelge
Asked: 2024-04-28 20:57:02 +0800 CST

如何更改/添加 gpg 密钥以通过

  • 5

我需要将最初用于在我的系统上传递的 gpg 密钥更改为新生成的密钥。

然而,当我遵循我在这个线程上找到的建议时:https://unix.stackexchange.com/questions/226944/pass-and-gpg-no-public-key,事情似乎并没有按预期进行。尝试用备用 gpg 密钥替换原始 gpg 密钥时使用的命令及其输出是:

$ pass init -p .password-store GPG-id
mkdir: created directory '/home/naphelge/.password-store/.password-store'
Password store initialized for GPG-id (.password-store)
[master 8d65cea] Set GPG id to GPG-id (.password-store).
 1 file changed, 1 insertion(+), 1 deletion(-)

因此,该命令似乎只是在原始目录.password -store中创建一个新目录.password-store,并使用我的新密钥的 GPG-id 创建一个新的.gpg-id文件,而不是继续重新加密.password-store中带有新 gpg-key 的所有 gpg 文件。

此线程中也针对类似的目标提供了相同的建议:https://askubuntu.com/questions/929307/how-to-change-the-gpg-key-of-the-pass-password-store

我注意到在~/.password-store目录中的原始.gpg-id文件中,保存的是原始 gpg-key 的指纹((10)4 位数字块之间没有空格)。因此,我确实尝试了上面相同的命令,使用新密钥的指纹(不带空格),并尝试仅指定与密钥关联的电子邮件地址,以尝试启动.password-中 gpg 文件的重新加密-使用新的 gpg-key进行存储,但结果始终相同。pass init -p .password-store FINGERPRINT-idpass init -p .password-store [email protected]

所以我不确定,看看其他帖子和 pass 手册页还有什么可以尝试让它工作。任何建议或意见表示赞赏。谢谢。

gpg
  • 1 个回答
  • 25 Views
Martin Hope
chris01
Asked: 2024-04-09 21:57:32 +0800 CST

GPG:找到与我的公钥匹配的秘密密钥文件

  • 5

当我使用 gpg 创建密钥对时,它将密钥存储在

~/.gnupg/private-keys-v1.d

它将公钥存储在密钥环文件内 - 我可以命名它,或者它使用默认位置。

如果我查看(--list-public-keys和--list-secret-keys)我的公钥和私钥,我可以看到哪对匹配。两者的输出中的 40 个字符串/散列是相同的。

密钥文件与该字符串不同。它也是 40 个字符长,但有所不同。

我如何找出哪个秘密密钥文件与我的公钥相匹配?

在 Debian 12 上使用 gpg 2.2.40。

gpg
  • 1 个回答
  • 22 Views
Martin Hope
fbence
Asked: 2024-03-14 03:51:36 +0800 CST

当收到太多请求时,gpg-agent“忘记”密钥密码

  • 6

我正在运行 Ubuntu(通过 Regolith),登录时我的 gpg 密钥已解锁。我正在并行运行多个解密操作,我注意到,如果我得到超过 7,gpg-agent将“忘记”密钥已解锁然后我被提示输入 pinentry。

❯ gpg --version
gpg (GnuPG) 2.2.27
libgcrypt 1.10.1

我做了一个最小的工作示例来在 python 中演示这一点。

创建一个测试文件来解密:echo "something" | gpg --encrypt -o test.gpg. 在 shell 中运行gpg --decrypt test.gpg不会提示输入密码。

使用下面的脚本,如果将其WORKERNUM设置为低于 8(在我的机器上,但将其设置为 1,我想应该适用于任何机器),则脚本很乐意解密,而无需询问密码。但是,如果我将其提高到 8 或以上,我就会开始收到输入密码的请求,尽管似乎并非来自每个进程,而只是其中的一些进程。进程的执行显然也开始挂起(我假设它们正在等待gpg-agent)。

import subprocess
import multiprocessing as mp
import time



the_queue = mp.Queue()
WORKERNUM = 7

def worker_main(queue):
    while True:
        msg = queue.get(True)
        print(time.time(), msg)
        out = subprocess.run(["gpg", "--decrypt", "test.gpg"], capture_output=True)
        print(msg, time.time(), out.stdout)


the_pool = mp.Pool(WORKERNUM, worker_main, (the_queue,))

counter = 0
while True:
    counter += 1
    the_queue.put(counter)
    print(the_queue.qsize())
    while the_queue.qsize() > 10:
        time.sleep(0.1)

我尝试传递--batch给解密命令,但这并没有改变任何东西。我一直在浏览手册页,gpg看看gpg-agent是否提到了与此相关的内容,但我找不到任何内容。我有两个问题:

a)为什么会发生这种情况,b)我是否可以配置一些东西,这样就不必计算出处理池的最大大小来避免这种情况,而是gpg处理这个问题并且我没有得到 pinentry

gpg
  • 1 个回答
  • 32 Views
Martin Hope
Stewart
Asked: 2024-02-13 15:46:07 +0800 CST

gpg 过期时间?

  • 7

我有一个正在签署的许可证:

gpg --default-sig-expire "2024-02-14" --sign licence

这导致:

$ gpg --verify licence.gpg
gpg: Signature made Tue 13 Feb 2024 08:18:39 AM CET
gpg:                using RSA key 1234567890ABCDEF1234567890ABCDEF
gpg:                issuer "[email protected]"
gpg: Good signature from "Stewart <[email protected]>" [ultimate]
gpg: Signature expires Wed 14 Feb 2024 12:00:00 PM CET

这12:00:00 PM CET是我的问题。我通常那个时候去吃午饭。我不想在午餐时接到有关系统离线的电话。可以指定时间吗?我宁愿它过期于13:00:00 PM CET。


--ask-sig-expire仅提示您输入天数/周数/年数:

$ gpg --ask-sig-expire --sign licence
Please specify how long the signature should be valid.
         0 = signature does not expire
      <n>  = signature expires in n days
      <n>w = signature expires in n weeks
      <n>m = signature expires in n months
      <n>y = signature expires in n years
Signature is valid for? (0) 

ISO 8601 似乎不受支持:

$ gpg --default-sig-expore "2024-02-14T13:00:00+02:00" --sign licence
gpg: '2024-02-14T13:00:00+02:00' is not a valid signature expiration

该man systemd.time规范似乎不受支持

$ gpg --default-sig-expire "2024-02-14 13:00:00" --sign licence
gpg: '2024-02-14 13:00:00' is not a valid signature expiration

手册页也没有表明可能的时间:

--default-sig-expire
       The default expiration time to use for signature expiration. Valid values 
       are "0" for no expiration, a number followed by the letter d (for days), 
       w (for weeks), m (for months), or  y (for years) (for example "2m" for two 
       months, or "5y" for five years), or an absolute date in the form 
       YYYY-MM-DD. Defaults to "0".

我找到的唯一解决方案是将系统的时区更改为我以西的下一个时区,然后签名,然后将系统的时区设置回原来的时间。

$ sudo mv /etc/localtime{,.backup} 
$ sudo ln -s /usr/share/zoneinfo/Europe/London /etc/localtime
$ gpg --default-sig-expire "2024-02-14" --sign licence
$ sudo mv /etc/localtime{.backup,}
$ gpg --verify licence.gpg
gpg: Signature made Tue 13 Feb 2024 08:18:39 AM CET
gpg:                using RSA key 1234567890ABCDEF1234567890ABCDEF
gpg:                issuer "[email protected]"
gpg: Good signature from "Stewart <[email protected]>" [ultimate]
gpg: Signature expires Wed 14 Feb 2024 01:00:05 PM CET
gpg
  • 1 个回答
  • 41 Views
Martin Hope
frankfalse
Asked: 2023-10-24 22:34:02 +0800 CST

找到 --quiet 以外的选项以避免文件解密时出现 GPG 警告

  • 5

GPG解密命令

我尝试通过解密文件gpg并执行此操作(成功)以下命令:

gpg --passphrase "12345678" --batch --yes --no-symkey-cache filename.tar.gz.gpg

命令的执行结果为:

  • 文件filename.tar.gz.gpg被正确解密并创建文件filename.tar.gz;
  • 通过选项,--passphrase "12345678" --batch --yes 用于插入密码的 GUI 未打开。

GPG 警告和--quiet选项

但有一个问题:gpg执行上一个命令会产生以下警告:

gpg: WARNING: no command supplied.  Trying to guess what you mean ...

和正确的输出:

gpg: AES256 encrypted data
gpg: encrypted with 1 passphrase

通过这篇文章,我知道通过该选项--quiet,前面的gpg命令不会产生任何输出消息。

该警告似乎告诉我,在我的命令中不存在解密文件的请求filename.tar.gz.gpg。

我的问题

所以我的问题是:
有没有办法告诉gpg它必须解密文件以避免警告no command supplied.?

gpg
  • 1 个回答
  • 74 Views
Martin Hope
mvanle
Asked: 2023-10-24 17:39:49 +0800 CST

如何增加 GnuGPG 密码对话框超时?

  • 6

GnuGPG 密码提示对话框在 60 秒后超时。

如何增加超时时间?

(只是为了澄清,我不是在寻找default-cache-ttl密码短语本身的超时,而是在寻找密码对话框本身的超时。我在 Fedora 33 上使用 GnuPG v2.2.23)。

在此输入图像描述

gpg
  • 1 个回答
  • 43 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve