设备识别码(以下简称“设备ID”)相当于设备的“身份证”、“指纹”,采集设备识别码是识别、关联、定位设备的一种最常见做法,且以手机等终端设备为代表的用户常用设备,设备ID往往与个人身份有紧密的关联关系,因此设备ID被App等广泛应用于服务用户的场景。在产品运营方面,App等可以使用设备ID统计用户的使用习惯,优化产品功能,设置个性化界面;在广告营销方面,App、SDK等可以借助设备ID追踪和分析用户浏览操作记录、关联用户行为和活动轨迹,形成用户精准画像并进行广告推送。同时,设备ID也是当下最为广泛使用的数据汇聚、交换、补充的关键连接符;在安全风控方面,App等可以通过监测设备ID并采取封堵措施来规避“薅羊毛”、刷单、刷票、刷粉、数据造假、作弊、恶意灌水、恶意差评等黑灰产恶意行为,也可以用于监测用户账号是否存在异常登录、异常操作等保护用户账号安全。

不难看出,以上几个主要使用场景几乎是所有App的现实需求,可以说手机设备ID在整个互联网生态中扮演了举足轻重的角色。然而,近年来,基于手机设备ID精准的用户画像和定向广告,跨平台跨组织的数据交换等饱受争议,手机设备ID的强制、过度采集行为也受到广泛质疑,到底如何正确看待各类手机设备ID的特性,获取机制是否可以做出相应限制,本文将对手机设备ID进行分类分析并探讨解决方案。

根据手机设备ID所代表的含义、获取和生成方式等不同,主要分为以下几类:

类别一:手机设备自身的唯一识别码

1、国际移动设备识别码(IMEI :International Mobile EquipmentIdentity),即通常所说的手机序列号、手机“串号”,用于在移动电话网络中识别每一部独立的手机等移动通信设备,相当于移动电话的身份证,IMEI号共有15~17位数字。国际移动设备识别码一般贴于机身背面与外包装上,同时也存在于手机存储器中。

安卓系统需要用户开启READ_PHONE_STATE权限(在权限组中一般体现为“电话”或“设备信息”权限)后才能读取IMEI号,很多安卓App向用户索要“电话”权限,其实主要目的是为了读取IMEI号,苹果手机iOS 5以上系统中App无法读取IMEI号。

2、移动设备识别码(MEID:Mobile Equipment Identifier)是支持CDMA手机等移动通信设备唯一的识别码。MEID的数字范围是十六进制的,和IMEI号的格式类似。安卓系统需要用户开启READ_PHONE_STATE权限(在权限组中一般体现为“电话”或“设备信息”权限)后才能读取MEID号,苹果手机iOS 5以上系统中App无法读取MEID号。

图1 手机中的IMEI和MEID

3、Android_ID是运行安卓系统的手机等设备随机生成一串64位的号码,每一个Android_ID都是独一无二。Android8.0及更高版本中,Android_ID的值通过签名密钥等确定范围。在低于Android8.0的版本中,Android_ID在用户第一次启动设备时随机生成。在恢复出厂设置、或重装系统后,Android_ID会被重置。获取Android_ID不需要开启任何系统权限,可直接通过运行相应代码获取。

图2 AndroidID

4、设备序列号(SN:SerialNumber)通常用于验证产品的出厂生产的正规性和合法性,也称作机器码、认证码、注册码,通常可在系统信息中的序列号一栏看到,不可更改。App通常可以使用命令、调用READ_PHONE_STATE权限相关函数读取SN值,但是因操作系统、手机型号版本等不同存在差异。

图3 设备序列号

5、广告标识符(IDFA:identifierForIdentifier)是苹果手机iOS 6及以上系统给广告商提供的追踪用户的标识符,广告标识符存储在手机系统中,可被每一个App获取。同时,用户可以根据自己的意愿来还原或者禁止获取IDFA。用户可以通过 设置--->隐私--->广告 来操作,界面如下图,当用户选择还原IDFA或重置手机系统时,IDFA值会发生变化。

图4 苹果iOS系统可重置IDFA值

6、应用开发商标识符(IDFV - Identifier For Vendor)是苹果iOS系统给App开发商生成的唯一性标识符,同一个开发商开发的不同的App获取的IDFV值相同,常用于自开发App及跨App追踪用户行为。

此外,还有通用唯一标识符(UUID)被经常性使用,标准UUID是一个128位的值,可以保证在空间和时间上的唯一性,由RFC 4122定义。不同系统中可能会使用该格式对其中的相关软件、应用程序生成UUID。比如,旧版本iOS系统中App可以采集该值来识别用户身份,如果用户完全删除然后重新安装该应用程序,则UUID将被重置,新版iOS系统中对采集UUID做出了限制。

类别二:移动设备中其他组件的标识符

1、国际移动用户识别码(IMSI:International Mobile SubscriberIdentification Number)是区别移动用户的标志,储存在SIM卡中,在全网和全球范围内唯一。安卓系统需要用户开启READ_PHONE_STATE权限(在权限组中一般体现为“电话”或“设备信息”权限)后才能读取IMSI号,苹果手机iOS 5以上系统中App无法读取IMSI号。

2.、手机SIM卡序列号(ICCID:ICC identity是集成电路卡标识,是唯一标识SIM卡的序列号。ICCID存储在SIM卡中,完整的ICCID为19或20个字符。安卓系统需要用户开启READ_PHONE_STATE权限(在权限组中一般体现为“电话”或“设备信息”权限)后才能读取ICCID号。

3、MAC(Media AccessControl)是介质访问控制地址,在移动设备上分为蓝牙MAC地址和WLAN MAC地址,分别是移动设备上蓝牙部件和网络部件的唯一的网络标识,由网络设备制造商生产时写在硬件内部,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共六个字节(48位)。获取蓝牙MAC和WLAN MAC通常需要开启网络数据、蓝牙功能和WLAN功能和相关权限,然后通过API等方式获取MAC地址,新版本iOS对获取MAC地址做出了限制。

图5 蓝牙MAC地址和WLAN MAC地址

类别三:软件等生成的唯一识别符

该类标识与前述标识不同,是App安装之后通过一系列拼接、计算等机制生成的唯一性标识,而非硬件设备和组件自有标识。此类标识本身并不存在于设备中,开发者对生成规则有较强的主导权,往往也只能在自有产品生态中使用。由于硬件设备识别码的采集限制越来越严格,该方式已经越来越多的被采用。常见的有以下几类:

1、OpenUDID通常是通过第一个带有OpenUDID SDK包的App生成,最初OpenUDID是为了代替苹果公司禁用的UDID,并在开源社区开放设备标识生成方法。在删除第一个带有OpenUDID SDK包的App后,OpenUDID的值会重新生成。

2、InstalltionID是在App安装后第一次运行时生成的一个ID。不同的App会产生不同的Installtion ID,相同的App重新安装也会产生不同的Installtion ID。Installtion ID通常用来跟踪应用安装数量。

3、Pseudo-Unique ID是一种伪唯一ID,这种ID主要通过读取手机的ROM版本、制造商名称、CPU类型以及其他硬件详细信息后通过计算生成一串标识号。该标识符所基于的源数据往往可以不需要用户开启系统权限,但是在唯一性的可靠度不高。

事实上,App、SDK开发者还习惯根据已采集的设备ID、设备相关的随机码,以及用户账户、使用手机的一些习惯性行为、特定历史记录等等进行拼接和建模计算,最终生成一类自定义的OpenID,并广泛应用于各类场景中。

除以上类型,应用商店及应用商店SDK还可能会在App开发框架、应用上架等环节赋予App一个唯一标识符,如手机安装Google Play的SDK或者设备本身有Google Play的,会生成GAID

类别四:网络环境中的标识符

此类标识本身并不属于手机等移动设备,而是由手机所处的网络环境进行广播后手机可以接收到的数据,该类数据可能包含或能分析出用户的地理位置、所处场所等信息,在一定条件下进行加工、关联分析,也能生成具有唯一性属性的标识符,典型的包括:

1、BSSID(Basic Service Set ID),简单来说,在手机使用场景下,BSSID是无线网络热点的MAC地址,是由 IEEE 802.11-1999 无线局域网规范定义,可以通过手机中的网络模块进行扫描附近热点、尝试连接等方式获取BSSID。

2、SSID(Service SetIdentifier)是服务集标识符,通常不超过32位,常用于标识一个可用的无线网络。简单来说,Wi-Fi等热点的名称就是SSID,可以通过手机中的网络模块进行扫描附近热点、尝试连接等方式获取附近Wi-Fi的SSID列表。由于SSID是由用户自行命名,所以名称内容可能会包含企业名、宾馆名、餐厅名等,再辅助使用信号强度等进行判断,能一定程上推断用户可能所处的位置以及场所。

3、CellID(Cell TowerID)是无线基站的ID号,用于对每个无线基站收发器进行唯一标识,通过该标识可以推断出使用GSM网络的手机设备的大致位置信息,在Android系统中需要获取位置权限才能读取该值。

针对收集设备识别码的分析探讨

从设备识别码尤其是常用设备唯一识别码的不变属性和标记个人行为等用途来看,其与其他信息结合很容易就能识别到特定自然人,因此是一类典型的个人信息。在国家标准GB/T35273《个人信息安全规范》的资料性附录A里,明确将常用设备唯一识别码作为个人信息的例举。而且,从国际上来看,对设备唯一识别码的管理和限制措施一直有加强趋势。

以上共介绍了17种典型和常用的设备识别码,其中安卓系统相关App、SDK等最常采集的有IMEI、IMSI、ICCID、MAC、ANDROID_ID、SN等,而且所有能被采集的设备唯一识别码被App、SDK等照单全收成为一种常态,其中还不乏高频次、后台运行时收集的行为。究其原因,文章开头已经有所介绍,设备唯一识别码用处很多,产品体验、商业营销、业务风控、账户安全等目的将企业利益和用户权益捆绑交织,即使如此,我们还是不禁要问,“到底收多少设备识别码才算够用?边界到底在哪?

实践中,很多App认为设备唯一识别码为其所需的必要信息,也将涉及收集设备唯一识别码的最主要权限“READ_PHONE_STATE权限(不同安卓手机定义的权限组名称不同,有的称为“电话”,有的称为“设备信息”)设置为需用户强制开启后才能正常使用App。很多网友的举报都表达了强制索要该权限的不解,可是很多App并没有给用户做出合理详尽的解释,更没有把选择权交给用户。

收集“设备唯一识别码”问题是当下网络安全、隐私保护、创新发展等问题交织的焦点,找到其中的平衡点成为了迫切的任务之一。在最新公开征求意见的国家标准草案“移动互联网应用(App)收集个人信息基本规范”4.1管理要求中提出,“App不得收集不可变更的设备唯一标识(如IMEI号、MAC地址等),用于保障网络安全或运营安全的除外”,事实上是强调收集设备唯一识别码的目的仅限于运营或网络安全,不能同时用于其他目的。同时,随着Android Q的发布,其重点加强了隐私相关的设置,尤其是对设备唯一识别码的收集进行限制,App、SDK等将无法从移动设备中获取IMEI、IMSI、ICCID等设备标识符,MAC地址也可以被随机化。可以说,禁止对设备唯一识别码的滥用已经逐步形成共识。很多手机厂商也开始尝试其生态内开放基于不同功能的唯一标识符,类似于苹果iOS系统的IDFA等,可由用户进行重置。

也有人提出疑惑,基于硬件的设备唯一识别码无法采集,一定会有基于软件、甚至用户行为生成的唯一识别码出现,同样无法规避用户行为被追踪的问题。的确,技术的发展还会带来哪些个人信息保护的隐患和问题,还是个未知数,需要持续寻求最佳方案。只是当下,小编认为:不对问题视而不见,准确、及时向用户传达收集设备唯一识别码的真实用途,尊重用户的选择权,绝对是对于个人信息保护有益而无害的。 (注:本文部分内容来源于网络与专家观点,如有不当之处欢迎批评指正。)

声明:本文来自App个人信息举报,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。