一)概述

什么是互联网支付?

当支付遇到互联网,一场革命自然不可避免。成为现实的是传统的现金支付已经“退居二线”,各种在线支付方式成为人们日常消费的主要支付方式。银行推出的网银以及第三方支付公司推出的各种各样的支付平台大大方便了人们的生活,互联网支付终端也从桌面电脑扩展到移动终端和电视等多种形式的终端上,互联网支付变得无处不在。终端是支付工具,互联网是载体,支付终端除了目前常见的POS机,智能手机、智能电视、平板电脑、PC机等都是越来越普遍的支付终端。

什么是密码学?

现代密码学研究信息从发端到收端的安全传输和安全存储,是研究“知己知彼”的一门科学。其核心是密码编码学和密码分析学。前者致力于建立难以被敌方或对手攻破的安全密码体制,即“知己”;后者则力图破译敌方或对手已有的密码体制,即“知彼”。编码密码学主要致力于信息加密、信息认证、数字签名和密钥管理方面的研究。信息加密的目的在于将可读信息转变为无法识别的内容,使得截获这些信息的人无法阅读,同时信息的接收人能够验证接收到的信息是否被敌方篡改或替换过;数字签名就是信息的接收人能够确定接收到的信息是否确实是由所希望的发信人发出的;密钥管理是信息加密中最难的部分,因为信息加密的安全性在于密钥。历史上,各国军事情报机构在猎取别国的密钥管理方法上要比破译加密算法成功得多。

二)互联网支付的安全隐患

  1. 网络支付系统的不稳定(中断);
  2. 隐私支付信息(比如:卡号、有效期、CVV2以及身份信息,比如:身份证号码、手机号码等)在网络传输过程中被窃取或盗用(窃取/截取);
  3. 支付信息被篡改(篡改);
  4. 信息假冒:冒充他人身份,发送假冒信息(伪造/捏造);
  5. 否认已经做过的交易(比如:在A平台或A银行做的交易结果收到的交易确认信息却是B平台或B银行发来的)。

三)互联网支付的安全需求

1、支付的可靠性;

2、支付的真实性;

3、支付的机密性;

4、支付的完整性;

5、支付的不可抵赖性。

四)互联网支付数据机密性技术

1、对称加密算法:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。

典型的对称加密算法如下:

1.1、AES:(Advanced Encryption Standard)高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准;

一个用.NET实现的AES加密代码:

         /// <summary>
/// 有密码的AES加密
/// </summary>
internal static string AesEncrypt(string toEncrypt)
{
var keyArray = ConvertBinaryToByte(ConvertStringToBinary(Md5Hex(Configs.PartnerKey)));
var toEncryptArray = Encoding.GetEncoding(Consts.Charset).GetBytes(toEncrypt);
using (var acsp = new AesCryptoServiceProvider {KeySize = , BlockSize = })
{
acsp.GenerateIV();
using (var aes = new AesCryptoServiceProvider {Key = keyArray, IV = acsp.IV, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7})
{
byte[] resultArray;
using (var cTransform = aes.CreateEncryptor())
{
resultArray = cTransform.TransformFinalBlock(toEncryptArray, , toEncryptArray.Length);
}
return Convert.ToBase64String(resultArray);
}
}
}

1.2、DES:(Data Encryption Standard),是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。

一个用.NET实现的DES加密代码:

         public static byte[] DesEncryptToByte(string plain, string key, PaddingMode padding = PaddingMode.PKCS7, CipherMode mode = CipherMode.CBC, string codeName = "utf-8")
{
if (string.IsNullOrWhiteSpace(key)) throw new Exception("密钥不能为空");
if (key.Length != ) throw new Exception("密钥长度必须是8位");
var encoding = Encoding.GetEncoding(codeName);
byte[] bk = encoding.GetBytes(key);
using (DESCryptoServiceProvider des = new DESCryptoServiceProvider())
{
des.IV = bk;
des.Key = bk;
des.Padding = padding;
des.Mode = mode; byte[] pk = encoding.GetBytes(plain);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(pk, , pk.Length);
cs.FlushFinalBlock();
byte[] result = ms.ToArray();
ms.Close();
return result;
}
}
}
}

1.3、3DES(TrippleDES):是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法(一般是:加密+解密+加密)。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

一个用.NET实现的3DES代码:

         public static byte[] TripleDesEncrypt(byte[] plain, byte[] key, byte[] iv, PaddingMode padding = PaddingMode.PKCS7, CipherMode mode = CipherMode.CBC)
{
using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider())
{
if (iv != null) des.IV = iv;
des.Key = key;
des.Padding = padding;
des.Mode = mode; using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write))
{
cs.Write(plain, , plain.Length);
cs.FlushFinalBlock();
byte[] result = ms.ToArray();
ms.Close();
return result;
}
}
}
}

2、非对称加密算法:非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。目前最为著名的公钥算法为:RSA。非对称加密可以解决数据的否认与抵赖以及身份认证等问题。

2.1、常见的RSA公私钥文件格式:

Format     

Name

Description

PKCS #7

Cryptographic Message Syntax Standard

A PKCS #7 file can be used to store certificates, which is a SignedData structure without data (just the certificates). The file name extension is usually .p7b, .p7c

PKCS #8

Private-Key Information Syntax Standard.

Used to carry private certificate keypairs (encrypted or unencrypted).

PKCS #12

Personal Information Exchange Syntax Standard.

Defines a file format commonly used to store private keys with accompanying public key certificates, protected with a password-based symmetric key. It is the successor to PFX from Microsoft.

DER

Distinguished Encoding Rules

A binary format for keys or certificates. It is a message transfer syntax specified by the ITU in X.690.

PEM

Privacy Enhanced Mail

Base64 encoded DER certificates or keys, with additional header and footer lines.

The PEM private key format uses the header and footer lines: 
-----BEGIN RSA PRIVATE KEY----- 
-----END RSA PRIVATE KEY-----

The PEM public key format uses the header and footer lines: 
-----BEGIN PUBLIC KEY----- 
-----END PUBLIC KEY-----

The PEM certificate uses the header and footer lines: 
-----BEGIN CERTIFICATE----- 
-----END CERTIFICATE-----

2.2、常用的生成RSA公私钥文件的工具

①OpenSSL

②Java自带的KeyTool工具。

OpenSSL生成相关证书文件(公私钥文件)的操作方法,请见我的其它文章:http://www.cnblogs.com/frankyou/tag/RSA/


四)互联网支付数据完整性技术

1、数字摘要技术(Message Digest):

数字摘要是将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。数字摘要就是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。数字摘要是不可逆的。

通过比对摘要后的数据来判断原始支付报文数据在网络传输过程中是否有被篡改、是否完整和一致。

2、常用的数字摘要算法

 2.1、MD5(Message Digest Algorithm),为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护;

一个用.NET实现的MD5摘要算法:

         public static string Md5HexString(string plain, Encoding encoding)
{
using (MD5 md5 = new MD5CryptoServiceProvider())
{
var bysHash = md5.ComputeHash(encoding.GetBytes(plain));
var md5HexString = BitConverter.ToString(bysHash);
return md5HexString.Replace("-", string.Empty).ToLower();
}
}

2.2、SHA(Secure Hash Algorithm)家族的五个算法:分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,后四者有时并称为SHA-2.SHA-1在许多安全协议中广泛使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec.在2005年,密码学家就证明SHA-1的破解速度比预期提高了2000倍,虽然破解仍然是极其困难和昂贵的,但随着计算机变得越来越快和越来越廉价,SHA-1算法的安全性也逐年降低,已被密码学家严重质疑,希望由安全强度更高的SHA-2替代它。

一个用.NET实现的SHA-1摘要算法:

         public static byte[] Sha1Encrypt(string plain, Encoding encoding)
{
byte[] data = encoding.GetBytes(plain);
using (SHA1 sha1 = new SHA1CryptoServiceProvider())
{
return sha1.ComputeHash(data, , data.Length);
}
}

 3、数字摘要算法的总结

  3.1、哈希算法是一个单向不可逆的数学算法;

3.2、对任何长度的信息报文,HASH能生成固定长度的信息摘要;

3.3、同样的信息报文,其生成的摘要必定一致。

五)互联网支付数据真实性技术

1、数字签名:身份互信的解决方案

公开密钥加密算法+数字摘要技术,数字签名技术最重要的应用领域是身份认证,身份认证的作用是对用户的身份进行鉴权,是网络安全管理的重要基础。身份认证可以单向的(服务端对客户的端进行身份识别和认证),也可以是双向的(客户端和服务器端互相认证)。

2、数字证书:数字签名付诸实践的强有力的保障手段

数字证书,一般又会称为:CA证书,它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份,保证对方身份的真实性。

CA证书的生成过程:

通过HTTPS访问网站时,CA颁发的公钥证书可以让主流的浏览器获取信任并采用预定的算法进行加密和签名。证书公钥文件在Client与Server通过TSL/SSL协议进行握手时由Sever端下发给Client,接下来Client会通过证书公钥对证书进行验签同时也会校验证书其它的相关信息:是否可信任、是否与当前域名匹配、是否在有效期内,是否被吊销等。

 3、SSL协议都做了写什么?

3.1、机密性:交易双方在定了会话密钥后,所有的消息都将会被加密;

3.2、完整性:通过数字签名、数字摘要等技术保证了传输信息的完整性;

3.3、认证性:在SSL握手层,双方交换数字证书,验证和保证对方身份的合法性。

总结:互联网支付,安全是基石。

帮助到您了吗?

打赏作者(支付宝):

【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key的更多相关文章

  1. 【原创】互联网项目中mysql应该选什么事务隔离级别

    摘要 企业千万家,靠谱没几家. 社招选错家,亲人两行泪. 祝大家金三银四跳槽顺利! 引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:"讲讲mysql有几个事务隔离级别?& ...

  2. 互联网项目中mysql推荐(读已提交RC)的事务隔离级别

    [原创]互联网项目中mysql应该选什么事务隔离级别 Mysql为什么不和Oracle一样使用RC,而用RR 使用RC的原因 这个是有历史原因的,当然要从我们的主从复制开始讲起了!主从复制,是基于什么 ...

  3. 国内首款开源的互联网支付系统roncoo-pay

    roncoo-pay是国内首款开源的互联网支付系统,其核心目标是汇聚所有主流支付渠道,打造一款轻量.便捷.易用,且集支付.资金对账.资金清结算于一体的支付系统,满足互联网业务系统的收款和业务资金管理需 ...

  4. 甘果移动老甘:移动互联网变迁中的App和小程序

    2018 年 10 月13 日,由又拍云和知晓云联合主办的 Open Talk 丨2018 小程序开发者沙龙系列活动广州站拉开帷幕,甘果移动的 CEO 路文杰(老甘)在沙龙上做了<移动互联网变迁 ...

  5. [原创]浅谈移动互联网App兼容性测试

    [原创]浅谈移动互联网App兼容性测试 今天要谈的话题,估计各位测试都有感受,移动互联网App兼容性测试,我们到底测试覆盖如何去挑选机型?具体移动App兼容性测试如何开展?是不是应引进像testin这 ...

  6. 微信支付中的jsapi返回提示信息

    jsapi中跳转到微信支付中触发的方法是js中的getBrandWCPayRequest方法. 改方法中的返回结果msg提示信息如下: err_msg:get_brand_wcpay_request: ...

  7. 【CSWS2014 Summer School】互联网广告中的匹配和排序算法-蒋龙(下)

    [CSWS2014 Summer School]互联网广告中的匹配和排序算法-蒋龙(上) Fig19,用到了矩阵,这个我没有听太明白,蒋博士也没有详细说明.不过可以明确的一点就是,我们常说的K-mea ...

  8. 专访探探DBA张文升:PG在互联网应用中同样也跑的很欢畅

    张文升认为,PG无论在可靠性和性能方面都不输其它任何关系型数据库   张文升,探探DBA,负责探探的数据库架构.运维和调优的工作.拥有8年开发经验,曾任去哪儿网DBA.   9月24日,张文升将参加在 ...

  9. 互联网项目中mysql应该选什么事务隔离级别

    引言 开始我们的内容,相信大家一定遇到过下面的一个面试场景 面试官:“讲讲mysql有几个事务隔离级别?” 你:“读未提交,读已提交,可重复读,串行化四个!默认是可重复读” 面试官:“为什么mysql ...

随机推荐

  1. PostgreSQL SystemTap on Linux 转

    PostgreSQL 支持动态跟踪, 可以通过dtrace或者systemtap工具统计相关探针的信息. 安装systemtap yum install systemtap kernel-debugi ...

  2. IT程序猿们,我该做什么选择呢

    这个时刻,我想我遇到人生小拐点了,程序猿到了30岁,到达了一个分界线了,现在的我该何去何从呢? 先谈下简单的情况吧: 来这个公司2年了,之前因为身体的原因,不想那么累,于是选择了一份维护的工作,就来了 ...

  3. SQLite 管理工具 SQLite Expert

    SQLite Expert – Personal Edition SQLite Expert 提供两个版本,分别是个人版和专业版.其中个人版是免费的,提供了大多数基本的管理功能. SQLite Exp ...

  4. 记录一次apache错误:“child pid 29023 exit signal Segmentation fault (11)”

    目前做了一台公网的测试机,主要是  php 5.3.3 版本,是 browser  --> nginx  --> apache --> php 今天因为想要安装一个商城,要求需要 P ...

  5. ios 重用UI部分代码的好方法(再也不用为局部变量的命名而烦恼啦!)

    重用控件类代码的一个非常好的解决方案:所有一样的控件其名字均用同样的一个名字.只是在最后赋值的时候,将创建好的控件赋给我们需要用到的那个控件. - (id)initWithFrame:(CGRect) ...

  6. 使用Dictionary泛型集合封装业务逻辑判断 z

    C#2.0 提供了Dictionary 泛型类,它提供了从一组键到一组值的映射.字典中的每个添加项都由一个值及其相关联的键组成.通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictio ...

  7. 《MacTalk·人生元编程》

    <MacTalk·人生元编程> 基本信息 <MacTalk·人生元编程> 基本信息 作者:池建强 出版社:人民邮电出版社 ISBN:9787115342232 上架时间:201 ...

  8. [MAC OS] XCode中的Debug View Hierarchy功能

    reference to : http://blog.csdn.net/liujinlongxa/article/details/46490949 前言 做iOS开发经常会遇见这种情况,产品汪拿着你做 ...

  9. Python已成为网络攻击的首选编程语言

    Python已成为网络攻击的首选编程语言 最新的调查数据表明,Python已经变成了世界上最热门的编程语言了,而Python的热门风也刮到了信息安全领域中.Python,摇身一变,也变成了黑客开发网络 ...

  10. MyBatis两张表字段名相同产生的问题

    MyBatis两张表字段名相同, 会导致bean属性都映射为第一个表的列, 解决方法: 通过设置别名的方式让其产生区别,如 <select id="queryBySekillId&qu ...