Secure Enclave相关猜想

小编 2026-06-05 阅读:503 评论:0
其实 系统SecGenerateKeyPair生成 或者openssl生成 密钥对 是一样的 用硬件 也就是 Mac系统生成.der和p12文件 植入到代码中 这样生成的密钥对也是用的openssl 和用代...

其实 系统SecGenerateKeyPair生成 或者openssl生成 密钥对 是一样的 用硬件 也就是 Mac系统生成.der和p12文件 植入到代码中 这样生成的密钥对也是用的openssl 和用代码生成的是一样的 而且每次生成密钥对 都是随机的串码 每次都不同 所以主要问题在于存储 因为我们的touchID等登录 需要用同一对密钥对 公钥在注册touchID的时候发给了server 密钥要在将来用touchID登录的时候用来签名 所以问题在于 如何存储这个密钥

主要问题是在 如何存储

SecGenerateKeyPair生成 可以使用Secure Enclave存储到keychain

但是这样存储 TouchID的逻辑整个就变化 不再是点击按钮 弹出TouchID 而是 点击按钮 从keychain去获取密钥 这时候 因为密钥存储是被TouchID保护的 会自动弹出TouchID 验证通过才能拿到密钥 然后做签名验证  包括对TouchID的验证都可以设置
这种情况 失败三次五次的逻辑没法控制 弹出的信息也没法控制  点击按钮获取密钥 弹出touchID验证 三次后 消失 再次点击 再弹出 验证两次 这时候 会弹出锁屏框 再次点击还能继续验证touchID 也就是五次的时候 没法停止了


使用SecureEnclave生成密钥对并存储 将公钥交给server 然后用密钥来签名 看似拿到了密钥 其实并没有 只是一个引用


经过测试 发现 好像生成的时候 不需要验证touchID 拿出来用的时候 需要验证touchID
苹果在这边举了个简单例子,如何利用Touch ID进行登录。客户端生成一对公私钥,公钥发给服务器,客户端在通过Touch ID校验后,加密一段内容(私钥签名操作),将内容和结果发送给服务器,服务器取出公钥进行验签。如果一致,则通过验证。

 

之前openssl生成的 存储在keychain 没有保护 越狱就能拿到

系统生成 通过Secure Enclave存储在keychain 被TouchID保护 需要验证TouchID才能拿到

 

经过测试 发现 只要带上kSecAttrTokenIDSecureEnclave  就不能生成 密钥对   应该是必须配合TouchID才能生成吧
或者尝试在真机测试吧

 

切换到keypair 能否实现同样的 处理三次五次的逻辑  这个逻辑应该是可以实现的 但是不能确定
能否生成和openssl同样的 公钥密钥 不影响使用的  当然可以

 

现在简单的方法是 加混淆 加密后再存储 例如 将密钥分成三段 以不同的名字存起来 混淆 给密钥中 比如所有字母a后添加字母b 类似这样的混淆 然后可以做RSA Base64加密在存储

 

 

 

 

目前来看 Secure Enclav 生成的公钥 发送给server 私钥存储 受TouchID保护 取出密钥的时候 需要验证TouchID 并且取出的只是一种映射 不是真正的密钥 这里的TouchID我应该是不能控制的 但是三次五次的逻辑应该可以保证 验证三次 消失 再点击按钮 继续验证两次 消失 再点击 没反应 所以 建议是在三次的时候 就直接修改页面 改到用账户密码登录 message应该是不能控制 而且只能生成256位的ECC算法的密钥对
kSecAttrKeyTypeEC  ECC
kSecAttrKeyTypeECSECPrimeRandom  ECC椭圆曲线   椭圆曲线是iOS10之后的 包括一些新的方法 都是iOS10之后 具体看官方demo
都是256位

还有类似 指纹有变更 这种情况 现在能不能拿到 也不清楚 只是知道 可以设置成 指纹有变更 就密钥取不出来 这个是可以设置的 但是能不能具体拿到 是因为这个原因 然后对应的给message  这个还不确定

麻烦的点很多

注意在产生新的公私钥对前需要调用 deleteKeyAsync ,如果私钥已经存在调用 SecKeyGeneratePair 是会产生新的公私钥对,但是keychian中已经存在的私钥是不会被替换的

 

其实还有一个想法 就是还是用openssl生成RSA的密钥对 然后 通过keychain存储起来 但是受touchID保护 拿出来的时候 需要验证touchID 也就是逻辑差不多 但是不用Enclav去存储 也就不用生成ECC密钥 而且这种方法 应该可以控制touchID的回调 应该可以控制 。。。 暂时了解这些


现在最大的问题是 怎么能配合TouchID使用 也就是获取密钥的时候 弹出的TouchID验证 怎么监听他的回调 从而实现 三次五次message 且刷新页面的需求

而且记得要加版本判断 iOS版本>=11.3的时候 就是kSecAccessControlBiometryAny 因为包含了FaceID 而不是
kSecAccessControlTouchIDAny

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表