隱寫術 - 影像



隱寫術是一種透過將秘密資訊嵌入音訊、影片、影像或文字檔案來隱藏秘密資訊的方法。它是用來保護機密或敏感資料免受惡意攻擊的方法之一。

有時,隱藏的內容在隱藏在另一個檔案型別之前會被加密。如果它沒有被編碼,那麼它可能會進行某種形式的修改,以增加其對檢測的不可見性。

隱寫術有時被比作密碼學,因為兩者都是秘密通訊的形式。但是,這兩個概念之間存在差異;與隱寫術不同,隱寫術不涉及在傳送前加密資料或在接收後使用金鑰解碼資料。

術語“隱寫術”來自希臘語“stegos”,意思是“覆蓋”,以及“grayfia”,意思是“寫作”。這可以翻譯為“隱蔽的寫作”或“隱藏的寫作”。

它與密碼學有何不同?

密碼學和隱寫術都是隱藏、隱藏或保護敏感資料的過程。它們的主要區別在於,密碼學使資料不可讀或隱藏其含義,而隱寫術則隱藏資料的存在。

密碼學通常用於補充隱寫術提供的安全性。加密方法用於在敏感資訊包含在封面檔案中之前對其進行加密。

隱寫術是如何工作的?

隱寫術以避免檢測的方式隱藏資訊。最常見的方法之一被稱為“最低有效位”(LSB)隱寫術。這需要將秘密資訊編碼在媒體檔案的最低有效位中。例如:

  • 影像檔案中的每個畫素都有三個位元組的資料,每個顏色(紅色、綠色和藍色)一個位元組。某些影像格式為透明度或“alpha”保留額外的第四個位元組。
  • LSB隱寫術更改每個位元組的最後一位以隱藏一個數據塊。要使用此方法隱藏一兆位元組的資料,您需要一個大小為八兆位元組的影像檔案。
  • 修改畫素值的最後一位不會導致影像發生可見變化,因此任何看到原始影像和隱寫術修改後的照片的人都不會看到差異。

相同的策略可用於其他數字內容,如音訊和影片,以在檔案的導致對可聽或可見輸出變化最小的區域中隱藏資料。

另一種隱寫術方法是替換單詞或字母。這是秘密訊息的傳送者透過將其分佈在一個更大的文字中來隱藏文字,並在特定間隔組織單詞。雖然這種替換方法易於使用,但它可能會使文字顯得不尋常且不合時宜,因為秘密單詞在目標句子中在邏輯上不匹配。

其他隱寫術方法包括隱藏硬碟上的完整分割槽或在檔案和網路標題中插入資料。這些技術的成功取決於可以隱藏多少資料以及檢測起來有多容易。

隱寫術型別

從數字的角度來看,隱寫術可以分為五類。它們如下:

  • 文字隱寫術 - 這是在常規文字中隱藏隱藏訊息的過程,例如將訊息嵌入段落或句子中。
  • 影像隱寫術 - 這是透過將訊息嵌入其畫素中來隱藏影像中資訊的流程。
  • 音訊隱寫術 - 這是在音訊錄音中隱藏資料的方法,就像將訊息嵌入聲波中一樣。
  • 影片隱寫術 - 這是將資料秘密編碼到影片檔案中的技術,同時保留其外觀。
  • 網路隱寫術 - 網路隱寫術是在網路流量中隱藏資料的過程,例如在計算機之間傳送的資料包中編碼訊息。

影像隱寫術

讓我們在下面的部分中瞭解影像隱寫術的演算法以及它是如何工作的:

演算法

以下是影像隱寫術中常用方法和演算法的簡要概述:

  • 最低有效位 (LSB) 替換 − 此方法涉及將私密訊息的位替換為影像畫素的最低有效位 (LSB)。這些 LSB 除了其他因素外,在略微改變時對影像外觀的影響不大。
  • 擴頻 − 此方法的作用是分散對畫素顏色值所做的微小更改,以便在影像的每個部分都隱藏秘密訊息。
  • 變換域技術 − 這些技術涉及使用傅立葉變換將影像轉換為另一個域(例如頻域),然後在該域中隱藏秘密訊息。一種流行的技術是離散餘弦變換 (DCT),它用於 JPEG 壓縮,並在畫素塊上應用。將資訊嵌入變換域使得難以被察覺。
  • 視覺密碼學 − 視覺密碼學不是直接隱藏資訊,而是將一條秘密訊息分成許多份額或層,每份額單獨來看都不能揭示任何關於原始文字的資訊。
  • F5 演算法 − F5 演算法是一種基於嵌入的隱寫術方法,它使用最低有效位 (LSB)。它確保透過修改這些畫素的最低有效位元組不會產生明顯的更改,同時仍能實現最大容量。

這些技術和演算法可用於許多隱寫術工具和軟體,用於將資料隱藏在影像中。根據應用程式的需求,它們提供不同級別的安全、容量和檢測保護。

工作原理?

影像隱寫術允許秘密資訊以不易為人眼察覺的方式隱藏。以下是其一般工作原理的簡單解釋:

  • 第一步是選擇一個用作載體或掩蓋影像的影像。它應該是一個數據量大和複雜度高的影像,以便於隱藏額外資訊。
  • 接下來,將隱藏的訊息或秘密資訊編碼到掩蓋影像中。可以使用不同的技術來實現這一點,例如 LSB 替換、擴頻、變換域方法等。
  • 然後,根據所選方法來表示秘密訊息的位,透過修改某些畫素或顏色值,將編碼後的訊息嵌入到掩蓋影像中。
  • 現在我們已經修改了包含隱藏訊息的圖片,讓我們將其儲存在所需位置或在必要時進行傳輸。修改後的圖片看起來像任何其他普通的照片,普通人不會在意具體的工具或知識,除非他們想找出其中隱藏了什麼。
  • 如果有人擁有足夠的技能和工具,他可以檢索這些隱形文字。這樣的人會使用在嵌入過程中使用的類似演算法或方法來檢查更改後的影像,從而能夠檢測並從中提取隱蔽資料。
  • 根據程式的不同,可能會有一個驗證步驟來確保隱藏的訊息被正確且完美地提取。這可能涉及查詢解碼訊息中的特定簽名或模式。

使用 Python 實現

使用 LSB 替換,此程式碼將訊息編碼到影像中,然後從編碼後的影像中解碼訊息。要執行此程式碼,請確保已在系統中安裝 Python 影像庫 (PIL)(pip install pillow)。

這是一個使用 LSB 替換進行影像隱寫術的簡單 Python 程式碼示例:

from PIL import Image

def encode_message(image_path, message):
   img = Image.open(image_path)
   binary_message = ''.join(format(ord(char), '08b') for char in message)

   if len(binary_message) > img.width * img.height * 3:
      raise ValueError("Message is too long to encode in the image")

   binary_message += '1111111111111110'  # Adding end of message marker

   index = 0
   for pixel in img.getdata():
      if index < len(binary_message):
         # Convert pixel RGB values to binary
         pixel = list(pixel)
         for i in range(3):
            pixel[i] = pixel[i] & ~1 | int(binary_message[index], 2)
               index += 1
            img.putpixel((index // 3 % img.width, index // 3 // img.width), tuple(pixel))
      else:
         break

   img.save("encoded_image.png")

def decode_message(image_path):
   img = Image.open(image_path)
   binary_message = ""

   for pixel in img.getdata():
      for value in pixel:
         binary_message += bin(value)[-1]

   # Extract the message 
   message = ""
   for i in range(0, len(binary_message), 8):
      byte = binary_message[i:i+8]
      if byte == '1111111111111110':
         break
      message += chr(int(byte, 2))

   return message

# function execution
encode_message("my_image.png", "This is a secret message.")
decoded_message = decode_message("encoded_image.png")
print("Decoded Message:", decoded_message)

輸入/輸出

在下面的輸出中,我們可以看到兩張不同的影像。第一張影像是應用隱寫術演算法之前的影像。第二張影像是應用演算法之後的影像。您可以看到兩張影像的大小。在輸入影像中嵌入訊息後,影像的大小會增加。

Image Steganography Output
廣告
© . All rights reserved.