我正在尝试了解一些有关 linux 内核密钥环的知识(作为使用 ecryptfs 的背景)。内核密钥环是否将密钥存储在磁盘上的某个位置,或者每次系统启动时都会以编程方式重新初始化?
我查看了有关加密的手册页和 archlinux 文档,但没有找到答案。如果有关于内核密钥环的其他文档,我想知道。
如果内核密钥环确实将密钥存储在磁盘上,那么它将文件放在哪里?
答案1
Linux 内核从不以自己的名义在磁盘上存储任何内容。它存储应用程序通过文件系统接口告诉它存储的文件,或者直接访问的块设备上的数据,或者已安装的文件系统和磁盘卷的元数据。
此外,将加密密钥存储在同一介质上没有任何意义。
加密密钥仅存储在 RAM 中。它是在安装加密文件系统之前输入的。密钥通常源自用户输入的密码,但也可以从智能卡等加载。这内核文档有详细信息。
可以将卷的加密密钥存储在该卷外部的文件中,然后加载该文件。例如,在启动时物理插入的可移动驱动器上拥有一个密钥是有意义的。但内核不会自行执行此操作,而是由系统的启动脚本来执行此操作。
答案2
有关内核密钥环的文档可以在内核源代码树中找到:
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/security
eCryptfs 使用的密钥不会以明文形式存储在磁盘上。 ecryptfs-utils 项目中的实用程序默认在将任何密钥材料保存到磁盘之前使用用户提供的密码包装密钥。每次启动后,用户都需要输入用户提供的密码。
答案3
简而言之,它不会将其存储在内存中,而不是磁盘中。此外,通常会有一个超时,以便它会在这么长时间后自动从内存中删除,除非另有说明。
我自己关于使用内核密钥环并通过“keyctl”使用它的笔记
https://antofthy.gitlab.io/info/crypto/keyring_linux_kernal.txt
这包括我找到的有关内核密钥环各个方面的各种文档的多个链接。
旁白:我进行这项研究是为了在编辑加密文件时存储密码!这样,当用户保存文件时,编辑器可以再次重新加密文件,而不需要他们输入密码两次(也许不小心更改了密码,我做了几次!)。