当前位置 : 主页 > 编程语言 > delphi >

Delphi – 认证机制建议

来源:互联网 收集:自由互联 发布时间:2021-06-23
这个问题只有教育目的.此时我正在制作一个小应用程序,我希望在其中包含一个身份验证机制.应用程序在安装时应该可以访问Internet,但是可以脱机工作.到目前为止,我一直在考虑以下解
这个问题只有教育目的.此时我正在制作一个小应用程序,我希望在其中包含一个身份验证机制.应用程序在安装时应该可以访问Internet,但是可以脱机工作.到目前为止,我一直在考虑以下解决方案:

1)经典:发送到身份验证Web服务的用户名和密码(加密) – Internet连接断开时出现问题.
2)根据主板/硬盘序列号生成密码否 – 这会在组件更改时产生问题.

另外,我想要包含一个“记住密码”复选框.这是最安全的方法吗?我应该在哪里存储这些信息?

我相信你们大多数人已经建立了一个或多或少复杂的认证机制,我在征求你的意见.此外,我知道一切都可以被黑客攻击,但我想尽可能地让它变得困难.

不要重新发明轮子!

一些规则:

>身份验证必须是每个用户;
>身份验证必须针对会话,即网络连接和某个给定时间;
>永远不会在磁盘上清楚地存储密码,但使用哈希值;
>永远不要通过网络传输密码,但使用哈希;
>在任何值的散列过程中添加一些“盐”(即随机数据);
>尝试实现某种Zero-knowledge proof.

为简单起见,服务器为客户端创建“挑战”.

典型的实现可以是:

>客户端连接到服务器,说出其用户名;
>服务器检查名称,然后为客户创建并发送质询;
>客户要求用户输入密码,然后用它来回应挑战;
>服务器收到答案,然后检查挑战是否正确.

您可以使用良好的散列算法创建挑战(请参阅our very fast SHA-256 functions),并按照以下步骤操作:

>用户输入其初始密码,然后将SHA-256发送到服务器(通过固定私钥加密,例如);>服务器存储用户名/密码哈希作为键/值;>服务器通过创建随机块(使用一些随机数据的SHA-256,包括当前时间和其他随机化随机值……)来创建挑战;>客户端使用刚刚输入的密码的哈希值对此随机块(从服务器接收)进行哈希处理;>服务器从客户端接收结果,使用存储的用户密码哈希值计算自己的版本,并比较两个值:如果两个值相同,则challenge成功.

网友评论