使用GnuPG创建密钥时,会要求您提供一个密码来保护它。使用哪种加密算法来实现这一点?手册只说明使用了对称加密算法。
发布于 2017-01-25 09:47:27
GnuPG 2.x有一个单独的gpg-agent
,它是秘密密钥的保管人,它不提供对内部密钥的加密参数的任何控制。
此外,在设置密码或导出密钥时,--s2k
会被接受,但会被忽略。
不那是不可能的。现在,代理总是使用AES和S2K参数,它们需要在运行的机器上进行大约100 on的解密。
因此,我认为目前的情况是,密钥由代理持有,因为代理决定在运行的机器上实现其速度目标是最好的,没有办法控制它或以不同的方式输出。我尝试过的所有导出都得到了如下所示的关键属性:
$ gpg --export-secret-key DEADBEEF | gpg --list-packets
iter+salt S2K, algo: 7, SHA1 protection, hash: 2, salt: ...
这揭示了使用中的对称密钥(阿尔戈)和散列(哈希)算法,如RFC4880中所定义的。上述结果表明,algo: 7
为128-bit密钥的AES,hash: 2
为SHA-1.
iter+salt
标记是GnuPG用来将密码(string)转换为键的串对键模式。默认值iter+salt
意味着在密码中添加一个salt,并多次对字符串进行散列(一种名为键拉伸的技术,目的是增加强制口令的难度)。
因此,这说明了GnuPG是如何加密密钥的,并强调了这样一个事实:如果使用2.x版本,由于使用了gpg-agent
,您无法控制它。
发布于 2016-04-01 20:08:27
首先,密码用于使用串键函数导出对称加密的密钥。考虑到这一点,可以在GnuPG中对几个设置进行微调,比如哈希算法和重复次数。来自GnuPG手册:
--s2k-digest-algo name
使用名称作为摘要算法,用于破坏对称加密的密码。默认的是SHA-1。--s2k-mode n
选择如何破坏对称加密的密码。如果n为0,则将使用普通密码(一般不建议使用),1在密码中添加一个盐(不应使用),3(默认)对整个过程进行多次迭代(参见--s2k-count
)。--s2k-count n
指定重复进行对称加密的密码破译次数。此值可在1024至65011712之间(含)。默认情况是从gpg-代理查询的。请注意,并非1024-65011712范围内的所有值都是合法的,如果选择了一个非法值,则GnuPG将舍入到最近的合法值。只有当--s2k-mode
设置为默认值3时,此选项才有意义。
使用此对称密钥,私钥是对称加密的。此外,可以选择加密算法,而AES-128是GnuPG中的默认算法。
--s2k-cipher-algo name
使用名称作为密码算法,如果不给出--personal-cipher-preferences
和--cipher-algo
,则使用密码进行对称加密。默认的是AES-128.
可以通过运行gpg --version
来显示受支持的密码,例如:
$ gpg --version
[...]
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
与公共私钥算法(其中GnuPG 2.1添加了椭圆曲线)不同,支持的对称算法在GnuPG的所有当前版本中都是相同的。
所有这些选项也可以在~/.gnupg/gpg.conf
中设置,在这里,无需--
前缀就会注意到这些选项。
发布于 2016-04-01 19:51:20
根据这篇文章,您可以选择用于数据加密的密码(我假设其中包括密钥加密,因为它只是一个文件,对吗?)来自以下清单:
3 3DES,CAST5,河豚,AES,AES192,AES256,TWOFISH,CAMELLIA128,CAMELLIA192,CAMELLIA256
编辑:
在浏览手册页和google之后,您可以通过一些设置更改默认设置(有关详细信息:如何在Linux和GnuPG上更改默认密码?)。
我找不到任何具体提到私钥加密的东西,所以我假设它只使用任何设置为默认对称密码的密码。
https://security.stackexchange.com/questions/119245
复制相似问题