首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地智能卡认证

本地智能卡认证
EN

Security用户
提问于 2017-03-17 14:25:19
回答 2查看 658关注 0票数 3

我有一个智能卡,它有PKCS#11或其他类似的接口,它包含证书和私钥。

我想使用智能卡对用户进行本地(无网络)身份验证,并在其上使用PIN保护的数据。

什么是一个好的方案/算法来做它和信任它?

我的第一个想法是做以下工作:

  1. 输入用户名/PIN
  2. 以用户身份登录到智能卡(如果失败,返回false)
  3. 检查证书的有效性(如果无效,返回false)
  4. 检查证书中用户名是否等于CN (如果不等于,则返回false)
  5. 生成随机数据并在智能卡上使用私钥签名
  6. 检查签名是否有效(如果没有,则返回false)
  7. 返回真

这说得通吗?还是说这方面有什么标准?

EN

回答 2

Security用户

回答已采纳

发布于 2017-03-18 14:33:24

我建议进行以下修改

  1. 输入用户名/PIN
  2. 以用户身份登录到智能卡(如果失败,返回false)

通常,带有数字证书的智能卡没有“用户名”。解锁所选证书的私钥所需的引脚。

  1. 检查证书的有效性(如果无效,返回false)

正确,这是筛选可用证书所必需的。您可以有几个(我不知道这是否是您的方案)

  1. 检查证书中的用户名是否等于CN (如果不是,返回false),这一步骤通常是在数字签名之后完成的,因为您不知道用户要选择什么证书。

此外,您还假设用户已被记录,CN包含用户名。当使用智能卡进行身份验证时,过程通常是相反的:用户选择证书,用户名从证书属性(CN、SERIALNUMBER或自定义属性)中提取。

  1. 生成随机数据并在智能卡上使用私钥签名
  2. 检查签名是否有效(如果没有,则返回false)
  3. 检查已使用证书的撤销
  4. 从证书中提取用户名并检查它是否被授权

  1. 返回真
票数 0
EN

Security用户

发布于 2018-04-21 09:48:43

因为这是一个相当理论性的问题,而且您没有指定平台- Windows/Linux/Mac和基础设施AD/独立/工作组。推出方案/要求等,而且由于没有网络基础设施-运行证书颁发机构是不可能的。

我建议简化你的方法:

  1. 使用PKCS#11特性自定义数据。
  2. 详细的数据格式以保存卡上的UserLogin/Password/WorkstationName
  3. 将智能卡序列号保存在允许的卡列表中。

为了认证:

  1. 用户插入卡并输入PIN。确认PIN。登录卡。
  2. PKCS#11的读取器数据。
  3. 检查用户名/工作站名称/卡系列是否正常-这将是您的第2因子身份验证
  4. 将用户名/密码(从卡)传递给本地系统身份验证(Windows/Mac/Windows)
  5. 处理错误并显示UI

伪造智能卡序列号是相当复杂的攻击,不太可能发生。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/154185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档