密碼學介紹

密碼學是使用數學結構(程式碼)來確保通訊安全的科學。密碼學領域是資訊保安領域的一個子集。

有許多加密操作可能; 一些最著名的例子是:

  • 加密: 將明文訊息轉換為密文訊息,以使訊息保密
  • 解密: 將密文訊息轉換回明文訊息
  • 安全雜湊: 執行不可逆(單向)壓縮,為特定訊息建立靜態大小,計算不同的表示。

密碼學基於數學,並且算術經常用於與密碼學相關的演算法中。開發人員使用了一小部分原語,方案和協議。開發人員通常不會自己實現演算法,而是使用加密 API 和執行時提供的方案和協議。

一個原始可能是一個塊密碼,如 AES。基元是用作加密方案的構建塊的任何演算法。甲方案是例如一個塊密碼的操作模式,例如 CBC 或 GCM。一個或多個加密方案可以構成加密協議。諸如 TLS 的協議使用許多加密方案,但也使用訊息編碼/解碼技術,訊息排序,使用條件等。低階加密 API 僅提供對基元的直接訪問,而高階 API 可提供對完整協議實現的訪問。

由於書面文字的發明,訊息已經手工加密和解密。至少自古希臘社會以來,機械裝置一直被使用。這種密碼術被稱為經典密碼術。密碼學的許多介紹都是從經典密碼學開始的,因為它相對容易分析。然而,經典演算法不符合現代結構所要求的安全性,並且通常很容易破解。經典方案的例子是 Caesar 和 Vigenère。最著名的機械裝置無疑是 Enigma 編碼機。

現代密碼學基於科學 - 主要是數學和數字/群論。它涉及更復雜的演算法和金鑰大小。這些只能由計算裝置有效地處理。因此,現代密碼學主要使用面向位元組的輸入和輸出。這意味著訊息需要轉換為二進位制並返回,然後才能通過加密演算法的任何實現進行轉換。這意味著(文字)訊息需要在加密之前使用字元編碼進行轉換。

文字訊息的字元編碼形式是 UTF-8。結構化訊息可以使用 ASN.1 / DER 或規範 XML 表示 - 或任何數量的專有技術來編碼。有時二進位制輸出也需要轉換回文字。在這種情況下,諸如基本 64 或十六進位制的編碼方案可用於表示文字內的二進位制資料。

眾所周知,密碼學很難做到。開發人員應該只使用他們完全理解的結構。如果可能,開發人員應使用更高階別的協議(如 TLS)來建立傳輸安全性。沒有正規教育或豐富經驗,沒有實際機會建立安全的演算法,方案或協議。從網際網路複製/貼上示例不太可能導致安全的解決方案,甚至可能導致資料丟失。