如何使用Delphi创建视觉质询/响应以恢复对应用程序的访问?

时间:2010-11-22 19:01:05

标签: delphi authentication cryptography challenge-response

我对在Delphi中创建挑战/响应类型过程感兴趣。方案是这样......我们有2台计算机...... 1属于用户,1属于支持技术人员。

用户被锁定在某个程序之外,为了获得一次访问权限,我想要:

  1. 向用户显示挑战短语,例如“28394LDJA9281DHQ”或某种类型的合理唯一值
  2. 用户将致电支持人员并阅读此挑战(在支持人员验证其身份后)
  3. 支持人员将此挑战值键入其系统中的程序,该程序将生成响应,与响应一样独特,例如“9232KLSDF92SD”
  4. 用户键入响应,程序确定这是否是有效的响应。
  5. 如果是,则授予用户一次访问该应用程序的权限。
  6. 现在,如何做到这一点是我的问题?我将有2个相互之间具有网络访问权限的应用程序。 Windows中是否有任何可以帮助我完成此任务的功能?

    我相信我可以在CryptoAPI中使用某些功能,但我真的不确定从哪里开始。我很感激您提供的任何帮助。

2 个答案:

答案 0 :(得分:8)

我将实施基于MD5的质询 - 响应身份验证。

来自维基百科 http://en.wikipedia.org/wiki/CRAM-MD5

  

协定

     
      
  1. 挑战:在CRAM-MD5身份验证中,服务器首先发送   客户挑战字符串。
  2.   
  3. 响应:客户端使用用户名后跟空格进行响应   字符,然后是一个16字节的摘要   十六进制表示法。摘要是   HMAC-MD5的输出与用户的输出   密码作为密钥,和   服务器的原始挑战   消息。
  4.   
  5. 比较:服务器使用相同的方法计算预期值   响应。如果给定的响应和   然后预期的响应匹配   身份验证成功。
  6.         

    这提供了三种重要类型   安全

         
        
    1. 首先,其他人无法在不知道密码的情况下复制哈希。   这提供了身份验证。
    2.   
    3. 其次,其他人不能重播哈希 - 它依赖于   不可预测的挑战。这是   各种称为新鲜度或重播   预防。
    4.   
    5. 第三,观察者不学习密码。这称为保密。
    6.         

      这个的两个重要特征   提供这三个的协议   安全性好处是单向散列   和新鲜的随机挑战。

此外,您可以在挑战字符串中添加一些应用程序标识,以便对挑战的发件人进行双重检查。

重要提示:它有一些缺点,请仔细评估它们对您的影响。

答案 1 :(得分:7)

关于口头挑战/回应策略:我们使用这种方法在全球五千个工作站上许可一个利基应用超过十年。我们的支持团队将其称为“导弹发射代码”,因为它与旧电影中的经典导弹发射认证过程相似。

这是一种非常耗时的保护程序的方法。它耗费了大量的员工和客户的时间来读取用户的代码。他们都讨厌它。

您的情况/背景可能会有所不同。也许你不会像我们那样经常使用它。但这里有一些建议:

  1. 仔细考虑代码的长度和内容:大多数用户(和支持人员)都不喜欢输入大量字符。许多用户都是坏打字员。考虑一个长字符串,包括标点符号和区分大小写是否与安全添加量相比过度负担。

  2. 经过多年的口头挑战/回应实施后,我们将其保留(作为后备),但增加了一个简单的自动化系统。我们选择使用FTP而不是更复杂的Web方法,这样我们就不必在我们的内部服务器上运行任何软件(或与我们的IT人员打交道!)

  3. 基本上,我们使用FTP文件进行以前在手机上进行的交换。服务器将文件放在包含质询短语的FTP服务器上。文件的名称是客户的名称。我们的支持人员有一个程序可以在我们的ftp站点上自动创建该文件。

    我们的工作人员指示客户点击读取FTP文件的热键,对其进行身份验证,然后将响应文件放回服务器上。

    我们的支持人员的软件一直在轮询等待客户的软件来创建响应文件。当它看到文件时,它会下载并确认其内容,并从服务器中删除它。

    当然,您可以根据需要在给定的会话中进行多次此类交换,以实现您的目标。

    文件中的数据可以使用与口头使用相同的MD5密钥,因此它可以保证您的安全。

    此系统的一个缺点是用户必须具有FTP访问权限。我们发现大多数用户(所有商家)都可以使用FTP访问。 (当然,您的客户群可能不会......)如果我们在现场的应用程序无法访问我们的FTP站点,它会清楚地宣布问题,以便我们的客户可以请他们的IT人员请求他们打开访问权限。与此同时,我们只回到口头代码。

    我们使用普通的Indy FTP工具没有问题。

    毫无疑问,这种方法存在一些缺点(可能包括一些我们没有想过的方法。)但是,对于我们的需求,它一直很棒。我们的支持人员和客户都喜欢它。

    很抱歉,如果这些与您无关。希望这可以帮助你。