2016/05/17

Delphi 加密解密(含數位簽章)的解決方案 -- 【初探篇】

嗯,今天不討論破解病毒的問題

一直以來,總是覺得自家系統的加密法很陽春,容易被破解,最近看到可怕的【 加密勒索病毒】,發現居然用到 RSA 4096 加密等級,凡是中招者,只能選擇「付贖金」或是「銷毀」這兩個選項。

看來這 RSA 加密真是個很可靠的東西,如果可以應用在自家的產品上……



「我們家產品採用和勒索病毒相同等級的安全性加密」



客戶聽起來一定會覺得很可靠吧!是吧!

客戶聽起來一定會覺得很可靠吧!是吧!

客戶聽起來一定會覺得很可靠吧!是吧!





















































你想太多了………


話說回來,在Delphi裡應該怎麼實作呢?

Delphi沒有提供RSA加解密元件及函式

這的確是蠻悲劇的一件事,但萬幸的是,3rd元件還是有的。
中國代理商有針對【LockBox】元件製作一篇教學影片,看完非常興奮,我應該也可以做出來吧!

LockBox封裝地非常簡單,但請務必知道加解密流程

確實,LockBox封裝加解密法後的元件非常簡單,而TSignatory是隱式地操作TCodec,若不知道加密解密的流程,在使用上絕對會大吃苦頭!

自己被自己綁架好一段時間,好孩子千萬不要亂嘗試啊!
影片中的RSA範例要做成這樣類實戰的結果,不可能!

LockBox也可以做數位簽章

數位簽章是什麼,目的是驗證封包是否為傳送人傳來的。

RSA 公鑰和私鑰的應用規則

  1. Server端提供【公鑰】給Clent端。
  2. Client使用【Server公鑰】「加密」,連同Client端的【公鑰】傳給Server端。
  3. Server端使用【私鑰】「解密」,取得Client端傳來的明碼資料。
Server端反向加密向Client端回傳資料。


欠缺的 系統存放金鑰的位置

LockBox可以很輕鬆的產出金鑰,但是金鑰暴露在外面總不是這麼地安全。

還好,貼心的Windows已經幫我們設想到了,在系統中,有個叫【金鑰容器(key container)】的地方,它有「不可視」以及「需要知道名稱才可載入」這兩種特性。

但很可惜的,LockBox並未提供金鑰容器存取的方法。

要存取金鑰容器,還是只能依賴【JEDI WCRYPT2.PAS】這個單元,這是仿照「Microsoft CAPICOM SDK」封裝的Delphi工具。

其中也包含了RSA金鑰的製作,只是製作方式並沒有比LockBox簡單,也許可以朝「把LockBox金鑰使用Wcrypt2.pas儲存到金鑰容器」的方向來走。


實作【金鑰】和【儲存到金鑰容器】的方法

沒有留言:

張貼留言