为什么 `head -c 2 /dev/hwrng` 不起作用?

为什么 `head -c 2 /dev/hwrng` 不起作用?

我的计算机中有 Atmel 97SC3201,并在内核中设置以下内容:

  • CONFIG_HW_RANDOM_TPM
  • 配置_TCG_TPM
  • CONFIG_TCG_ATMEL

/devtpm0hwrng,但运行此命令会返回以下内容:

head -c 2 /dev/hwrng

输出:

head: error reading ‘/dev/hwrng’: Input/output error

dmesg这些消息中出现:

tpm_atmel tpm_atmel: A TPM error (2048) occurred attempting get random

额外的尝试会产生以下消息:

tpm_atmel tpm_atmel: A TPM error (6) occurred attempting get random

任何想法为什么会失败或者更好,如何让它工作?

答案1

该 RNG 是可信平台模块。除非您的计算机是大型组织订单的一部分,否则默认情况下会禁用 TPM,因为如果配置错误,它可能会导致您的计算机无法启动,而且它可以使您的计算机更易于追踪。

如果您想使用 RNG,则必须在 BIOS 中启用它。这Thinkpad 维基有 Thinkpad 的详细说明,如果您有其他型号,它仍然可能有助于调整。我不确定在 BIOS 中启用 TPM 是否足够,或者您是否还需要在启动时从 Linux 初始化它。如果您需要 Linux 支持,请安装裤子(大多数发行版应该有一个包)。

您可以使用 TPM 中的其他功能,主要是安全引导(这样,即使具有计算机 root 访问权限的人也无法感染引导加载程序来植入 rootkit²)。你需要值得信赖的 Grub用于安全启动。

请注意,Linux 有一个良好的内置加密质量伪随机数生成器,并且擅长收集熵来为 PRNG 提供种子。所以硬件 RNG 的好处非常有限。

准确地说,TPM 为您的计算机提供了您无法轻易否认的难以欺骗的身份。这将是一个主要的隐私问题,但实际上它的问题比普遍认为的要小得多。正确使用 TPM 的软件不会将计算机的身份发送给远程方,而是使用无法追踪到 TPM 的特定于应用程序的密钥 - 因此,这就像拥有第三方帐户一样,仅此而已。不正确地使用 TPM 的软件可能会暴露您的隐私,但任何软件也可能会暴露您的隐私——浏览器因泄露有关您的许多信息而闻名。日常网页浏览所暴露的风险远远超过 TPM 带来的风险。
²但请注意,还有其他地方可以种植 Rootkit。只有当您将系统锁定得太多以至于很难安装任何额外的软件时,TPM 才能真正提供保护。

答案2

这些是来自 thinkwiki 站点的启用 TPM 的步骤。

在 Linux 中使用 TPM

摘自嵌入式安全子系统在 ThinkWiki 网站上

  • 本节非常不完整,但这里有一些入门指南: 编译 2.6.23 或更高版本的内核,并启用 ThinkPad 型号中 tpm 芯片的驱动程序;
  • 您需要启用 CONFIG_SECURITY 来获取 securityfs,并启用 CONFIG_KEYS 来使用 eCryptfs TPM 支持;
  • 您需要启用tpm_bios来访问TCPA日志;
  • 确保安装 securityfs 文件系统以/sys/kernel/security访问 tpm_bios 数据(TCPA 日志);
  • 您应该使用 dm-crypt 来拥有一个带有临时密钥的加密交换分区;
  • TCPA 日志可以在 securityfs 目录中找到,它可能会帮助您了解 BIOS 和引导加载程序如何使用 PCR。日志中每个事件的第一个数字是由该事件扩展的 PCR 寄存器的编号;
  • 您需要最新版本的 TrouSerS 软件堆栈才能使用 TPM 执行除读取 TPCA 日志之外的任何操作;
  • 您需要最新的 eCryptfs 用户空间(已编译 TPM 支持)才能使用 TPM 存储文件系统密钥;
  • 使用 TPM 作为 PKCS11 令牌是可能的,但我不知道它有多安全,因为这需要一个空的(众所周知的)SRK;
  • Trusted-grub 可用于在 Linux 加载之前处理 PCR,并对 Linux 内核进行校验和并使用该数据扩展 PCR;
  • PCR 可以通过 sysfs 读取,位于/sys/bus/platform/devices/tpm*/pcrsTPM 芯片的 TPM 驱动程序文件下;
  • TrouSerS 0.3.1 tpm_getpubek 似乎工作得不太好,它从 T43 中的 NSC TPM 芯片获取 PUBEK 属性错误(但关键数据本身是正确的)。比较来sys/bus/platform/devices/tpm*/pubek检查你的。

相关内容