Skip to main content

Crypto - Introduction

https://nodejs.org/api/crypto.html#crypto

對稱加密(Symmetric Encryption)

雙方使用的同一個金鑰做加解密,這種加密方法稱為對稱加密。 在對稱加密演算法中常用的演算法有:DES、AES等。

優點:速度快,對稱性加密通常在訊息傳送方需要加密大量資料時使用,演算法公開、計算量小、加密速度快、加密效率高。 缺點:在資料傳送前,傳送方和接收方必須協議密鑰,並且使雙方都能儲存好密鑰。如果一方的密鑰被洩露,那麼加密資訊也就不安全了。另外,每對使用者每次使用對稱加密演算法時,都需要使用其他人不知道的唯一密鑰,這會使得收、發雙方所擁有的鑰匙數量巨大,金鑰管理成為雙方的負擔。

AES 進階加密標準(Advanced Encryption Standard),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。 嚴格地說,AES和Rijndael加密法並不完全一樣(雖然在實際應用中兩者可以互換),因為Rijndael加密法可以支援更大範圍的區塊和金鑰長度; AES的區塊長度固定為128位元(HashIV),金鑰長度則可以是128,192或256位元(HashKey)

Cache Flow

非對稱加密(Asymmetric Encryption)

它需要兩個金鑰,一個是公開密鑰,另一個是私有密鑰;公鑰用作加密,私鑰則用作解密。使用公鑰把明文加密後所得的密文,只能用相對應的私鑰才能解密並得到原本的明文,最初用來加密的公鑰不能用作解密。由於加密和解密需要兩個不同的密鑰,故被稱為非對稱加密;不同於加密和解密都使用同一個密鑰的對稱加密。公鑰可以公開,可任意向外發布;私鑰不可以公開,必須由用戶自行嚴格秘密保管,絕不透過任何途徑向任何人提供,也不會透露給被信任的要通訊的另一方。

基於公開密鑰加密的特性,它還能提供數位簽章的功能,使電子檔案可以得到如同在紙本檔案上親筆簽署的效果。

Cache Flow

數位簽章

相反,如果某一用戶使用他的私鑰加密明文,任何人都可以用該用戶的公鑰解密密文;由於私鑰只由該用戶自己持有,故可以肯定該檔案必定出自於該用戶;公眾可以驗證該用戶發布的資料或檔案是否完整、中途有否曾被篡改,接收者可信賴這些資料、檔案確實來自於該用戶,這被稱作數位簽章

數位簽章驗證流程:

  1. A 將明文用 B 的公鑰加密獲得密文,明文使用 Hash 獲得訊息摘要並用 A 的私鑰加密訊息摘要。
  2. 將密文和加密的訊息摘要傳送給 B。
  3. B 使用密鑰解密獲得明文,使用 A 的公鑰解密獲得訊息摘要。
  4. B 將明文使用 Hash 獲得雜湊值,比對訊息摘要是否一致,確保資訊沒有被傳改。

在非對稱加密演算法中常用的演算法有: RSA、DSA、ECC

Cache Flow

優點:安全 缺點:速度較慢

非對稱加密數據交換流程:

  1. 建立金鑰: A、B 雙方各自產生一組成對的(公鑰及私鑰) 公鑰作為加密用途, 須對外公開。 私鑰作為解密用途, 不對外公開, 必須嚴格保管, 確認授權後才能使用。

  2. 取得公鑰: A取得(B的公鑰), 並確保(B的公鑰)是來自於B 公鑰應公開給任何人, 才能方便的接收來自任何人的加密訊息。 公鑰通常會存放在可信賴的第三方憑證組織 CA Server 上, 公開給任何人取得, 可確保公鑰是來自於B. 例如: VISA 組織。 公鑰的信賴方式: 經由可信賴的第三方憑證組織的信賴程度。 透過與B約定確認後的方法。

  3. 加密原文 A利用(B的公鑰), 加密(原文)後, 產生(加密訊息)。

  4. 製作簽章 A利用(A的私鑰), 簽章(原文)後, 產生(簽章訊息)。

  5. 傳送訊息 B取得(A的公鑰), (加密訊息), (簽章訊息)。

  6. 解密訊息 B利用(B的私鑰), 解密(加密訊息), 取得(原文)。

  7. 驗證簽章 B取得(A的公鑰), 驗證(簽章訊息), 確定(加密訊息)沒有被竄改。

安全散列算法 SHA (Secure Hash Algorithm)

散列算法,又稱哈希函數,是一種單向加密算法。在信息安全技術中,經常需要驗證消息的完整性,散列(Hash)函數提供了這一服務,它對不同長度的輸入消息,產生固定長度的輸出。 這個固定長度的輸出稱為原輸入消息的"散列"或"消息摘要"(Message digest)。散列算法不算加密算法,因為其結果是不可逆的,既然是不可逆的,那麼當然不是用來加密的,而是簽名。

用途: 主要用於驗證,防止信息被修改。具體用途如:文件校驗、數字簽名、鑒權協議

安全雜湊演算法主要有兩個特性:

是不論檔案的大小為何,都可以得到固定長度的字串,也就是說輸出長度並不受輸入長度影響。這種轉換是一種壓縮映射, 因為輸出長度通常都遠遠小於輸入長度。 是由字串(也就是雜湊值)反推出原始檔案是非常困難的,因為可以確保檔案的安全性,這種特性被稱為單向雜湊,也是此演算法為何稱作"安全"的意思。

在安全散列演算法中常用的演算法有:MD5、SHA-1、SHA-2、SHA-3