对gpg密码短语使用trezor

trezor-gpg的Python项目详细描述


#trezor作为gpg密码短语

安装方式: ` pip install trezor-gpg `

使用此功能,当gpg需要解锁一把钥匙时,trezor_gpg将弹出一个键盘来输入您的trezor密码。

您可以使用屏幕上的按钮或键盘网格输入您的PIN

` w e r      u i o      7 8 9 s d f      j k l      4 5 6 x c v      m , .      1 2 3 `

回车提交PIN,按转义取消,或按退格清除PIN。

#优点和缺点

  1. 这样可以防止密码短语键盘记录
  2. 默认情况下,它使用一个困难的密码短语
  3. 它减少了你需要记住的东西的数量(假设你已经记住了你的trezor pin)

如果将此用于常规加密:

  • 它不会像直接使用trezor的解密/加密功能那样保护gpg机密免受内存窃听

如果您将此用于密码管理器,如passgopass

  • 如果有人在没有gpg的情况下实现直接trezor密码管理器,解密密钥将永远不会在您的计算机内存中,因此未使用的密码将更安全。

另外,请参阅下面讨论的当前限制

#安装

gpg2必须安装在您的路径上本指南假设您使用的是默认的GPG2代理,而不是Seahorse。

  1. 运行pip install trezor_gpg
  2. 通过运行哪个trezor\u gpg
  3. 查找它的安装位置
  4. 将此行添加到~/.gnupg/gpg agent.conf
  5. 运行echo RELOADAGENT | gpg connect agent或重新启动计算机

设置Trezor密码

  1. 运行trezor-gpg-a键

如果你的密钥有一个现有的非Trezor passphrase,你需要先用默认的PunEnter程序删除密码(在执行上面的步骤3之前)。

注意:响应旧密码短语提示需要trezor_gpg来标识某些提示消息-如果您有非英语语言的消息,则这可能不起作用。添加密码短语可能会要求您在Trezor上最多按4次确认

###删除Trezor密码短语

  1. 运行trezor-gpg-r键

注意:响应新的密码短语提示需要trezor_gpg来标识某些提示消息-如果您有非英语语言的消息,则这可能不起作用。

###禁用冗余GPG密码缓存 您可能还想禁用gpg密码缓存,因为trezor有自己的缓存周期。将此项添加到gpg agent.conf中,或者修改已经存在的值: ` max-cache-ttl 0 ` 然后通过上面的步骤4重新启动代理。

###配置

例如,通过重写/usr/lib/systemd/user/gpg agent.servicegpg代理程序守护程序上设置这些环境变量。

  • pinentry_trezor_debug=1。将日志写入~/.cache/trezor gpg/log/debug.log
  • PINENTRY_TREZOR_DONT_FLASH=1使用键盘时不显示按了哪个键盘按钮。
  • pinentry_trezor_keyset=123456789。使用此字母网格输入键盘。

#当前限制

  • 这不使用锁定内存,这意味着如果内存被调出,解密的密码短语可能会写入磁盘
  • 不支持tty条目,因为pythongetpass被硬编码为特定的tty
  • 不支持混合密码短语-所有密码短语密钥必须具有Trezor密码短语或无
  • 密码短语基于密钥指纹,因此不能更改

#工作原理

tRZORYGPGP作为一个注销程序——当GPG需要解锁现有的密钥或锁定一个新的密钥时,它运行 TrZrOrgGPG。trezor_gpg将密钥的指纹视为加密的blob,并将其解密为合成密码短语。指纹对于密钥和不可分割的属性是唯一的,因此,如果导出密钥并将其导入到另一个系统上,trezor_gpg仍然可以检索到所需的所有信息

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaGWT:何时使用Lazydemelement?   Java中跟踪消失线程的多线程处理   java Springboot未能配置数据源:“url”,但我没有使用数据库   java为按钮生成随机位置   math Java:包含二项式系数计算的表达式   java通过AsyncTask传递参数   从路径错误创建java文件   高流量网站的性能播放框架、Java、Apache、PostgreSQL、JPA和Hibernate   java将4D矢量转换为长矢量   arraylist Java循环在没有任何错误的情况下终止   java正在制作一个计算器应用程序,希望在第二个片段中更新历史,但无法完成   java将信息从IntentService发送到Activity   java如何在游戏中插入大量实体!工作   javascript如何在ScriptEngineforJava中从数学中获得准确的结果?