簽章交換機制-Sign Exchange

App 與 Server API 溝通之際,在資訊安全機制中,為防範資料篡改,往往我們會使用 CheckSum 進行防範,為了增加 CheckSum 的強度,我們會在CheckSum生成前,將參與生成的參數中加入簽章,以此增加CheckSum的強度。

簽章交換-Sign Exchange 將會使用到2種加密方式,分別為非對稱式加密RSA與對稱式加密 AES-256(CBC)。 

步驟如下: 
1. 系統預設產生一組RSA金鑰,Public Key (ex:PublicKey.xml)存放於App 設定檔中,Private Key(ex: PrivateKey.xml)存放於Server設定檔中 
2. 在註冊與登入動作以前,App 需向Server 請求Sign 
3. App 產生AES Key 與 AES Salt(IV) 
4. App 使用Public Key將AES Key 與 Salt加密成密文 
5. App 將密文 AES Key 與 Salt 透過Sign API 傳送至Server
6. Server 使用Private Key 將密文AES Key 與 Salt 還原,同時產生Sign 
7. Server 使用AES Key 與 Salt 將Sign 加密成密文,並將Sign 密文與 Sign Expired Date 回傳至App 
8. App 使用AES Key 與 Salt 將Sign 還原,並將Sign 密文與 Sign Expired Date 儲存 

 以下為範例金鑰 & Sign 格式

RSA Public Key XML、PEM 格式 
RSA Private Key XML、PEM 格式
AES-256 Key長度32字元英數字 
AES-256 Salt(IV) 長度8字元英數字
Sign 長度64字元英數字 

 

                                                                                                        Sign Exchange 流程圖
 

注意事項:
相同的明文透過同一把 Public Key 加密,產生出來的密文每次會不同,因為RSA 加密機制會在加密當下加入Random值,藉以增加強度,可參考此連結https://www.cnblogs.com/kingbo/p/7247494.html


範例下載:
C#  RSA