iOS8指纹识别TouchID

苹果声称“Secure Enclave”模块系统能够安全地管理并识别用户的指纹,并将用户的指纹信息独立地保存在别的系统中,同时通过加密内存和一个硬件随机数字密码发生器进行管理。

Bluetooth

LAContext *context = [[LAContext alloc] init];
    __block  NSString *msg;

    // show the authentication UI with our reason string
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:NSLocalizedString(@"UNLOCK_ACCESS_TO_LOCKED_FATURE", nil) reply:
     ^(BOOL success, NSError *authenticationError) {
         if (success) {
             msg =[NSString stringWithFormat:NSLocalizedString(@"EVALUATE_POLICY_SUCCESS", nil)];
         } else {
             msg = [NSString stringWithFormat:NSLocalizedString(@"EVALUATE_POLICY_WITH_ERROR", nil), authenticationError.localizedDescription];
         }
     }];

System Security

系统安全设计,软件和硬件在所有的iOS 设备中的核心组件都是安全的,这包括启动过程、软件更新、安全区域。这种架构在iOS中是安全的核心,不会有另外一种方式让可以运行设备

在iOS 设备中,硬件和软件紧密的相结合,确保系统的每一个组件都是可信任的,并且系统是作为一个有效的整体。从最初的启动到iOS 软件更新到第三方应用程序,每一个步骤进行了分析和审查,以确保硬件和软件以最佳性能结合,并且正确合理的使用资源

进入设备固件升级模式 (DFU Device Firmware Upgrade)

确定只有未修改的Apple 签名代码,才可以恢复设备进入DFU 模式后,将其恢复到已知的良好状态。DFU 模式可以手动的进入:首先用USB 电缆将设备连接到电脑上,然后同时按住Home 键和电源键,然后过了8秒,放开电源键继续按住Home 键提示:当设备进入DFU 模式屏幕上是不会出现任何东西的,如果苹果Logo 出现了,就是电源键被按住的时间太久了

从这句中可以看出,要想使用TouchID的接口,电脑的mac系统必须是10.10的,手机iOS系统必须是8.0,所以为了这个Demo我也没有升级电脑系统(毕竟还不稳定)。但根据Demo中的代码和文档可以看出,TouchID的基本用法。

Mobile device management (MDM)

据了解:iPhone 5s中的指纹传感器检测到的表皮上突起的纹线。它检测到的不是用户手指外部的死皮指纹,这种指纹很容易被复制。iPhone 5s的指纹传感器利用射频信号,检测用户手指表面下方那一层皮肤的“活”指纹。如果手指与人的身体分离,那么传感器是无法检测到这种指纹的。所以用户不用担心自己的指纹被复制或盗窃之后,被用于解锁设备,因为传感器是无法识别这种“死”指纹的。

Rewards cards Suspending, removing, and erasing cards

3.如果设备能使用TouchID,代码块中返回识别结果BOOL类型的success:

Runtime process security

根据苹果的解释,一个单一的注册指纹与别人指纹出现随机匹配的概率为五万分之一。

Apple Pay components

最近研究了下iOS8的文档,对指纹识别了解了下,并下载了一个官方提供的Demo。但是

图片 1

4.对于检查和识别的两个方法在 LocalAuthentication.framework/Headers/LAContext.h 中定义的:

Payment authorization Transaction-specific dynamic security code

/// Determines if a particular policy can be evaluated.
///
/// @discussion Policies can have certain requirements which, when not satisfied, would always cause
///             the policy evaluation to fail. Examples can be a passcode set or a fingerprint
///             enrolled with Touch ID. This method allows easy checking for such conditions.
///
///             Applications should consume the returned value immediately and avoid relying on it
///             for an extensive period of time. At least, it is guaranteed to stay valid until the
///             application enters background.
///
/// @warning    Do not call this method in the reply block of evaluatePolicy:reply: because it could
///             lead to a deadlock.
///
/// @param policy Policy for which the preflight check should be run.
///
/// @param error Optional output parameter which is set to nil if the policy can be evaluated, or it
///              contains error information if policy evaluation is not possible.
///
/// @return YES if the policy can be evaluated, NO otherwise.
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;

/// Evaluates the specified policy.
///
/// @discussion Policy evaluation may involve prompting user for various kinds of interaction
///             or authentication. Actual behavior is dependent on evaluated policy, device type,
///             and can be affected by installed configuration profiles.
///
///             Be sure to keep a strong reference to the context while the evaluation is in progress.
///             Otherwise, an evaluation would be canceled when the context is being deallocated.
///
///             The method does not block. Instead, the caller must provide a reply block to be
///             called asynchronously when evaluation finishes. The block is executed on a private
///             queue internal to the framework in an unspecified threading context. Other than that,
///             no guarantee is made about which queue, thread, or run-loop the block is executed on.
///
///             Implications of successful policy evaluation are policy specific. In general, this
///             operation is not idempotent. Policy evaluation may fail for various reasons, including
///             user cancel, system cancel and others, see LAError codes.
///
/// @param policy Policy to be evaluated.
///
/// @param reply Reply block that is executed when policy evaluation finishes.
///
/// @param localizedReason Application reason for authentication. This string must be provided in correct
///                        localization and should be short and clear. It will be eventually displayed in
///                        the authentication dialog subtitle. A name of the calling application will be
///                        already displayed in title, so it should not be duplicated here.
///
/// @param success Reply parameter that is YES if the policy has been evaluated successfully or NO if
///                the evaluation failed.
///
/// @param error Reply parameter that is nil if the policy has been evaluated successfully, or it contains
///              error information about the evaluation failure.
///
/// @warning localizedReason parameter is mandatory and the call will throw NSInvalidArgumentException if
///          nil or empty string is specified.
///
/// @see LAError
///
/// Typical error codes returned by this call are:
/// @li          LAErrorUserFallback if user tapped the fallback button
/// @li          LAErrorUserCancel if user has tapped the Cancel button
/// @li          LAErrorSystemCancel if some system event interrupted the evaluation (e.g. Home button pressed).
- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError *error))reply;

Siri

...

Access to personal data

图片 2 图片 3 图片 4

Continuity Safari Suggestions, Spotlight Suggestions, Lookup, #images, and News

每个“Secure Enclave”是单独设置的,不能访问系统其他部分的,拥有自己的独立的UID(唯一的ID),连苹果也不知道这些UID。当设备启动时,Touch ID会临时创建一个秘钥,与“Secure Enclave”的UID配合,对设备的内存空间进行加密。

Secure boot chain 安全启动链

启动过程的每一步都包含了苹果密码签名的组件,来确保完整性,并且只有信任链验证后才能进入。这包括引导装载器、内核,内核扩展,基带固件。安全启动链确保这些最底层的软件不会被篡改

当启动iOS 设备,它的应用处理器会立刻执行只读存储器(ROM)中的代码,这里称之为Boot ROM。这些不可改变的代码,被称之为硬件信任根(hardware root of trust),在芯片制造的时候就烧进去了,而且是默认信任的

引导ROM 代码包含了苹果根CA 的公钥,在允许进入加载之前用来验证iBoot 引导装载器是否是苹果签名的,这个是在信任链中的第一步,来确保接下来的每一步都是苹果签名认证的,当iBoot 完成它的任务时,它会验证和运行iOS 内核。对于搭载S1,A9或则A系列处理器的设备,Boot ROM 验证一个额外的低级引导装载器(Low-Level Bootloader LLB),依次加载和验证iBoot

如果引导过程这一步无法加载或者无法验证下一步的程序,启动会被停止,这个时候设备屏幕会显示 “Connect to iTunes” ,这个就是恢复模式。如果引导Boot ROM 无法加载或则验证低级引导装载器,这个时候会进入到DFU 模式(设备固件升级模式)。对于这两种情况,必须将设备用USB 线缆连接到电脑的itunes 恢复到工厂默认设置。对于手动进入恢复模式更多信息可以查看链接:https://support.apple.com/kb/HT1808

对于蜂窝移动数据接入的设备,基带子系统也在相似的安全启动过程中,利用基带处理器来签名软件和密钥验证

设备有安全区域(Secure Enclave),这个安全区域处理器也会利用一个安全启动的启动过程来确保它由苹果来独立的软件验证和签名

而在苹果发布的文件中,苹果对A7处理器进行指纹识别授权的描述是:A7和Touch ID之间通过一个串行外设接口总线进行通信。A7处理器将数据发到“Secure Enclave”,但并不对数据内容进行读取。加密和身份验证都是使用Touch ID和“Secure Enclave”之间的共享密钥。通信密钥交换使用双方提供的一个随机AES密钥,并随机建立会话密钥和使用AES-CCM传输加密。

Paying with Apple Pay within apps

NS_CLASS_AVAILABLE(10_10, 8_0)

Accessories

2.检查设备是否能用TouchID,返回检查结果BOOL类型success:

App code signing

(转载请注明出处,谢谢!

Apple Watch

1.首先要使用TouchID,要先导入依赖包:LocalAuthentication.framework

Passcode protection

LAContext *context = [[LAContext alloc] init];
    __block  NSString *msg;
    NSError *error;
    BOOL success;

    // test if we can evaluate the policy, this test will tell us if Touch ID is available and enrolled
    success = [context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
    if (success) {
        msg =[NSString stringWithFormat:NSLocalizedString(@"TOUCH_ID_IS_AVAILABLE", nil)];
    } else {
        msg =[NSString stringWithFormat:NSLocalizedString(@"TOUCH_ID_IS_NOT_AVAILABLE", nil)];
    }

Other uses for Touch ID

Touch ID 也可以用于Apple Pay(苹果提供的安全支付),有关更多Touch ID 的信息,请参阅本文档的Apple Pay 部分

另外,第三方应用程序可以使用系统提供的API 来让用户使用Touch ID 或密码进行身份验证。应用程序仅被通知身份验证是否成功; 它无法访问Touch ID 或与注册指纹相关联的数据

Keychain 也一样可以使用Touch ID 来解锁,只有通过指纹识别或者输入密码才能被访问。应用程序开发人员还有API 来验证用户是否设置了密码,因此可以使用Touch ID对钥匙串项进行身份验证或解锁

在iOS 9 及以后,开发者可以做以下一些事情:

  • Require that Touch ID API operations don’t fall back to an application password or the device passcode. Along with the ability to retrieve a representation of the state of enrolled fingers, this allows Touch ID to be used as a second factor in security sensitive apps.
  • Generate and use ECC keys inside Secure Enclave. These keys can be protected byTouch ID. Operations with these keys are always done inside Secure Enclave afterSecure Enclave authorizes the use. Apps can access these keys using Keychainthrough SecKey. SecKeys are just references to the Secure Enclave keys and the keys never leave Secure Enclave.

Touch ID 也可以直接解锁 iTunes Store、App Store、iBooks Store 的购买项目,用户从而不用输入Apple ID 的密码。当用户授权购买的时候,设备和商店之间交换认证令牌。令牌和加密随机数保存在安全区域(Security Enclave)中,这个随机数是被所有设备和iTunes Store 共享的安全区域密钥进行签名的。在iOS 10 中,Touch ID 保护安全区域中的ECC 密钥,这个密钥是用于通过认证购买的请求

苹果在2014年6月3日的WWDC2014开幕式上推出了新版iOS8系统,界面上iOS8与iOS7相比变化不大,不过在功能方面进行了完善。iOS8通知中心更加强大,支持消息直接回复操作,并支持QuickType和第三方输入法。短信功能改进明显,支持群聊,发送语音、视频,分享地理位置等。从终端用户的角度看,iOS8的许多新功能早已出现在其他平台中。iOS8会向第三方软件开放TouchID访问,这意味着可以使用该感应器登陆银行应用等。

How Apple Pay uses the NFC controller

欢迎小伙伴们对测试结果检验一下啊!

Apple Security Bounty

第三方应用可以使用TouchID接口,意味着未来的很多应用都可以用指纹识别功能了。你可以选择Touch ID登陆第三方应用程序,不需要输入密码,你的指纹数据是被保护的,在没有被允许的情况下别的程序是访问不到它的。

Widget in Non-News Countries

How Apple Pay uses the Secure Element

iCloud Keychain

App Groups

System Security

Secure Notes

Activation Lock

Glossary

Device Controls

AirDrop security

Keybags

Secure boot chain

Location Services

Data Protection classes

Wi-Fi

Touch ID security

仅当Home按钮的电容钢环检测到手指的触摸时,指纹传感器才会起作用,这将触发高级成像阵列扫描手指并将扫描发送到安全区域

光栅扫描临时存储在安全存储器内的加密存储空间中,同时被矢量化分析,然后被丢弃。这个分析是使用subdermal ridge flow angle mapping 技术,这是丢弃重建用户实际指纹所需的细节数据的有损过程。生成的结果是没有任何身份信息相关的数据,并且加密存储在安全区域,只能有安全区域访问,而且永远不会发送給苹果或者备份在iCloud、iTunes 上面

Touch ID 指纹识别传感器

Touch ID 是指纹识别传感器系统,可以更快、更简单、更安全的解锁手机。该技术会从任何角度读取指纹数据,并随着时间的推移更多地了解用户的指纹,随着每次使用的其他重叠节点被识别,传感器继续扩展指纹图

Touch ID 可以让用户使用更长、更复杂、更实用的密码,因为用户现在不用频繁地输入密码。Touch ID 克服了用密码解锁的不便,但不是通过替换它来解决,是在一定的时间和场景内可以使用 Touch ID 来安全的访问设备

Privacy policy

TLS

How Touch ID unlocks an iOS device

如果Touch ID关闭,设备锁定时,保留在安全区域中的Data Protection class Complete的密钥将被丢弃。在用户通过输入密码解锁设备之前,该类中的文件和钥匙串项目是无法访问的。

当Touch ID 开启的时候,这个密钥不会在设备锁定的时候被丢弃。相反,这个密钥会被加到在安全区域内的Touch ID 子系统的密钥中。当用户尝试解锁设备时,如果Touch ID识别用户的指纹,则它会提供用于一个解密 Data Protection keys 的密钥,并且设备被解锁。这个解锁的过程需要Data Protection 和 Touch ID 子系统共同协作提供额外的保护

如果设备重新启动,并且在48小时没有解锁或五次失败的Touch ID 识别尝试后,安全区域会丢弃Touch ID 解锁设备所需的密钥

Network Security

Restrictions

System Software Authorization 系统软件授权

苹果公司定期发布软件更新来解决新兴的安全问题,并且提供新功能,同时这些支持更新到所有的iOS 设备,用户在设备上接受到iOS 更新提示,可以通过iTunes 和无线来更新,并且鼓励大家快速采用最新的安全补丁

上面所述的启动过程有助于确保在设备上只能安装苹果签名的代码。防止设备被降级到旧版本以致缺乏最新的安全保护,iOS 使用这一过程被称之为系统软件授权。如果降级是可能的,攻击者可以在设备安装一个旧版本的iOS 系统来利用漏洞,但是这个漏洞已经在新版本被修复了

在设备上有安全区域(Secure Enclave),安全区域处理器也会利用系统软件授权来确保软件的完整性,并且防止降级设备。具体可以看接下来的安全区域章节

iOS 软件更新可以使用iTunes 更新,也可以在设备上使用空中下载技术(over the air OTA)。利用iTunes 更新,会下载一份完整的iOS 系统并安装,用OTA 更新只会下载必要的组件进行更新,提高网络效率,并不会下载整个操作系统。另外,软件更新可以被缓存在macOS 服务器运行在本地网络服务,所以iOS 设备不需要访问苹果服务器获取必要的更新数据

在iOS 升级过程中,iTunes 更新(或者利用设备的OTA 更新),会连接到苹果安装授权服务器,然后发送一系列的加密测量结果(cryptographic measurements ),里面有每个安装包需要更新的信息(例如:iBoot、内核、OS 映像),还有一个临时随机的不重复的(anti-replay)值,设备的唯一ID(ECID)

授权服务器会检查这个加密的测量结果,查看是否允许安装,如果匹配成功,会将ECID 加到这个测量结果中并且标记这个结果。在升级过程中,服务器将一组完整的签名数据传递给设备。添加一个处理过的ECID 到请求设备,只对加密的测量结果授权和认证,服务器确保只会由苹果提供更新

启动时信任链会评估验证这个签名是从苹果来的,和从磁盘中加载这个测量结果,结合设备的ECID,匹配所要更新的签名

这些步骤确保为特定的设备授权,和一个设备的旧版系统的不能被复制到另外一个设备上面去,可以防止攻击者保存服务器的响应,并且利用它来篡改设备或修改系统软件

Internet Services

本文由太阳集团所有网址16877发布于www.16877.com,转载请注明出处:iOS8指纹识别TouchID

您可能还会对下面的文章感兴趣: