【发布时间】:2018-02-03 02:10:17
【问题描述】:
我正在开发一种安全密码管理器。它不会用于专业用途,而且我知道它不会像 KeePass 或其他任何东西那样安全。这只是为了我自己对如何分配安全内存、使用加密算法等的理解。
为此,我使用 libgcrypt 并使用 gcry_malloc_secure 分配内存。
我现在已经到了某种程度,我需要用户输入他的密码以进行加密/解密。
但正如我所见,任何控制台输入首先缓冲在stdin(或argv[..])中,因此不在安全内存中。因此它可以“轻松”被攻击者读取。
在我的程序中发生的任何与安全相关的事情都在securemem中,希望更难阅读/窃取。
所以我的问题就像标题所述:
让用户输入数据最安全的方法是什么?
【问题讨论】:
-
C 中没有 no 方式,因此解决方案将取决于平台。也许看看pinentry source 可以提供一些想法。
-
也许这会有所帮助:Buffered and Unbuffered inputs in C.
-
@FelixPalmen 你能解释一下为什么没有办法吗? (键盘记录器除外..)如果我将自己限制在 POSIX 上,会有解决方案吗?
-
@KillPinguin 仅仅是因为 C 作为一种语言仅提供
stdio并且您可以禁用stdio流的缓冲,但无法控制操作系统正在做什么。当然有有平台特定的方式。我不确定 POSIX 是否指定了任何有用的东西,我不在那个话题中。只是认为pinentry可能“做得对”,所以查看源可能帮助。
标签: c security input libgcrypt