【问题标题】:store password securely for runtime in C在 C 中安全地存储密码以供运行时使用
【发布时间】:2014-07-18 10:09:53
【问题描述】:

我目前正在用 C 语言编写一个邮件客户端。但是我有一个关于存储密码的问题。

我只想在程序运行时存储它。 由于密码是一个“字符串”,我可以将其存储在一个 char 数组中,该数组在程序结束前不久被覆盖。但这会相对不安全。

如何在程序运行期间安全地存储密码?

【问题讨论】:

    标签: c email client password-protection password-encryption


    【解决方案1】:

    避免以明文形式保存密码是完全正确的。

    如果您保留密码(例如,您需要定期将密码发送到服务器),最好以加密形式保存。哪种加密形式取决于您。这使得对程序进行内存分析的人更难看到密码。 (更难,并非不可能;如果您必须将密码发送到服务器,并且有人可以物理访问机器来进行内存分析,那么您所能做的就是让它变得困难。)

    使用它时,你会这样做:

    • 分配一个临时数组
    • 解密为数组
    • 使用数组(例如,将密码发送到服务器)
    • 覆盖数组
    • 释放数组

    如果你想真的偏执,在覆盖数组时,依次执行几项,例如(这只是一个例子):

    • 全为零
    • 所有的
    • 选择一个随机字节值
    • 用该字节值填充数组
    • 再次填充移位一次的值
    • 再次用移位后的值填充
    • 用第三次移位的值再次填充
    • 再次填充第四次位移的值
    • 再次填充位移第五次的值
    • 再次填充第六次位移的值
    • 再次填充第七次位移的值
    • 所有的
    • 全为零

    ...显然,某些研究人员有时能够通过对 RAM 中的存储单元进行取证分析来检索先前数据的回声。但我认为这属于偏执狂的范畴。 (但这样做很便宜。;-))

    【讨论】:

    • 嗨,感谢您的快速回答,但我知道还有第二个问题。当我加密我的密码并将其保存在数组中时,我的程序必须再次解密它,所以当“攻击者”知道代码时,他是否不容易解密保存在数组中的加密密码?您能给我一个提示或链接以供进一步阅读吗?
    • @user3852496:他们确实会,但现在不是仅仅查看程序的内存并运行模式匹配以寻找可能是密码的东西,他们必须找到你在做什么解密。正如我所说,你不能让对机器拥有完全权力的人无法获取信息,你所能做的就是让它变得更加困难。 (抱歉,我没有任何具体的链接。)
    • 再次感谢,您对我有什么建议吗?如何避免模式匹配找到我的密码数组或我应该在哪里进行解密或我的加密和解密功能? :-)
    • @user3852496:恐怕不会。不是我的专业领域。
    猜你喜欢
    • 2013-06-02
    • 2013-09-09
    • 2011-05-13
    • 2014-08-29
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多