鐵人賽 Day 8 常用演算法 MD5、SHA、RSA 在逆向工程的應用

鐵人賽 Day 8 常用演算法 MD5、SHA、RSA 在逆向工程的應用
鐵人賽 Day 8 常用演算法 MD5、SHA、RSA 在逆向工程的應用

本系列文章所討論的 JavaScript 資安與逆向工程技術,旨在分享知識、探討防禦之道,並促進技術交流。

所有內容僅供學術研究與學習,請勿用於任何非法或不道德的行為。

讀者應對自己的行為負完全責任。尊重法律與道德規範是所有技術人員應共同遵守的準則。

 

在進行 JavaScript 逆向工程時,我們常會看到資料不是直接明文傳輸,而是經過某種演算法處理。

這些處理方式不僅能混淆請求參數,也能增加逆向難度。

是一種雜湊算法且是單向且不可逆,它能將任意長度的輸入資料,轉換成一個固定長度的輸出。

檢查下載的檔案是否完整且未被修改。

過去伺服器不直接儲存使用者明文密碼,而是儲存其 MD5 雜湊值。(已不推薦使用)

從雜湊值無法逆向推導回原始輸入。

輸入不同,但輸出長度固定。

輸出的字串長度皆為32。

已被證明可被碰撞,也就是兩個不同的輸入產生相同的雜湊值,不建議用於安全驗證。

是一種雜湊算法且是單向且不可逆,SHA目前共有3種系列。

SHA-1: 發現可能遭受碰撞攻擊,目前也不建議使用。

SHA-2: 包含 SHA-224, SHA-256, SHA-384, 和 SHA-512 等,是目前最主流的 SHA 演算法系列。

SHA-3: 是一個新的雜湊演算法,目前也逐漸被採用。

檢查下載的檔案是否完整且未被修改。

也常用於API之中確保資料在傳輸過程中沒有被修改過。

從雜湊值無法逆向推導回原始輸入。

輸入不同,但輸出長度固定。

以SHA-256為例 輸出的字串長度皆為64。

雖然SHA-256難以被破解,但如果原文很簡單,還是可以被碰撞出來,因此每次雜湊必須加鹽來防禦此攻擊行為。

是可逆的加解密,並且基於數學上大數分解的困難性而設計。

常見的密鑰長度有 1024、2048、3072 與 4096 位元。

確保只有持有私鑰的人能解密,透過私鑰簽名、公鑰驗證,確保資料的真實性與完整性。

常與對稱加密演算法(如 AES)搭配,用於安全傳遞對稱金鑰。

需要一組「公鑰」與「私鑰」,公鑰用於加密,私鑰用於解密。

1024 位元已不再安全,必須使用 2048 位元以上。

客戶端隨機生成一組對稱金鑰(例如 256-bit AES key)。

客戶端使用伺服器的 RSA 公鑰,把這組 AES 金鑰加密。

把「RSA 加密後的 AES 金鑰」傳給伺服器。

再用這組 AES 金鑰加密大量資料(檔案、訊息、影像等)並傳送。

伺服器用自己的 RSA 私鑰解密取得拿回 AES 金鑰。

接著再用這個 AES 金鑰解密訊息內容。

RSA對於大資料效率不高,而 AES 在大資料加解密上極快。

AES 金鑰本身不會明文傳輸,而是經過 RSA 保護。

作者頭像
Nick

擅長從前端的互動設計到後端的資料處理,都能親自規劃與實作。對我來說開發網站不只是完成功能,而是打造一個能被真正使用、體驗順暢的平台。我喜歡把複雜的技術轉化成簡單好懂的成果,並在這個過程中持續學習與挑戰自己。