IOS生物信息验证(Touch ID&Face ID)

Touch ID 指纹识别的原理

Apple在 iPhone 5s 的发布会上公布了全新的指纹识别安全技术,也就是Touch ID,开创了生物安全识别技术在便携设备上使用的新篇章.

我们注意到,Home按钮上有一圈金属环,这个金属环起到了感应手指的功能,然后唤醒 Touch ID 来读取指纹.
Touch ID 传感器的厚度只有 170 微米,拥有 500 ppi 高分辨率,可读取极小的指纹细节.传感器可从皮肤皮下层指纹的一些小部分拍摄高分辨率图像,然后会分析该信息,根据三种基本指纹类型(弧形纹、箕形纹或斗形纹)将指纹分类,它会绘制比人眼不可见的纹路细节,确保指纹读取准确无误.
Touch ID 可从 360 度方向读取指纹,随后创建指纹的某种数学表达式,并将其与已注册的数据进行比较,以确定是否匹配。如果匹配,便可替代密码来解锁设备或通过其他操作.
根据苹果官方的描述,使用过程中,Touch ID 会向已注册的指纹数据里持续的添加新的特征数据,随着时间的推移,这能不断提高匹配准确度,也能进一步的提高安全性。
Touch ID被破解的概率是五万分之一.

Face ID 面部识别的原理

人脸识别允许解锁iPhone X,通过检测你的面部几何形状,并使用iPhone X A11芯片神经引擎将其与存储的数学模型进行匹配.不过,即使在配置为使用Face ID的设备上,安全的基石仍然是用于加密用户数据的密码.换句话说,Face ID通过减少用户输入密码的频率,使得使用更强的密码更加方便.根据苹果公司的数据,一个随机的人有1 / 100万的概率骗过人脸识别让人相信是你,这比Touch ID的5万分之一的概率有了显著的提高.
这款名为TrueDepth的iPhone X相机使用红外技术创建人脸深度地图,然后将其连同相应的2D红外图像发送到iPhone的Secure Enclave.使用深度信息使得数码照片无法解锁设备,因为它们不包含深度信息.此外,面部识别要求你的眼睛是睁开的,并看着设备,这使得你很难在没有意识到的情况下解锁它(例如,在睡觉时).
人脸识别实际上使用多个神经网络,可以分为两类:人脸识别和抗欺骗.面部识别神经网络可以用于帽子、围巾、眼镜、隐形眼镜和许多太阳镜.反欺骗神经网络的目的是防止使用照片或面具解锁手机.
从红外图像采取的信息构建数学模型并只存储到Secure Enclave.在解锁尝试期间,将存储的模型与人脸的数学表示进行匹配.由于一个人的外貌会随着时间的推移而变化,例如,留胡子或刮胡子,苹果公司已经包含了一种机制来重新训练神经网络,这样它们就可以随着时间的推移而进化,并适应这个人的脸.解锁成功后,自动进行再培训.相反,如果解锁失败,则要求用户输入密码,如果密码正确,则使用新的人脸ID数据对神经网络进行再培训.
除了解锁设备外,第三方应用程序也可以使用Face ID对用户进行身份验证.具体来说,所有与Touch ID兼容的应用程序都将支持Face ID,而无需修改任何代码.

生物信息识别的使用
  • 1首先引入LocalAuthentication.framework

      /**包含:
      LAContext.h //
      LAError.h
      LAPublicDefines.h
      LocalAuthentication.h
      */
      #import <LocalAuthentication/LocalAuthentication.h>
    
  • 2 LAError.h

      /// 身份验证未成功,因为用户未能提供有效凭据。
      LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
    
      /// 认证被用户取消(例如点击取消按钮)。
      LAErrorUserCancel = kLAErrorUserCancel,
    
      /// 身份验证被取消,因为用户单击了后退按钮(输入密码)。
      LAErrorUserFallback = kLAErrorUserFallback,
    
      /// A系统取消了身份验证(例如,另一个应用程序进入前台).
      LAErrorSystemCancel = kLAErrorSystemCancel,
    
      /// 无法启动身份验证,因为设备上没有设置密码.
      LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,
      
      /// 身份验证被应用程序取消(例如,在身份验证过程中调用invalidate)。
      LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,
    
      /// 实例化的LAContext对象失效,再次调用evaluation...方法则会弹出此错误信息
      LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext,
    
      /// 无法启动身份验证,因为该设备上无法使用生物计量。
      LAErrorBiometryNotAvailable NS_ENUM_AVAILABLE(10_13, 11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0) = kLAErrorBiometryNotAvailable,
    
      /// 无法启动身份验证,因为生物计量学没有登记的身份。
      LAErrorBiometryNotEnrolled NS_ENUM_AVAILABLE(10_13, 11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0) = kLAErrorBiometryNotEnrolled,
    
      /// 身份验证没有成功,因为有太多失败的生物测定尝试,生物测定现在被锁定。解锁生物统计学需要密码,例如评估LAPolicyDeviceOwnerAuthenticationWithBiometrics将需要密码作为先决条件。
      LAErrorBiometryLockout NS_ENUM_AVAILABLE(10_13, 11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0) = kLAErrorBiometryLockout,
    
      /// 身份验证失败,因为它需要显示UI,而使用interactionnotal属性禁止显示UI。
      LAErrorNotInteractive API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0), tvos(10.0)) = kLAErrorNotInteractive,
    
  • 3 LAPublicDefines一些相关的宏定义

  • 4 LAPolicy

    • 两种鉴定方式:

        ///设备所有者将使用生物识别方法(Touch ID或Face ID)进行身份验证。需要生物特征认证。
        ///如果生物计量学不可用、不可注册或不可锁定,
        ///则使用LAErrorBiometryNotAvailable、LAErrorbiometrynotenrolled、LAErrorBiometryLockout对该策略进行评估将失败。
        ///如果没有密码,生物统计学就不能使用,也就是说,当生物统计学可用时,注册并没有锁定,
        ///但是没有设置密码,那么使用LAErrorPasscodeNotSet的评估就会失败。
        
        ///Touch ID authentication对话框包含一个默认标题为“cancel”的取消按钮,
        ///可以使用localizedCancelTitle属性定制该按钮,以及一个默认标题为“Enter Password”的后退按钮,
        ///可以使用localizedFallbackTitle属性定制该按钮。
        ///后退按钮最初是隐藏的,并在第一次触摸ID尝试失败后显示。
        ///单击任何一个按钮都会导致evaluatePolicy调用失败,
        ///返回一个不同的错误代码:LAErrorUserCancel或LAErrorUserFallback。
        
        /// Face ID身份验证从动画化HUD开始。
        /// 如果第一次尝试成功,HUD就会消失,不会显示其他UI。
        /// 如果第一次尝试失败,LocalAuthentication将显示一个对话框,其中有两个按钮:“Cancel”和“Try Face ID Again”。
        /// 第二次失败后,按钮为“Cancel”和“Enter Password”,其语义与Touch ID相同。
        /// 生物认证将被锁定后,5次不成功的尝试。之后,用户必须输入密码解锁。
        /// 密码可以通过LAPolicyDeviceOwnerAuthentication在锁定屏幕甚至app中输入。
        /// 锁定屏幕解锁是首选的用户体验,因为我们通常不希望用户在应用程序的请求下输入密码。
        
        LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(10_12_2, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics,
      
        ///设备所有者将通过生物统计学或设备密码进行身份验证。
        ///需要生物识别或密码认证。如果生物统计学是可用的,登记和不锁定,用户首先要求它。
        ///否则,他们被要求输入设备密码。
        ///如果不启用密码,则使用LAErrorPasscodeNotSet将导致策略评估失败。
        ///生物特征认证对话框的行为类似于LAPolicyDeviceOwnerAuthenticationWithBiometrics。
        ///然而,代替“输入密码”按钮的是“输入密码”按钮,当点击该按钮时,它会切换身份验证方法并允许用户输入设备密码。
        ///密码认证将被锁定后,6次不成功的尝试与逐步增加的后退延迟。
        LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication
      
    • LATouchIDAuthenticationMaximumAllowableReuseDuration

        ///该属性表示从设备解锁后多长时间内不需要重新验证的时间.
        ///默认值为0,表示不采用设备解锁来授权应用,允许最大的设置时长为5分钟.
      
  • 5 使用

      - (void)biometricsAuthentication {
      	// 初始化上下文对象
      	LAContext* context = [[LAContext alloc] init];
    
      	NSError *error;
      	NSString *result = @"提示语句";
      	context.localizedFallbackTitle = @"";//输入密码按钮自定义文字
    
      	// 首先判断设备支持状态:canEvaluatePolicy:error: 返回YES:支持
      	if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
      		// 支持指纹验证
      		[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {
          		if (success) {
              		//验证成功,主线程处理UI
          		} else {
              		switch (error.code) {
                  		case LAErrorSystemCancel:
                  		{
                      		//切换到其他APP,系统取消验证Touch ID
                      		break;
                  		}
                  		case LAErrorUserCancel:
                  		{
                      		//用户取消验证Touch ID
                      		break;
                  		}
                  		case LAErrorUserFallback:
                  		{
                      		[[NSOperationQueue mainQueue] addOperationWithBlock:^{
                          		//用户选择输入密码,切换主线程处理
                      		}];
                      		break;
                  		}
                  		case LAErrorAuthenticationFailed:
                  		{
                  			/// 身份验证未成功.未能提供有效评剧
                      		break;
                  		}
                  		case LAErrorTouchIDLockout:
                  		{
                      		///TOUCH ID被锁定
                      		break;
                  		}
                  		case LAErrorAppCancel:
                  		{
                      		/// 身份验证被应用程序取消(例如,在身份验证过程中调用invalidate).
                      		break;
                  		}
                  		case LAErrorInvalidContext:
                  		{
                      		/// 实例化的LAContext对象失效
                      		break;
                  		}
                  		default:
                  		{
                      		[[NSOperationQueue mainQueue] addOperationWithBlock:^{
                          		//其他情况,切换主线程处理
                      		}];
                      		break;
                  		}
              		}
          		}
      		}];
      	} else {
      		//不支持指纹识别
      		switch (error.code) {
          		case LAErrorTouchIDNotEnrolled:
          		{
              		///Touch ID未注册
              		break;
          		}
          		case LAErrorPasscodeNotSet:
          		{
              		/// 无法启动身份验证,因为设备上没有设置密码
              		break;
          		}
          		default:
          		{
              		NSLog(@"TouchID not available");
              		break;
          		}
      		}
      	}
      }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值