【原創】淺析密碼學在網際網路支付中的應用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key

FrankYou發表於2016-07-14

一)概述

什麼是網際網路支付?

當支付遇到網際網路,一場革命自然不可避免。成為現實的是傳統的現金支付已經“退居二線”,各種線上支付方式成為人們日常消費的主要支付方式。銀行推出的網銀以及第三方支付公司推出的各種各樣的支付平臺大大方便了人們的生活,網際網路支付終端也從桌面電腦擴充套件到移動終端和電視等多種形式的終端上,網際網路支付變得無處不在。終端是支付工具,網際網路是載體,支付終端除了目前常見的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加密程式碼:

 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程式碼:

 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、非對稱加密演算法:非對稱加密演算法需要兩個金鑰來進行加密和解密,這兩個金鑰是公開金鑰(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摘要演算法:

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握手層,雙方交換數字證照,驗證和保證對方身份的合法性。

總結:網際網路支付,安全是基石。

 

幫助到您了嗎?

打賞作者(支付寶):

 

相關文章