【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key
一)概述
什么是互联网支付?
当支付遇到互联网,一场革命自然不可避免。成为现实的是传统的现金支付已经“退居二线”,各种在线支付方式成为人们日常消费的主要支付方式。银行推出的网银以及第三方支付公司推出的各种各样的支付平台大大方便了人们的生活,互联网支付终端也从桌面电脑扩展到移动终端和电视等多种形式的终端上,互联网支付变得无处不在。终端是支付工具,互联网是载体,支付终端除了目前常见的POS机,智能手机、智能电视、平板电脑、PC机等都是越来越普遍的支付终端。
什么是密码学?
现代密码学研究信息从发端到收端的安全传输和安全存储,是研究“知己知彼”的一门科学。其核心是密码编码学和密码分析学。前者致力于建立难以被敌方或对手攻破的安全密码体制,即“知己”;后者则力图破译敌方或对手已有的密码体制,即“知彼”。编码密码学主要致力于信息加密、信息认证、数字签名和密钥管理方面的研究。信息加密的目的在于将可读信息转变为无法识别的内容,使得截获这些信息的人无法阅读,同时信息的接收人能够验证接收到的信息是否被敌方篡改或替换过;数字签名就是信息的接收人能够确定接收到的信息是否确实是由所希望的发信人发出的;密钥管理是信息加密中最难的部分,因为信息加密的安全性在于密钥。历史上,各国军事情报机构在猎取别国的密钥管理方法上要比破译加密算法成功得多。
二)互联网支付的安全隐患
- 网络支付系统的不稳定(中断);
- 隐私支付信息(比如:卡号、有效期、CVV2以及身份信息,比如:身份证号码、手机号码等)在网络传输过程中被窃取或盗用(窃取/截取);
- 支付信息被篡改(篡改);
- 信息假冒:冒充他人身份,发送假冒信息(伪造/捏造);
- 否认已经做过的交易(比如:在A平台或A银行做的交易结果收到的交易确认信息却是B平台或B银行发来的)。
三)互联网支付的安全需求
1、支付的可靠性;
2、支付的真实性;
3、支付的机密性;
4、支付的完整性;
5、支付的不可抵赖性。
四)互联网支付数据机密性技术
1、对称加密算法:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。
典型的对称加密算法如下:
1.1、AES:(Advanced Encryption Standard)高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准;
一个用.NET实现的AES加密代码:
1 /// <summary> 2 /// 有密码的AES加密 3 /// </summary> 4 internal static string AesEncrypt(string toEncrypt) 5 { 6 var keyArray = ConvertBinaryToByte(ConvertStringToBinary(Md5Hex(Configs.PartnerKey))); 7 var toEncryptArray = Encoding.GetEncoding(Consts.Charset).GetBytes(toEncrypt); 8 using (var acsp = new AesCryptoServiceProvider {KeySize = 128, BlockSize = 128}) 9 { 10 acsp.GenerateIV(); 11 using (var aes = new AesCryptoServiceProvider {Key = keyArray, IV = acsp.IV, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7}) 12 { 13 byte[] resultArray; 14 using (var cTransform = aes.CreateEncryptor()) 15 { 16 resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 17 } 18 return Convert.ToBase64String(resultArray); 19 } 20 } 21 }1.2、DES:(Data Encryption Standard),是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
一个用.NET实现的DES加密代码:
1 public static byte[] DesEncryptToByte(string plain, string key, PaddingMode padding = PaddingMode.PKCS7, CipherMode mode = CipherMode.CBC, string codeName = "utf-8") 2 { 3 if (string.IsNullOrWhiteSpace(key)) throw new Exception("密钥不能为空"); 4 if (key.Length != 8) throw new Exception("密钥长度必须是8位"); 5 var encoding = Encoding.GetEncoding(codeName); 6 byte[] bk = encoding.GetBytes(key); 7 using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) 8 { 9 des.IV = bk; 10 des.Key = bk; 11 des.Padding = padding; 12 des.Mode = mode; 13 14 byte[] pk = encoding.GetBytes(plain); 15 using (MemoryStream ms = new MemoryStream()) 16 { 17 using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) 18 { 19 cs.Write(pk, 0, pk.Length); 20 cs.FlushFinalBlock(); 21 byte[] result = ms.ToArray(); 22 ms.Close(); 23 return result; 24 } 25 } 26 } 27 }
1.3、3DES(TrippleDES):是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法(一般是:加密+解密+加密)。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
一个用.NET实现的3DES代码:
2、非对称加密算法:非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。目前最为著名的公钥算法为:RSA。非对称加密可以解决数据的否认与抵赖以及身份认证等问题。1 public static byte[] TripleDesEncrypt(byte[] plain, byte[] key, byte[] iv, PaddingMode padding = PaddingMode.PKCS7, CipherMode mode = CipherMode.CBC) 2 { 3 using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider()) 4 { 5 if (iv != null) des.IV = iv; 6 des.Key = key; 7 des.Padding = padding; 8 des.Mode = mode; 9 10 using (MemoryStream ms = new MemoryStream()) 11 { 12 using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, iv), CryptoStreamMode.Write)) 13 { 14 cs.Write(plain, 0, plain.Length); 15 cs.FlushFinalBlock(); 16 byte[] result = ms.ToArray(); 17 ms.Close(); 18 return result; 19 } 20 } 21 } 22 }
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摘要算法:
1 public static string Md5HexString(string plain, Encoding encoding) 2 { 3 using (MD5 md5 = new MD5CryptoServiceProvider()) 4 { 5 var bysHash = md5.ComputeHash(encoding.GetBytes(plain)); 6 var md5HexString = BitConverter.ToString(bysHash); 7 return md5HexString.Replace("-", string.Empty).ToLower(); 8 } 9 }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摘要算法:
1 public static byte[] Sha1Encrypt(string plain, Encoding encoding) 2 { 3 byte[] data = encoding.GetBytes(plain); 4 using (SHA1 sha1 = new SHA1CryptoServiceProvider()) 5 { 6 return sha1.ComputeHash(data, 0, data.Length); 7 } 8 }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握手层,双方交换数字证书,验证和保证对方身份的合法性。
总结:互联网支付,安全是基石。
帮助到您了吗?
打赏作者(支付宝):