加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 在Windows中存储密码的安全方式

发布时间:2020-12-15 03:34:16 所属栏目:大数据 来源:网络整理
导读:我试图保护包含敏感信息的本地数据库(类似于 this question,仅适用于delphi 2010) 我使用的是DISQLite component,它支持AES加密,但是我仍然需要保护我用来解密的密码.读数据库. 我最初的想法是生成一个随机密码,使用类似DPAPI(CryptProtectData和CryptUnprot
我试图保护包含敏感信息的本地数据库(类似于 this question,仅适用于delphi 2010)

我使用的是DISQLite component,它支持AES加密,但是我仍然需要保护我用来解密的密码.读数据库.

我最初的想法是生成一个随机密码,使用类似DPAPI(CryptProtectData和CryptUnprotectData函数在Crypt32.dll中找到)中存储它,但是我找不到任何示例

我的问题是:如何安全地存储随机生成的密码?或者,假设DPAPI路是安全的,我该如何在Delphi中实现这个DPAPI?

解决方法

最好使用Windows DPAPI.它比使用其他方法更安全:

> CryptProtectData / CryptProtectMemory
> CryptUnprotectData / CryptUnprotectMemory

CryptProtectMemory / CryptUnprotectMemory提供更多的灵活性:

> CRYPTPROTECTMEMORY_SAME_PROCESS:只有您的进程可以解密您的数据
> CRYPTPROTECTMEMORY_CROSS_PROCESS:任何进程都可以查看您的数据
> CRYPTPROTECTMEMORY_SAME_LOGON:只有使用相同用户运行的进程和在同一个会话中可以解密数据

优点:

>不需要钥匙 – Windows do it for you
>粒度控制:每个进程/每个会话/每个登录/每个机器
> CryptProtectData存在于Windows 2000及更高版本中
> DPAPI Windows比使用“安全”相关代码更安全,我和我认为Random()返回绝对随机数的人:)实际上,微软在安全领域拥有数十年的经验,拥有最多受攻击的操作系统:O)

缺点:

>在CRYPTPROTECTMEMORY_SAME_PROCESS的情况下,一个*只需要在你的进程中注入一个新的线程,这个线程就可以解密你的数据
>如果有人重置用户密码(不更改),您将无法解密您的数据
>在CRYPTPROTECTMEMORY_SAME_LOGON的情况下:如果用户*运行黑客进程,它可以解密您的数据
>如果您使用CRYPTPROTECT_LOCAL_MACHINE – 该机器上的每个用户可以解密数据. This is why it’s not recommended to save passwords in .RDP files
> Known issues

注意:“每个用户”是具有使用DPAPI的工具或技能的用户

无论如何 – 你有选择.

请注意,@ David-Heffernan是对的 – 存储在计算机上的任何东西都可以被解密 – 从内存中读取,在进程中注入线程

另一方面,为什么我们不要让饼干的生活更难?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读