Hi, I am

Ngô Tôn

I am a programmer.

Home / HCMUS / Data Hiding and Secret Sharing / Ẩn tin mật trên âm thanh – Audio steganography

Ẩn tin mật trên âm thanh – Audio steganography

Âm thanh được biểu diễn như thế nào trong máy tính?

Âm thanh được biểu diễn trong máy tính dưới dạng một sóng âm đã được rời rạc hóa.

Sóng nguyên thủy được rời rạc hóa
• Mỗi điểm được gọi là một sample
• Mức độ rời rạc hóa theo chiều y (cường độ) được thể hiện bởi bit depth (số bit dùng để lưu giá trị cường độ của một sample)
• Mức độ rời rạc hóa theo chiều x (thời gian) được thể hiện bởi sample rate (số sample / s)

File âm thanh có thể mono hoặc stereo
 Mono: một sóng
 Stereo: hai sóng khác nhau (có cùng chiều dài); khi phát ra, một sóng phát ở loa trái, một sóng phát ở loa phải → cho cảm giác thực hơn

File âm thanh có thể lossless hoặc lossy
 Lossy: đọc dữ liệu từ file, chỉnh sửa dữ liệu, ghi dữ liệu đã chỉnh sửa xuống file, đọc dữ liệu lên lại thì dữ liệu đọc được sẽ không giống so với dữ liệu đã ghi trước đó; ví dụ: file *.mp3
 Lossless: ví dụ, file *.wav

Ẩn dữ liệu ở đâu trên âm thanh?

Cách đơn giản là ẩn vào các bit LSB của mỗi sample

Một cách khác là sử dụng echo (tiếng vang)

 Để nhúng bit 0: thêm vào cover audio một echo với độ trễ δ0
 Để nhúng bit 1: thêm vào cover audio một echo với độ trễ δ1
 Với δ0 và δ1 đủ nhỏ, tai người sẽ không nhận biết được echo.

Để nhúng nhiều bit, ta chia cover audio ra thành nhiều đoạn và nhúng một bit vào mỗi đoạn bằng cách thêm vào đoạn đó echo có độ trễ δ0 hoặc δ1

Quá trình nhúng

Bước 1: tạo ra 2 cover audio, một có echo ứng với bit 0, một có echo ứng với bit 1

Bước 2: tạo ra 2 bộ trộn mixer0 và mixer1; mixer1 được tạo ra dựa vào chuỗi bit nhúng, mixer0 = 1 – mixer1

Bước 3: stego audio = (cover audio + echo0) * mixer0+(cover audio + echo1) * mixer1

Input
 message bits
 cover audio
 delta0, delta1
 decay rate ∈ [0, 1]: tỉ lệ scale cường độ của echo so với sóng âm gốc

Output
 stego audio

Rút trích:

Với một đoạn âm thanh của stego audio, cần xác định xem có echo ở độ trễ nào

Để biết là bit 0 hay 1, ta hãy xem thêm độ trễ của echo ở các đoạn âm thanh khác → sẽ có tất cả 2 giá trị độ trễ δ0 (bit 0) và δ1
(bit 1), nhưng không biết đâu là δ0, đâu là δ1 -> Một cách là tính autocorrelation

Source code (Python)

Âm thanh được biểu diễn như thế nào trong máy tính? Âm thanh được biểu diễn trong máy tính dưới dạng một sóng âm đã được rời rạc hóa. Sóng nguyên thủy được rời rạc hóa • Mỗi điểm được gọi là một sample • Mức độ rời rạc hóa theo chiều y (cường độ) được thể hiện bởi bit depth (số bit dùng để lưu giá trị cường độ của một sample) • Mức độ rời rạc hóa theo chiều x (thời gian) được thể hiện bởi sample rate (số sample / s) File âm thanh có thể mono…

User Rating: 3.7 ( 2 votes)

About ngoton

Ngô Tôn is a programmer with passion for tailored software solutions. Comes with 6+ years of IT experience, to execute beautiful front-end experiences with secure and robust back-end solutions.

Check Also

Ẩn tin mật trên văn bản – Text steganography

Phương pháp dùng khoảng trắng của văn bản Ví dụ: bit 0 = 1 khoảng …

21 comments

  1. Thạnksss

  2. Source code (Python) xem như thế nào vậy ad?

  3. Cho em xin source code phẩn rút trích bằng autocorrelation được không ạ ? Em đã tham khảo tài liệu mà vẫn không hiểu và chạy kết quả sai.

    • Luật rút trích như sau:
      Với mỗi đoạn sóng:
      – Nếu autocorrelation tại độ trễ của echo ứng với bit 0 > autocorrelation tại độ trễ của echo ứng với bit 1: thì bit = 0
      – Ngược lại: bit = 1


      def extract(stego_aud_file, num_segments, time_delta0, time_delta1):
      '''
      Rút trích message bits đã được nhúng trên âm thanh bằng phương pháp echo.

      Các tham số:
      stego_aud_file (str): Tên file chứa stego audio.
      num_segments (int): Số lượng đoạn sóng dùng để nhúng (mỗi đoạn sẽ nhúng một bit).
      time_delta0 (float): Độ trễ (giây) của echo ứng với bit 0.
      time_delta1 (float): Độ trễ (giây) của echo ứng với bit 1.

      Giá trị trả về:
      Mảng numpy (một chiều, dtype = bool): Message bits được rút trích (gồm cả đuôi 100...).
      '''

      rate, stego_samples = wavfile.read(stego_aud_file)
      num_samples_seg = int(len(cover_samples)/num_segments)

      sample_delay0 = int(time_delta0 * rate)
      sample_delay1 = int(time_delta1 * rate)

      msg_bits = []
      for i in range(num_segments):
      start = i*num_samples_seg
      end = start+num_samples_seg

      acs = []
      temp = (stego_samples[start:end] - stego_samples[start:end].mean()) / (stego_samples[start:end].var() ** 0.5)
      for k in range(len(stego_samples[start:end]) - 1):
      if k == 0:
      ac = np.mean(temp * temp)
      else:
      ac = np.mean(temp[:-k] * temp[k:])
      acs.append(ac)

      if acs[sample_delay0] > acs[sample_delay1]:
      msg_bits.append(0)
      else:
      msg_bits.append(1)

      return np.array(msg_bits)

  4. Anh ơi, anh có thể cho em xin source code được không ạ? Em cần tham khảo code.
    Mail của em là: Rocketbumba1999@gmail.com

  5. Cho mình xin source với ạ

  6. Cảm ơn bài viết tuyệt vời của anh, cho em xin source code tham khảo với ạ. Mail: lucker.thanhtam@gmail.com

  7. Bạn cho mình xin source code tham khảo với ạ. Cảm ơn

  8. Chào anh, em có thể tham khảo source code được không ? Cảm ơn

  9. Cho mình xin source code tham khảo ẩn dữ liệu âm thanh bằng cách sử dụng echo với ạ. Mình cảm ơn

  10. Lê Phương Anh

    Em xin phép tham khảo code với ạ. Cảm ơn anh nhiều.

  11. Chào anh, cho em xin source code tham khảo ẩn dữ liệu âm thanh bằng cách sử dụng echo ạ, em cám ơn.

  12. chào anh, có thể cho em xin phần source code tham khảo với được không ạ, cảm ơn anh nhiều

Leave a Reply

Your email address will not be published. Required fields are marked *