什么是支付宝账号,发给商家安全吗(支付宝加密规则,你真的懂吗?)

支付是一个安全级别很高的场景,系统间交互的每一条数据的泄露都可能造成很大的损失。因此,系统之间交换的每一条数据在支付时都会被加密。这里请参考支付宝支付中使用的加密规则。




图片来自Pexels


什么是签名?




在理解签名之前,先回顾一下支付的交互过程。如上图所示,支付流程大致可以分为六个步骤:

  • 用户选择自己的产品提交订单。
  • 服务器将商品信息和所需金额发送给支付宝,生成支付宝订单。
  • 支付宝订单返回成功后,会生成支付页面,方便移动支付或web支付。
  • 手机调出支付宝App支付。
  • 输入支付密码,发送到支付宝服务器。
  • 支付宝服务器转账成功,通知商家服务器一笔订单金额转账成功。

  • 在这六个步骤中,最重要的是第二步和第六步。拆卸如下:



    商家服务器与支付宝服务器交互过程中传输的信息极其敏感,需要防止中间人在交互过程中篡改信息。比如第二步商品金额改为0,支付宝会被误认为转账0元。


    数字签名解决了交互中的这个安全问题。它可以验证消息或文档的真实性。


    在支付宝支付的界面中,有一个签名参数用来填写签名。这种签名的目的是防止信息伪造。这样,可以有效地防止消息在传输过程中被篡改。


    签名的实现原理


    签名原则


    数字签名是信息安全的保证,它的实现依赖于两个系统的密钥。


    签名过程如下:


    计算要签名的文档的哈希。不管输入文档的长度如何,输出长度总是固定的。例如,使用SHA256是256位。


    对结果散列和一些额外的元数据进行编码。例如,接收方需要知道您正在使用的哈希算法,否则它无法处理签名。


    用私钥对编码后的数据进行加密,结果就是一个签名,可以附在文档上作为认证的依据。



    验证签名(Verification signature):接收方接收文档,并使用相同的哈希算法独立计算文档哈希。


    然后,她用公钥解密消息,解码哈希,然后确认使用的哈希算法是否正确,解密的哈希是否与本地计算的哈希相同。



    非对称加密


    支付宝非对称加密用于签署信息。非对称加密由公钥和私钥组成,通常称为公钥和私钥。


    非对称加密的特点是:只有公钥才能解密私钥加密的信息,只有私钥才能解密公钥加密的信息。


    一般会保留私钥,开发时会放在配置文件里。安全级别与数据库帐户密码相同。


    公钥会交给其他系统,这样如果系统间交互时中间人不知道密钥,交互信息就无法被破解。


    只要发送方保证私钥不泄露,任何人发送给接收方的信息都无法在签名验证中匹配成功。


    支付宝的签名实现方式也差不多。支付宝在进行信息交互时,有两个非常重要的术语,支付宝公钥和应用公钥,总是容易混淆。


    这是因为支付宝提供了两套RSA加密。一套用于保证步骤2订购接口时的信息安全,另一套用于保证步骤6回呼时的信息安全。


    如下图所示,第二步,商家服务器用红色应用私钥(priv key 2)计算签名,支付宝用红色应用公钥(pub key 2)验证签名。


    第六步:支付宝服务器用蓝色支付宝私钥(priv key 6)计算签名,商家用蓝色支付宝公钥(pub key 6)验证签名。

    什么是支付宝账号



    了解了签名计算的原理后,在管理平台中设置App信息就很容易了。我就以沙盒环境为例。



    如上图所示,说明使用的是RSA2加密方式,哈希算法使用的是SHA256。设置后要设置应用公钥,保存支付宝公钥。


    应用程序公钥和应用程序私钥需要自己生成一对,以确保步骤2的安全性。生成模式跳转支付宝开放平台开发助手。


    支付宝的公钥和支付宝的私钥都是支付宝提供的,而支付宝的私钥是自己预留的,就像自己服务器的应用私钥一样,别人不会提供。回叫时复制公钥用于签名认证。



    对称加密


    虽然签名可以防止中间人信息被篡改,但是它不能防止中间人信息被查看。比如第二步,中间商可以得到每天发到支付宝的货款金额。


    网络中信息传递的感觉是一个虚幻的过程,网络中的信息有可能被不法分子截获。



    因此,在支付过程中,建议使用HTTPS协议进行交互,这样可以对交互信息进行加密传输。


    而且支付宝的很多接口也支持AES加密后传输,信息更安全。


    AES加密是一种对称加密算法,比非对称加密简单。系统中只有一个密钥,可用于加密或解密。



    与支付宝交互的信息可以用AES加密。为防止信息泄露,官方对该接口的解释如下:

    如果OpenAPI中没有bizContent参数,则不能使用AES key进行加密,否则会报错,当前API不支持加密请求。


    比如alipay.user.info.share(支付宝会员授权信息查询接口)在不使用bizContent的情况下,无法使用AES密钥加密。


    AES和RSA的关系




    AES密钥对接口请求和响应内容进行加密,密文无法被第三方识别,从而防止接口传输的数据泄露。


    使用RSA密钥对接口请求和响应内容进行签名,开发者和支付宝开放平台分别签名检查,确认接口传输的内容未被篡改。无论接口内容是明文还是密文,RSA都可以正常签名。


    开发者可以先用AES加密请求参数,再用RSA对密文进行签名。


    作者:三滴水

    编辑:陶佳龙

    资料来源:https://4m.cn/ZPW1A

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

    使用微信扫描二维码后

    点击右上角发送给好友