Stenography là gì

[Steganography] Kỹ thuật che dấu thông tin - Phần 1

Gần đây tôi có tham gia giải một số bài CTF về Steganography khá thú vị, vừa rồi lại có dịp được làm một đề tài nhỏ cho môn học An Toàn Mạng  về mảng này. Hôm nay xin chia sẻ ở đây cho ai đó quan tâm, nội dung sẽ khá dài vì tôi muốn trình bày chi tiết cho bạn nào muốn tìm hiểu sâu về nó hơn là chơi một bài CTF để lấy điểm [như tôi chẳng hạn :D], tôi sẽ chia làm 2 phần, bài bạn đang đọc là phần giới thiệu về

Steganography.

Theo Wikipedia thì: “Kỹ thuật giấu thư [tiếng Anh: Steganography] là nghệ thuật và khoa học về việc viết và chuyển tải các thông điệp một cách bí mật, sao cho ngoại trừ người gửi và người nhận, không ai biết đến sự tồn tại của bức thư, là một dạng của bảo mật bằng cách che giấu…..“

A muốn gửi cho B thông điệp “MY SECRET” mà không muốn người khác biết đến sự tồn tại của nó, A sẽ tìm cách truyền tải thông điệp này vào một tập tin hình ảnh, âm thanh hoặc video sau đó gửi tập tin này cho B, người khác chỉ thấy và xem được nội dung tập tin mà không biết là có thông điệp ẩn dấu bên trong nó. Các phương pháp ẩn dấu dữ liệu theo phương pháp này được gọi là Steganography.

[Nguồn: internet]

Lưu ý Steganography khác Cryptography [Mật mã học] ở chỗ người gửi không muốn cho người khác biết là có thông điệp bí mật đang được gửi. Trong Cryptography sẽ xảy ra hai quá trình ngược chiều nhau là mã hóa [Encrypt] và giải mã [Decrypt] dựa vào một chìa khóa bí mật [key]. Trong Steganography cũng sẽ xảy ra hai quá trình ngược nhau là mã hóa [Encode] và giải mã [Decode] nhưng không cần thông qua chìa khóa nào cả. Mặc dù vậy cũng có thể kết hợp cả Steganography và Cryptography để bảo mật thông tin nếu bạn thích.

  • Encode là cách chuyển dữ liệu từ định dạng X sang Y dựa theo một chuẩn nào đó thông qua một thuật toán cụ thể, ai biết được thuật toán này thì sẽ đọc được dữ liệu.
  • Encrypt là cách chuyển dữ liệu từ dạng có nghĩa X sang dạng không rõ nghĩa Y thông qua một thuật toán cụ thể, thuật toán này cần một chìa khóa bí mật K. Muốn đọc được dữ liệu thì cần phải biết thuật toán sử dụng và chìa khóa bí mật K. Thời gian tới tôi sẽ viết nhiều bài về Cryptography vì đây cũng chính là mảng tôi rất thích và đang được học tại trường.

Bài kế tiếp tôi sẽ trình bày chi tiết thuật toán để Encode một thông điệp vào một bức ảnh và hiện thực nó bằng Java, thuật toán sử dụng ở đây là LSB steganography, đây là một thuật toán rất đơn giản và phổ biến.

Bài đăng phổ biến từ blog này

[Steganography] Kỹ thuật che dấu thông tin - Phần 2

Bài viết này tôi chia sẻ về cách cài đặt thuật toán LSB Steganography mà tôi đã trình bày tại Phần 1 Một số lý thuyết cần chú ý trước khi chúng ta bắt đầu: Một bức ảnh sẽ có chiều rộng là W, chiều cao là H nên số điểm ảnh [pixel] là W x H, chúng ta sẽ có một ma trận các pixel có H dòng và W cột [W x H] Mỗi pixel có một giá trị màu RGB [Red – Green – Blue], mỗi giá trị R – G – B có giá trị từ 0 -> 255 tương ứng với một Byte trong lưu trữ, suy ra có tất cả 256 3 tổ hợp màu khác nhau có thể được tạo ra.  Ví dụ: Màu đỏ R có giá trị RGB là [255, 0, 0]; Xanh lá cây G [0,255,0]; màu vàng Yello [255,255,0];….  Mỗi Byte gồm 8 Bit, Bit có chỉ số nhỏ nhất gọi là LSB [Least Significant Bit].  Ví dụ: Giá trị 147 chuyển sang nhị phân là 10010011 sẽc có LSB là 1. Giá trị 200 chuyển sang nhị phân là 11001000 sẽ có LSB là 0  Ý tưởng của thuật toán này là sẽ thay thế các bit LSB của từng byte trong giá trị RGB của từng Pixel. Sỡ dĩ chúng ta chỉ thay thế các bit LSB là vì sau khi t

PHP Race Condition Vulnerability Example

This article based-on the excellent article " Practical Race Condition Vulnerabilities in Web Applications ". I have made my own sample source-code for testing. ================ # Let's start! Log-into MySQL[or MariaDB] Shell to create sample database MariaDB [test]> create database test character set utf8 collate utf8_general_ci; MariaDB [test]> grant all privileges on test.* to test@'localhost' identified by 'test@123'; MariaDB [test]> flush privileges; MariaDB [test]> create table bank_accounts[uid int auto_increment primary key,ucode varchar[10] not null,balance int[11] not null default 0,uname varchar[50] not null]; MariaDB [test]> insert into bank_accounts[ucode,uname,balance] values ['BANK000001','User 1',20000],['BANK000002','User 2',5500],['BANK000003','User 3',8700]; We'll test with User-1's account. MariaDB [test]> select * from bank_accounts; +-----+--------

Chủ Đề