第5章电子商务和移动支付安全技术网上购物和移动支付已经成为人们的日常行为,网上银行和移动支付的安全性也成为人们关心的焦点。了解网上银行和移动支付的安全机制,一是可以避开这些安全机制的缺陷,保证电子商务的安全进行;二是可以避免不必要的恐慌,对网上银行和移动支付存在的安全问题有一个客观的认识。 5.1电子商务概述 电子商务中的商品选购和支付过程可以通过互联网完成,这为用户提供了极大的方便性,但同时也隐藏着许多安全隐患。因此,电子商务健康发展的前提是必须在保证方便、快捷的同时提高安全性。 5.1.1电子商务定义 电子商务(Electronic Commerce,EC)是指通过包括互联网在内的计算机网络实现商品、服务或信息的购买、销售与交换的过程。因此,图5.1网上购物应用系统 电子商务的要素有两个: 一是以互联网为技术手段;二是完成商品和服务的交易过程。图5.1所示的网上购物应用系统就是典型的电子商务实例。 完成网上购物过程,需要完成下单、支付和配送三个步骤,下单是指通过互联网完成商品选购的过程。支付是指通过互联网完成购买商品所需金额从用户账户转移到商家账户的过程。配送是指商家完成将货物通过物流送达用户的过程。 网上银行(简称网银)是用户通过互联网完成支付过程的重要手段,网上银行是银行在互联网上设置的虚拟柜台,用户可以基于互联网技术,通过该虚拟柜台完成转账过程。 5.1.2电子商务应用场景1. 下单用户完成某个购物网站(如图5.2所示的淘宝网)的注册过程后,可以通过访问该购物网站进行商品选购。商品选购过程中,用户可以将选中的商品放入购物车。 图5.2淘宝网 2. 支付 完成网上支付过程需要两个前提: 一是用户需要在某个银行建立账户,并为该账户开通网上银行(简称网银)功能;二是购物网站或商家需要与该银行建立联系。假定用户在中国建设银行建立账户,并为该账户开通网银功能。购物网站已经与中国建设银行建立联系。当用户完成商品选购过程进入结算阶段时,可以选择网上支付方式。一旦选择网上支付方式,该购物网站将显示已经与其建立联系的银行目录,如图5.3所示的银行目录。用户选择“中国建设银行”,弹出如图5.4所示的中国建设银行网上银行支付界面。用户可以通过网上银行支付界面完成支付过程。 〖1〗信息安全实用教程第5章电子商务和移动支付安全技术〖3〗〖3〗图5.3在线支付界面 3. 配送 用户通过网上银行完成支付过程后,银行向购物网站或商家发送支付成功通知,商家接收到银行发送的支付成功通知后,通过物流向用户发送用户选购的商品。用户收到商品后,便完成一次网上购物过程。 图5.4中国建设银行网上银行支付界面 4. 互联网数据交换过程 一次网上购物涉及的数据交换过程如图5.5所示,分为三个阶段,一是与下单有关的阶段,在这个阶段,用户通过互联网完成商品选购过程,因此,这一阶段,用户与购物网站或商家之间主要完成和下单有关的数据交换过程。二是与支付有关的阶段,当用户选择网上支付方式,选中已经建立并开通网银功能的账号的银行后,由购物网站或商家向该银行发送支付请求。该银行向用户弹出网上银行支付界面,用户通过网上银行支付界面完成支付过程。这个阶段用户需要向网上银行发送账号、登录密码、支付密码等私密信息。三是与配送有关的阶段,银行完成购买商品所需金额从用户账户转移到商家账户的过程后,向购物网站或商家发送支付成功通知,购物网站或商家接收到支付成功通知后,通过物流向用户发送用户选购的商品。 图5.5网上购物应用系统数据交换过程 5.1.3电子商务面临的安全威胁1. 钓鱼网站黑客伪造一个购物网站,引诱用户注册并选购商品,当用户选择网上支付方式并指定银行时,弹出一个黑客伪造的该银行的网上银行支付界面,当用户按照要求输入账号、登录密码和支付密码后,黑客可以利用这些私密信息将用户账户中的余额转移到其他任意账户。 解决这种安全问题的关键有三点: 一是用户有办法鉴别出黑客伪造的购物网站;二是网上银行支付界面有着用户可以识别的唯一标识符,使得黑客无法伪造出携带该标识符的网上银行支付界面;三是即使用户泄露了账号、登录密码和支付密码,银行也能通过其他安全机制保证黑客无法成功地完成将用户账户中的余额转移到其他账户的过程。 2. 泄露私密信息 用户与银行之间需要交换类似账号、登录密码和支付密码这样的私密信息,这些私密信息在经过互联网传输的过程中可能被黑客嗅探和截获,使得黑客得到这些私密信息。黑客得到这些私密信息后,可以利用这些私密信息将用户账户中的余额转移到其他任意账户。 解决这种安全问题的关键是不以明文的方式经过互联网传输私密信息。 3. 篡改信息 如图5.5所示,商家发送给银行的支付请求中需要给出商品清单、购买商品所需的金额和商家账号等,由于黑客可以截获经过互联网传输的支付请求,因而可以篡改支付请求中的信息,从而使得用户的支付过程出现错误。 解决这种安全问题的关键是银行能够判别接收到的支付请求经过互联网传输时是否发生改变。 4. 抵赖曾经发生的事务 电子商务中会发生一些纠纷,如用户抵赖曾经下单,要求拒绝接收商家发送的商品。商家抵赖曾经向银行发送过支付请求,声明银行的支付行为与自己无关。银行抵赖曾经向商家发送支付成功通知,表示商家发送商品的行为与自己无关等。 解决类似安全问题的关键是,电子商务中下单、支付和配送过程都需要保留有关该事务的证据,如用户生成的订单、商家发送的支付请求和银行发送的支付成功通知等,且使得发送者无法否认曾经发送过这些信息。只有这样,在发生纠纷后,仲裁机构可以凭借这些证据进行仲裁。 5.1.4解决电子商务安全威胁的思路1. 身份鉴别(1) 购物网站和网上银行身份鉴别 正规的购物网站需要经过权威机构的信用认证,并由权威机构颁发认证证书,当用户访问该购物网站时,该购物网站需要出具认证证书且能证明自己就是该认证证书认证的购物网站。 为了防止用户登录钓鱼网站,用户必须具有鉴别网上银行真伪的能力,这种能力可以通过以下机制实现: 一是当用户访问网上银行时,该网上银行能够出具认证证书且能证明自己就是该认证证书认证的网上银行;二是用户开通网上银行时预留欢迎信息,当用户登录该网上银行后,网上银行应该在醒目处出现该用户预留的欢迎信息。 (2) 用户身份鉴别 账号、登录密码和支付密码本身就是用于鉴别授权用户身份的身份标识信息,因为,一般情况下只有授权用户才能获悉这些私密信息。为了防止黑客通过钓鱼网站骗取这些私密信息后冒充授权用户,必须在这些用于标识用户身份的私密信息的基础上,增加用于鉴别用户身份的机制。 一是当用户访问网上银行时,需要向该网上银行出具认证证书且能证明自己就是该认证证书认证的授权用户。图5.6动态口令牌 二是开通网上银行时,购买图5.6所示的动态口令牌,当用户登录网上银行进行支付时,除了需要输入账号和支付密码以外,还必须输入当时动态口令牌中显示的6位动态口令。三是用户开通网上银行时,需要预留手机号码并启用验证码验证功能。当用户登录网上银行进行支付时,不仅需要输入账号和支付密码,还需要输入通过手机接收到的验证码。 2. 加密 必须加密经过互联网传输的私密信息,如账号、登录密码和支付密码等。实现加密传输需要解决两个问题: 一是发送端和接收端必须能够约定加密和解密算法;二是发送端和接收端必须能够安全分发用于加密和解密的密钥。为了保证加密传输过程安全进行,用户与网上银行之间使用的加密解密算法和密钥需要动态协商确定,不能事先静态配置。 3. 完整性检测 需要对经过互联网传输的数据进行完整性检测。实现完整性检测同样需要解决两个问题: 一是发送端和接收端必须能够约定用于生成消息鉴别码(Message Authentication Code,MAC)的算法;二是发送端和接收端必须能够安全分发用于生成MAC的密钥。为了保证完整性检测过程安全进行,发送端与接收端之间使用的MAC算法和MAC密钥需要动态协商确定,不能事先静态配置。 4. 数字签名 防止发送端抵赖曾经发送过的消息的机制是数字签名,发送端必须对发送的消息进行数字签名,接收端验证发送端的数字签名后,再对消息进行处理。实现数字签名的前提是接收端具有证明发送端与其公钥之间绑定关系的证书,且确定该证书是有效证书。 5.2移动支付概述 所有通过移动终端(通常是智能手机)对所消费的商品或服务进行账单支付的支付方式都称为移动支付,因此,以智能手机为终端,通过网上银行完成的支付过程也属于移动支付。但这里讨论的移动支付主要局限在类似微信支付这样的第三方支付。 5.2.1移动支付定义 移动支付是通过移动终端(通常是智能手机)对所消费的商品或服务进行账单支付的一种支付方式。移动支付分为近场支付和远程支付,支持近场支付的智能手机通常需要具有近场通信(Near Field Communication,NFC)功能,这种智能手机可以像公交卡一样刷卡乘车。支持远程支付的智能手机通常作为移动互联网的终端,通过发送远程指令完成支付过程。目前人们普遍使用的微信支付和支付宝支付都属于远程支付方式。但从远程支付方式的定义看,以智能手机为终端,通过网上银行完成的支付过程也属于远程支付方式。因此,这里的移动支付主要局限在基于智能手机的类似微信支付和支付宝支付这样的第三方支付。 移动支付带来的好处是方便和快捷,由于智能手机可以随时随地上网,因此,可以在任意场合进行移动支付,在任何应用场景下进行实时支付。 5.2.2移动支付应用场景 作为基于智能手机的第三方支付,微信支付和支付宝支付的功能和应用场景有着太多的重叠,因此,这里以微信支付为例讨论基于智能手机的第三方支付的应用场景。 1. 微信支付应用系统结构 微信支付应用系统如图5.7所示,微信客户端、微信支付系统和商家后台系统通过互联网连接在一起。商家门店通过商家专用网络与商家后台系统连接在一起。微信支付系统通过支付网络与各个微信支付系统支持的银行连接在一起。用户进行微信支付的前提是微信钱包中有足够的余额或者微信已经绑定信用卡或借记卡。 图5.7微信支付应用系统 2. 条形码和二维码 微信支付过程与扫码密切相关,因此,了解条形码和二维码表示信息的方式,有助于理解微信支付过程。 (1) 条形码 条形码(barcode)是将宽度不等的多个黑条和空白按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。 计算机中,所有的数字、字符都是由二进制数表示的,用不同的二进制数组合表示不同的数字和字符的过程称为编码。如果用7位二进制数表示十个不同的数字,可以用7位二进制数组合0001011表示数字9,用7位二进制数组合0100111表示数字0。因此,用条形码表示数字和字符,首先需要解决一位二进制数的0和1的表示方式。目前存在多种表示二进制数0和1的方式,一种方式是用相同宽度的条表示二进制数1,用相同宽度的空表示二进制数0,如图5.8(a)所示。另一种方式是用一种宽度的条表示二进制数1,用另一种宽度的条表示二进制数0,表示二进制数1的条的宽度是表示二进制数0的条的宽度的整数倍,通常该整数为2或3,如图5.8(b)所示。 图5.8两种二进制数0和1的表示方式 如果采用图5.8(a)所示的二进制数0和1表示方式,则每一个模块的宽度等于表示一位二进制数0或1的空或条的宽度。如果用7位二进制数表示数字0~9,数字9对应的7位二进制数组合为0001011,则数字9对应的条形码如图5.9所示。图5.9(a)所示的是数字9对应的7个模块,二进制数0对应的模块是空,二进制数1对应的模块是条。实际条形码中,图5.9(a)所示的每一个模块的边框是不存在的,因此,数字9对应的条形码如图5.9(b)所示。 图5.9数字9对应的条形码 实际条形码表示的信息可以包含多个数字和字符,因此由多个模块组成,其中不仅有用于表示数字和字符的模块组合,还有用于表示条形码开始、结束和用于分隔两串数字的分隔符的模块组合。图5.10所示是EAN13码条形码模块组合。从左到右,起始符是3位二进制数组合101对应的模块,左侧数据区是用于表示6位数字的42个模块(每一位数字对应7个模块),中间分隔符是5位二进制数组合01010对应的5个模块,右侧数据区是用于表示5位数字的35个模块,校验字符等同于一个数字,对应7个模块。终止符与起始符相同,是3位二进制数组合101对应的模块。图5.11所示的是EAN13码条形码实例,下面是该条形码表示的数字组合。数字6是前置码,数字901234是左侧数据的6位数字,数字56789是右侧数据的5位数字,数字2是校验字符。条形码从左到右,首先是3位二进制数101对应的模块,然后是表示数字9的7位二进制数0001011对应的模块,紧接着是表示数字0的7位二进制数0100111对应的模块,以此类推。 图5.10EAN13码条形码模块组合 图5.11EAN13码条形码实例 (2) 二维码 条形码只有单个方向排列的模块,包含的模块有限,因此,表示的数字和字符数量也有限,如EAN13码条形码实际表示的数字只有11位。二维码有着水平和垂直方向排列的模块,包含的模块数远远大于条形码。图5.12所示的是版本6的QR码二维码,是41×41模块构成的矩阵。目前最大的QR码二维码是版本40的QR码二维码,是177×177模块构成的矩阵。矩阵中的每一个模块可以表示一位二进制数,同样用条表示二进制数1,用空表示二进制数0。三个角上的位置探测图形用于确定QR码二维码的位置和方向。定位图形用于确定水平和垂直方向模块的基准位置,校准图形用于检测QR码二维码的中心坐标。 图5.12版本6的QR码二维码 版本6的QR码二维码的有效模块数是1383,可以表示1383位二进制数,因而可以表示用1383位二进制数编码后的数字、字符和汉字组合。版本40的QR码二维码的有效模块数是29648,可以表示29648位二进制数,因而可以表示用29648位二进制数编码后的数字、字符和汉字组合。 3. 微信刷卡支付过程 (1) 刷卡支付步骤 刷卡支付步骤如下。 ① 用户完成商品选购后,由商家门店生成支付订单,用户确认支付订单中的金额。 ② 用户打开微信客户端,完成“我”→“钱包”→“刷卡”操作过程,微信展示条形码/二维码,如图5.13所示。 ③ 商家扫描微信客户端展示的条形码/二维码。如果需要验密,则微信客户端随后弹出支付密码输入框,否则直接显示支付成功信息和扣除金额,如图5.14所示。 ④ 商家接收到支付成功信息后,将商品交付给用户。 图5.13条形码/二维码 图5.14支付成功信息 (2) 数据交换过程 微信刷卡支付涉及的数据交换过程如图5.15所示。完成微信客户端“我”→“钱包”→“刷卡”操作过程后,微信客户端向微信支付系统发送微信授权码生成请求,微信支付系统接收到该微信授权码生成请求后,生成一个微信授权码,建立微信授权码与微信账号之间的绑定,然后将微信授权码发送给微信客户端,微信客户端显示微信授权码的条形码和二维码。商家门店扫描微信客户端的条形码或二维码,生成并向商家后台系统发送支付请求,支付请求将商家账号、订货信息与微信授权码绑定在一起。商家后台系统将支付请求发送给微信支付系统。微信支付系统接收到支付请求后,根据微信授权码确定用户账号,请求银行完成用户账号至商家账号的转账过程。银行完成转账过程后,向微信支付系统发送支付结果,支付结果中包括金额、用户账号、商家账号和订单号等信息。微信支付系统接收到银行发送的支付结果后,向商家后台系统和微信客户端发送支付成功消息,支付成功消息中包括金额和订单号等信息。微信客户端接收到支付成功消息后,显示订单号、扣除金额等信息。商家后台系统接收到支付成功消息后,向商家门店发送支付成功消息。商家门店接收到支付成功消息后,向用户提交商品。 图5.15微信刷卡支付数据交换过程 4. 微信扫码支付过程 (1) 扫码支付步骤 微信扫码支付步骤如下。 ① 用户完成商品选购后,选择微信扫码支付方式,由商家门店生成表示统一资源定位符(Uniform Resource Locator,URL)的二维码,如图5.16所示。 图5.16二维码和“扫一扫”界面 ② 用户打开微信客户端,完成“发现”→“扫一扫”操作过程,扫描商家门店生成的表示URL的二维码,如图5.16所示。 ③ 微信客户端显示“支付确认”界面,给出支付金额和订单号等信息,如图5.17所示。 ④ 用户点击“立即支付”后,出现“输入支付密码”界面,如图5.18所示,用户输入支付密码,完成支付过程。 ⑤ 微信客户端显示支付成功信息,如图5.19所示,支付成功信息中包含支付金额、